/*! * Webflow: Front-end site library * @license MIT * Inline scripts may access the api using an async handler: * var Webflow = Webflow || []; * Webflow.push(readyFunction); */ (() => { // webpackBootstrap var __webpack_modules__ = ({ 1361: (function (module) { /** * https://github.com/gre/bezier-easing * BezierEasing - use bezier curve for transition easing function * by Gaëtan Renaudeau 2014 - 2015 – MIT License */ // These values are established by empiricism with tests (tradeoff: performance VS precision) var NEWTON_ITERATIONS = 4; var NEWTON_MIN_SLOPE = 0.001; var SUBDIVISION_PRECISION = 0.0000001; var SUBDIVISION_MAX_ITERATIONS = 10; var kSplineTableSize = 11; var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0); var float32ArraySupported = typeof Float32Array === 'function'; function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; } function B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; } function C (aA1) { return 3.0 * aA1; } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2. function calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2. function getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); } function binarySubdivide (aX, aA, aB, mX1, mX2) { var currentX, currentT, i = 0; do { currentT = aA + (aB - aA) / 2.0; currentX = calcBezier(currentT, mX1, mX2) - aX; if (currentX > 0.0) { aB = currentT; } else { aA = currentT; } } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); return currentT; } function newtonRaphsonIterate (aX, aGuessT, mX1, mX2) { for (var i = 0; i < NEWTON_ITERATIONS; ++i) { var currentSlope = getSlope(aGuessT, mX1, mX2); if (currentSlope === 0.0) { return aGuessT; } var currentX = calcBezier(aGuessT, mX1, mX2) - aX; aGuessT -= currentX / currentSlope; } return aGuessT; } module.exports = function bezier (mX1, mY1, mX2, mY2) { if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) { throw new Error('bezier x values must be in [0, 1] range'); } // Precompute samples table var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); if (mX1 !== mY1 || mX2 !== mY2) { for (var i = 0; i < kSplineTableSize; ++i) { sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2); } } function getTForX (aX) { var intervalStart = 0.0; var currentSample = 1; var lastSample = kSplineTableSize - 1; for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) { intervalStart += kSampleStepSize; } --currentSample; // Interpolate to provide an initial guess for t var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]); var guessForT = intervalStart + dist * kSampleStepSize; var initialSlope = getSlope(guessForT, mX1, mX2); if (initialSlope >= NEWTON_MIN_SLOPE) { return newtonRaphsonIterate(aX, guessForT, mX1, mX2); } else if (initialSlope === 0.0) { return guessForT; } else { return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2); } } return function BezierEasing (x) { if (mX1 === mY1 && mX2 === mY2) { return x; // linear } // Because JavaScript number are imprecise, we should guarantee the extremes are right. if (x === 0) { return 0; } if (x === 1) { return 1; } return calcBezier(getTForX(x), mY1, mY2); }; }; }), 8172: (function (module, __unused_webpack_exports, __webpack_require__) { var getNative = __webpack_require__(440), root = __webpack_require__(5238); /* Built-in method references that are verified to be native. */ var DataView = getNative(root, 'DataView'); module.exports = DataView; }), 1796: (function (module, __unused_webpack_exports, __webpack_require__) { var hashClear = __webpack_require__(7322), hashDelete = __webpack_require__(2937), hashGet = __webpack_require__(207), hashHas = __webpack_require__(2165), hashSet = __webpack_require__(7523); /** * Creates a hash object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Hash(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `Hash`. Hash.prototype.clear = hashClear; Hash.prototype['delete'] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; module.exports = Hash; }), 4281: (function (module, __unused_webpack_exports, __webpack_require__) { var baseCreate = __webpack_require__(5940), baseLodash = __webpack_require__(4382); /** Used as references for the maximum length and index of an array. */ var MAX_ARRAY_LENGTH = 4294967295; /** * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. * * @private * @constructor * @param {*} value The value to wrap. */ function LazyWrapper(value) { this.__wrapped__ = value; this.__actions__ = []; this.__dir__ = 1; this.__filtered__ = false; this.__iteratees__ = []; this.__takeCount__ = MAX_ARRAY_LENGTH; this.__views__ = []; } // Ensure `LazyWrapper` is an instance of `baseLodash`. LazyWrapper.prototype = baseCreate(baseLodash.prototype); LazyWrapper.prototype.constructor = LazyWrapper; module.exports = LazyWrapper; }), 283: (function (module, __unused_webpack_exports, __webpack_require__) { var listCacheClear = __webpack_require__(7435), listCacheDelete = __webpack_require__(8438), listCacheGet = __webpack_require__(3067), listCacheHas = __webpack_require__(9679), listCacheSet = __webpack_require__(2426); /** * Creates an list cache object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function ListCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `ListCache`. ListCache.prototype.clear = listCacheClear; ListCache.prototype['delete'] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; module.exports = ListCache; }), 9675: (function (module, __unused_webpack_exports, __webpack_require__) { var baseCreate = __webpack_require__(5940), baseLodash = __webpack_require__(4382); /** * The base constructor for creating `lodash` wrapper objects. * * @private * @param {*} value The value to wrap. * @param {boolean} [chainAll] Enable explicit method chain sequences. */ function LodashWrapper(value, chainAll) { this.__wrapped__ = value; this.__actions__ = []; this.__chain__ = !!chainAll; this.__index__ = 0; this.__values__ = undefined; } LodashWrapper.prototype = baseCreate(baseLodash.prototype); LodashWrapper.prototype.constructor = LodashWrapper; module.exports = LodashWrapper; }), 9036: (function (module, __unused_webpack_exports, __webpack_require__) { var getNative = __webpack_require__(440), root = __webpack_require__(5238); /* Built-in method references that are verified to be native. */ var Map = getNative(root, 'Map'); module.exports = Map; }), 4544: (function (module, __unused_webpack_exports, __webpack_require__) { var mapCacheClear = __webpack_require__(6409), mapCacheDelete = __webpack_require__(5335), mapCacheGet = __webpack_require__(5601), mapCacheHas = __webpack_require__(1533), mapCacheSet = __webpack_require__(151); /** * Creates a map cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function MapCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `MapCache`. MapCache.prototype.clear = mapCacheClear; MapCache.prototype['delete'] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; module.exports = MapCache; }), 44: (function (module, __unused_webpack_exports, __webpack_require__) { var getNative = __webpack_require__(440), root = __webpack_require__(5238); /* Built-in method references that are verified to be native. */ var Promise = getNative(root, 'Promise'); module.exports = Promise; }), 6656: (function (module, __unused_webpack_exports, __webpack_require__) { var getNative = __webpack_require__(440), root = __webpack_require__(5238); /* Built-in method references that are verified to be native. */ var Set = getNative(root, 'Set'); module.exports = Set; }), 3290: (function (module, __unused_webpack_exports, __webpack_require__) { var MapCache = __webpack_require__(4544), setCacheAdd = __webpack_require__(1760), setCacheHas = __webpack_require__(5484); /** * * Creates an array cache object to store unique values. * * @private * @constructor * @param {Array} [values] The values to cache. */ function SetCache(values) { var index = -1, length = values == null ? 0 : values.length; this.__data__ = new MapCache; while (++index < length) { this.add(values[index]); } } // Add methods to `SetCache`. SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; SetCache.prototype.has = setCacheHas; module.exports = SetCache; }), 1902: (function (module, __unused_webpack_exports, __webpack_require__) { var ListCache = __webpack_require__(283), stackClear = __webpack_require__(6063), stackDelete = __webpack_require__(7727), stackGet = __webpack_require__(3281), stackHas = __webpack_require__(6667), stackSet = __webpack_require__(1270); /** * Creates a stack cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Stack(entries) { var data = this.__data__ = new ListCache(entries); this.size = data.size; } // Add methods to `Stack`. Stack.prototype.clear = stackClear; Stack.prototype['delete'] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; module.exports = Stack; }), 4886: (function (module, __unused_webpack_exports, __webpack_require__) { var root = __webpack_require__(5238); /** Built-in value references. */ var Symbol = root.Symbol; module.exports = Symbol; }), 8965: (function (module, __unused_webpack_exports, __webpack_require__) { var root = __webpack_require__(5238); /** Built-in value references. */ var Uint8Array = root.Uint8Array; module.exports = Uint8Array; }), 3283: (function (module, __unused_webpack_exports, __webpack_require__) { var getNative = __webpack_require__(440), root = __webpack_require__(5238); /* Built-in method references that are verified to be native. */ var WeakMap = getNative(root, 'WeakMap'); module.exports = WeakMap; }), 9198: (function (module) { /** * A faster alternative to `Function#apply`, this function invokes `func` * with the `this` binding of `thisArg` and the arguments of `args`. * * @private * @param {Function} func The function to invoke. * @param {*} thisArg The `this` binding of `func`. * @param {Array} args The arguments to invoke `func` with. * @returns {*} Returns the result of `func`. */ function apply(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } module.exports = apply; }), 4970: (function (module) { /** * A specialized version of `_.forEach` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns `array`. */ function arrayEach(array, iteratee) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (iteratee(array[index], index, array) === false) { break; } } return array; } module.exports = arrayEach; }), 2654: (function (module) { /** * A specialized version of `_.filter` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {Array} Returns the new filtered array. */ function arrayFilter(array, predicate) { var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; while (++index < length) { var value = array[index]; if (predicate(value, index, array)) { result[resIndex++] = value; } } return result; } module.exports = arrayFilter; }), 4979: (function (module, __unused_webpack_exports, __webpack_require__) { var baseTimes = __webpack_require__(1682), isArguments = __webpack_require__(9732), isArray = __webpack_require__(6377), isBuffer = __webpack_require__(6018), isIndex = __webpack_require__(9251), isTypedArray = __webpack_require__(8586); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Creates an array of the enumerable property names of the array-like `value`. * * @private * @param {*} value The value to query. * @param {boolean} inherited Specify returning inherited property names. * @returns {Array} Returns the array of property names. */ function arrayLikeKeys(value, inherited) { var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode. key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers. (isBuff && (key == 'offset' || key == 'parent')) || // PhantomJS 2 has enumerable non-index properties on typed arrays. (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || // Skip index properties. isIndex(key, length) ))) { result.push(key); } } return result; } module.exports = arrayLikeKeys; }), 1098: (function (module) { /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } module.exports = arrayMap; }), 5741: (function (module) { /** * Appends the elements of `values` to `array`. * * @private * @param {Array} array The array to modify. * @param {Array} values The values to append. * @returns {Array} Returns `array`. */ function arrayPush(array, values) { var index = -1, length = values.length, offset = array.length; while (++index < length) { array[offset + index] = values[index]; } return array; } module.exports = arrayPush; }), 2607: (function (module) { /** * A specialized version of `_.reduce` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {*} [accumulator] The initial value. * @param {boolean} [initAccum] Specify using the first element of `array` as * the initial value. * @returns {*} Returns the accumulated value. */ function arrayReduce(array, iteratee, accumulator, initAccum) { var index = -1, length = array == null ? 0 : array.length; if (initAccum && length) { accumulator = array[++index]; } while (++index < length) { accumulator = iteratee(accumulator, array[index], index, array); } return accumulator; } module.exports = arrayReduce; }), 3955: (function (module) { /** * A specialized version of `_.some` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {boolean} Returns `true` if any element passes the predicate check, * else `false`. */ function arraySome(array, predicate) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (predicate(array[index], index, array)) { return true; } } return false; } module.exports = arraySome; }), 609: (function (module, __unused_webpack_exports, __webpack_require__) { var baseProperty = __webpack_require__(2726); /** * Gets the size of an ASCII `string`. * * @private * @param {string} string The string inspect. * @returns {number} Returns the string size. */ var asciiSize = baseProperty('length'); module.exports = asciiSize; }), 3615: (function (module, __unused_webpack_exports, __webpack_require__) { var baseAssignValue = __webpack_require__(2676), eq = __webpack_require__(4071); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Assigns `value` to `key` of `object` if the existing value is not equivalent * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function assignValue(object, key, value) { var objValue = object[key]; if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || (value === undefined && !(key in object))) { baseAssignValue(object, key, value); } } module.exports = assignValue; }), 8357: (function (module, __unused_webpack_exports, __webpack_require__) { var eq = __webpack_require__(4071); /** * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private * @param {Array} array The array to inspect. * @param {*} key The key to search for. * @returns {number} Returns the index of the matched value, else `-1`. */ function assocIndexOf(array, key) { var length = array.length; while (length--) { if (eq(array[length][0], key)) { return length; } } return -1; } module.exports = assocIndexOf; }), 2676: (function (module, __unused_webpack_exports, __webpack_require__) { var defineProperty = __webpack_require__(9833); /** * The base implementation of `assignValue` and `assignMergeValue` without * value checks. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function baseAssignValue(object, key, value) { if (key == '__proto__' && defineProperty) { defineProperty(object, key, { 'configurable': true, 'enumerable': true, 'value': value, 'writable': true }); } else { object[key] = value; } } module.exports = baseAssignValue; }), 2009: (function (module) { /** * The base implementation of `_.clamp` which doesn't coerce arguments. * * @private * @param {number} number The number to clamp. * @param {number} [lower] The lower bound. * @param {number} upper The upper bound. * @returns {number} Returns the clamped number. */ function baseClamp(number, lower, upper) { if (number === number) { if (upper !== undefined) { number = number <= upper ? number : upper; } if (lower !== undefined) { number = number >= lower ? number : lower; } } return number; } module.exports = baseClamp; }), 5940: (function (module, __unused_webpack_exports, __webpack_require__) { var isObject = __webpack_require__(8532); /** Built-in value references. */ var objectCreate = Object.create; /** * The base implementation of `_.create` without support for assigning * properties to the created object. * * @private * @param {Object} proto The object to inherit from. * @returns {Object} Returns the new object. */ var baseCreate = (function() { function object() {} return function(proto) { if (!isObject(proto)) { return {}; } if (objectCreate) { return objectCreate(proto); } object.prototype = proto; var result = new object; object.prototype = undefined; return result; }; }()); module.exports = baseCreate; }), 8264: (function (module, __unused_webpack_exports, __webpack_require__) { var baseForOwn = __webpack_require__(3406), createBaseEach = __webpack_require__(2679); /** * The base implementation of `_.forEach` without support for iteratee shorthands. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array|Object} Returns `collection`. */ var baseEach = createBaseEach(baseForOwn); module.exports = baseEach; }), 2056: (function (module) { /** * The base implementation of `_.findIndex` and `_.findLastIndex` without * support for iteratee shorthands. * * @private * @param {Array} array The array to inspect. * @param {Function} predicate The function invoked per iteration. * @param {number} fromIndex The index to search from. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseFindIndex(array, predicate, fromIndex, fromRight) { var length = array.length, index = fromIndex + (fromRight ? 1 : -1); while ((fromRight ? index-- : ++index < length)) { if (predicate(array[index], index, array)) { return index; } } return -1; } module.exports = baseFindIndex; }), 5265: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayPush = __webpack_require__(5741), isFlattenable = __webpack_require__(1668); /** * The base implementation of `_.flatten` with support for restricting flattening. * * @private * @param {Array} array The array to flatten. * @param {number} depth The maximum recursion depth. * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. * @param {Array} [result=[]] The initial result value. * @returns {Array} Returns the new flattened array. */ function baseFlatten(array, depth, predicate, isStrict, result) { var index = -1, length = array.length; predicate || (predicate = isFlattenable); result || (result = []); while (++index < length) { var value = array[index]; if (depth > 0 && predicate(value)) { if (depth > 1) { // Recursively flatten arrays (susceptible to call stack limits). baseFlatten(value, depth - 1, predicate, isStrict, result); } else { arrayPush(result, value); } } else if (!isStrict) { result[result.length] = value; } } return result; } module.exports = baseFlatten; }), 1: (function (module, __unused_webpack_exports, __webpack_require__) { var createBaseFor = __webpack_require__(132); /** * The base implementation of `baseForOwn` which iterates over `object` * properties returned by `keysFunc` and invokes `iteratee` for each property. * Iteratee functions may exit iteration early by explicitly returning `false`. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */ var baseFor = createBaseFor(); module.exports = baseFor; }), 3406: (function (module, __unused_webpack_exports, __webpack_require__) { var baseFor = __webpack_require__(1), keys = __webpack_require__(7361); /** * The base implementation of `_.forOwn` without support for iteratee shorthands. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Object} Returns `object`. */ function baseForOwn(object, iteratee) { return object && baseFor(object, iteratee, keys); } module.exports = baseForOwn; }), 1957: (function (module, __unused_webpack_exports, __webpack_require__) { var castPath = __webpack_require__(3835), toKey = __webpack_require__(8481); /** * The base implementation of `_.get` without support for default values. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @returns {*} Returns the resolved value. */ function baseGet(object, path) { path = castPath(path, object); var index = 0, length = path.length; while (object != null && index < length) { object = object[toKey(path[index++])]; } return (index && index == length) ? object : undefined; } module.exports = baseGet; }), 7743: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayPush = __webpack_require__(5741), isArray = __webpack_require__(6377); /** * The base implementation of `getAllKeys` and `getAllKeysIn` which uses * `keysFunc` and `symbolsFunc` to get the enumerable property names and * symbols of `object`. * * @private * @param {Object} object The object to query. * @param {Function} keysFunc The function to get the keys of `object`. * @param {Function} symbolsFunc The function to get the symbols of `object`. * @returns {Array} Returns the array of property names and symbols. */ function baseGetAllKeys(object, keysFunc, symbolsFunc) { var result = keysFunc(object); return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); } module.exports = baseGetAllKeys; }), 3757: (function (module, __unused_webpack_exports, __webpack_require__) { var Symbol = __webpack_require__(4886), getRawTag = __webpack_require__(5118), objectToString = __webpack_require__(7070); /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return (symToStringTag && symToStringTag in Object(value)) ? getRawTag(value) : objectToString(value); } module.exports = baseGetTag; }), 6993: (function (module) { /** * The base implementation of `_.hasIn` without support for deep paths. * * @private * @param {Object} [object] The object to query. * @param {Array|string} key The key to check. * @returns {boolean} Returns `true` if `key` exists, else `false`. */ function baseHasIn(object, key) { return object != null && key in Object(object); } module.exports = baseHasIn; }), 841: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGetTag = __webpack_require__(3757), isObjectLike = __webpack_require__(7013); /** `Object#toString` result references. */ var argsTag = '[object Arguments]'; /** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */ function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag; } module.exports = baseIsArguments; }), 5447: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIsEqualDeep = __webpack_require__(906), isObjectLike = __webpack_require__(7013); /** * The base implementation of `_.isEqual` which supports partial comparisons * and tracks traversed objects. * * @private * @param {*} value The value to compare. * @param {*} other The other value to compare. * @param {boolean} bitmask The bitmask flags. * 1 - Unordered comparison * 2 - Partial comparison * @param {Function} [customizer] The function to customize comparisons. * @param {Object} [stack] Tracks traversed `value` and `other` objects. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. */ function baseIsEqual(value, other, bitmask, customizer, stack) { if (value === other) { return true; } if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); } module.exports = baseIsEqual; }), 906: (function (module, __unused_webpack_exports, __webpack_require__) { var Stack = __webpack_require__(1902), equalArrays = __webpack_require__(4476), equalByTag = __webpack_require__(9027), equalObjects = __webpack_require__(8714), getTag = __webpack_require__(9937), isArray = __webpack_require__(6377), isBuffer = __webpack_require__(6018), isTypedArray = __webpack_require__(8586); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1; /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', objectTag = '[object Object]'; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * A specialized version of `baseIsEqual` for arrays and objects which performs * deep comparisons and tracks traversed objects enabling objects with circular * references to be compared. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} [stack] Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other); objTag = objTag == argsTag ? objectTag : objTag; othTag = othTag == argsTag ? objectTag : othTag; var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; if (isSameTag && isBuffer(object)) { if (!isBuffer(other)) { return false; } objIsArr = true; objIsObj = false; } if (isSameTag && !objIsObj) { stack || (stack = new Stack); return (objIsArr || isTypedArray(object)) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); } if (!(bitmask & COMPARE_PARTIAL_FLAG)) { var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); if (objIsWrapped || othIsWrapped) { var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; stack || (stack = new Stack); return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); } } if (!isSameTag) { return false; } stack || (stack = new Stack); return equalObjects(object, other, bitmask, customizer, equalFunc, stack); } module.exports = baseIsEqualDeep; }), 7293: (function (module, __unused_webpack_exports, __webpack_require__) { var Stack = __webpack_require__(1902), baseIsEqual = __webpack_require__(5447); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** * The base implementation of `_.isMatch` without support for iteratee shorthands. * * @private * @param {Object} object The object to inspect. * @param {Object} source The object of property values to match. * @param {Array} matchData The property names, values, and compare flags to match. * @param {Function} [customizer] The function to customize comparisons. * @returns {boolean} Returns `true` if `object` is a match, else `false`. */ function baseIsMatch(object, source, matchData, customizer) { var index = matchData.length, length = index, noCustomizer = !customizer; if (object == null) { return !length; } object = Object(object); while (index--) { var data = matchData[index]; if ((noCustomizer && data[2]) ? data[1] !== object[data[0]] : !(data[0] in object) ) { return false; } } while (++index < length) { data = matchData[index]; var key = data[0], objValue = object[key], srcValue = data[1]; if (noCustomizer && data[2]) { if (objValue === undefined && !(key in object)) { return false; } } else { var stack = new Stack; if (customizer) { var result = customizer(objValue, srcValue, key, object, source, stack); } if (!(result === undefined ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result )) { return false; } } } return true; } module.exports = baseIsMatch; }), 692: (function (module, __unused_webpack_exports, __webpack_require__) { var isFunction = __webpack_require__(6644), isMasked = __webpack_require__(3417), isObject = __webpack_require__(8532), toSource = __webpack_require__(1473); /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** Used for built-in method references. */ var funcProto = Function.prototype, objectProto = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' ); /** * The base implementation of `_.isNative` without bad shim checks. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */ function baseIsNative(value) { if (!isObject(value) || isMasked(value)) { return false; } var pattern = isFunction(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } module.exports = baseIsNative; }), 2195: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGetTag = __webpack_require__(3757), isLength = __webpack_require__(7924), isObjectLike = __webpack_require__(7013); /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', mapTag = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', weakMapTag = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; /** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; /** * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */ function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } module.exports = baseIsTypedArray; }), 5462: (function (module, __unused_webpack_exports, __webpack_require__) { var baseMatches = __webpack_require__(6358), baseMatchesProperty = __webpack_require__(4503), identity = __webpack_require__(1622), isArray = __webpack_require__(6377), property = __webpack_require__(8303); /** * The base implementation of `_.iteratee`. * * @private * @param {*} [value=_.identity] The value to convert to an iteratee. * @returns {Function} Returns the iteratee. */ function baseIteratee(value) { // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. if (typeof value == 'function') { return value; } if (value == null) { return identity; } if (typeof value == 'object') { return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); } return property(value); } module.exports = baseIteratee; }), 7407: (function (module, __unused_webpack_exports, __webpack_require__) { var isPrototype = __webpack_require__(8857), nativeKeys = __webpack_require__(2440); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty.call(object, key) && key != 'constructor') { result.push(key); } } return result; } module.exports = baseKeys; }), 9237: (function (module, __unused_webpack_exports, __webpack_require__) { var isObject = __webpack_require__(8532), isPrototype = __webpack_require__(8857), nativeKeysIn = __webpack_require__(1308); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeysIn(object) { if (!isObject(object)) { return nativeKeysIn(object); } var isProto = isPrototype(object), result = []; for (var key in object) { if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { result.push(key); } } return result; } module.exports = baseKeysIn; }), 4382: (function (module) { /** * The function whose prototype chain sequence wrappers inherit from. * * @private */ function baseLodash() { // No operation performed. } module.exports = baseLodash; }), 6358: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIsMatch = __webpack_require__(7293), getMatchData = __webpack_require__(7145), matchesStrictComparable = __webpack_require__(4167); /** * The base implementation of `_.matches` which doesn't clone `source`. * * @private * @param {Object} source The object of property values to match. * @returns {Function} Returns the new spec function. */ function baseMatches(source) { var matchData = getMatchData(source); if (matchData.length == 1 && matchData[0][2]) { return matchesStrictComparable(matchData[0][0], matchData[0][1]); } return function(object) { return object === source || baseIsMatch(object, source, matchData); }; } module.exports = baseMatches; }), 4503: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIsEqual = __webpack_require__(5447), get = __webpack_require__(4738), hasIn = __webpack_require__(9290), isKey = __webpack_require__(7074), isStrictComparable = __webpack_require__(1542), matchesStrictComparable = __webpack_require__(4167), toKey = __webpack_require__(8481); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. * * @private * @param {string} path The path of the property to get. * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */ function baseMatchesProperty(path, srcValue) { if (isKey(path) && isStrictComparable(srcValue)) { return matchesStrictComparable(toKey(path), srcValue); } return function(object) { var objValue = get(object, path); return (objValue === undefined && objValue === srcValue) ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); }; } module.exports = baseMatchesProperty; }), 7100: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGet = __webpack_require__(1957), baseSet = __webpack_require__(5495), castPath = __webpack_require__(3835); /** * The base implementation of `_.pickBy` without support for iteratee shorthands. * * @private * @param {Object} object The source object. * @param {string[]} paths The property paths to pick. * @param {Function} predicate The function invoked per property. * @returns {Object} Returns the new object. */ function basePickBy(object, paths, predicate) { var index = -1, length = paths.length, result = {}; while (++index < length) { var path = paths[index], value = baseGet(object, path); if (predicate(value, path)) { baseSet(result, castPath(path, object), value); } } return result; } module.exports = basePickBy; }), 2726: (function (module) { /** * The base implementation of `_.property` without support for deep paths. * * @private * @param {string} key The key of the property to get. * @returns {Function} Returns the new accessor function. */ function baseProperty(key) { return function(object) { return object == null ? undefined : object[key]; }; } module.exports = baseProperty; }), 1374: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGet = __webpack_require__(1957); /** * A specialized version of `baseProperty` which supports deep paths. * * @private * @param {Array|string} path The path of the property to get. * @returns {Function} Returns the new accessor function. */ function basePropertyDeep(path) { return function(object) { return baseGet(object, path); }; } module.exports = basePropertyDeep; }), 9864: (function (module) { /** * The base implementation of `_.reduce` and `_.reduceRight`, without support * for iteratee shorthands, which iterates over `collection` using `eachFunc`. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {*} accumulator The initial value. * @param {boolean} initAccum Specify using the first or last element of * `collection` as the initial value. * @param {Function} eachFunc The function to iterate over `collection`. * @returns {*} Returns the accumulated value. */ function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { eachFunc(collection, function(value, index, collection) { accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection); }); return accumulator; } module.exports = baseReduce; }), 5495: (function (module, __unused_webpack_exports, __webpack_require__) { var assignValue = __webpack_require__(3615), castPath = __webpack_require__(3835), isIndex = __webpack_require__(9251), isObject = __webpack_require__(8532), toKey = __webpack_require__(8481); /** * The base implementation of `_.set`. * * @private * @param {Object} object The object to modify. * @param {Array|string} path The path of the property to set. * @param {*} value The value to set. * @param {Function} [customizer] The function to customize path creation. * @returns {Object} Returns `object`. */ function baseSet(object, path, value, customizer) { if (!isObject(object)) { return object; } path = castPath(path, object); var index = -1, length = path.length, lastIndex = length - 1, nested = object; while (nested != null && ++index < length) { var key = toKey(path[index]), newValue = value; if (key === '__proto__' || key === 'constructor' || key === 'prototype') { return object; } if (index != lastIndex) { var objValue = nested[key]; newValue = customizer ? customizer(objValue, key, nested) : undefined; if (newValue === undefined) { newValue = isObject(objValue) ? objValue : (isIndex(path[index + 1]) ? [] : {}); } } assignValue(nested, key, newValue); nested = nested[key]; } return object; } module.exports = baseSet; }), 2422: (function (module, __unused_webpack_exports, __webpack_require__) { var constant = __webpack_require__(5055), defineProperty = __webpack_require__(9833), identity = __webpack_require__(1622); /** * The base implementation of `setToString` without support for hot loop shorting. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ var baseSetToString = !defineProperty ? identity : function(func, string) { return defineProperty(func, 'toString', { 'configurable': true, 'enumerable': false, 'value': constant(string), 'writable': true }); }; module.exports = baseSetToString; }), 1682: (function (module) { /** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. * * @private * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */ function baseTimes(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } module.exports = baseTimes; }), 9653: (function (module, __unused_webpack_exports, __webpack_require__) { var Symbol = __webpack_require__(4886), arrayMap = __webpack_require__(1098), isArray = __webpack_require__(6377), isSymbol = __webpack_require__(1359); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */ function baseToString(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } if (isArray(value)) { // Recursively convert values (susceptible to call stack limits). return arrayMap(value, baseToString) + ''; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } module.exports = baseToString; }), 1072: (function (module, __unused_webpack_exports, __webpack_require__) { var trimmedEndIndex = __webpack_require__(3230); /** Used to match leading whitespace. */ var reTrimStart = /^\s+/; /** * The base implementation of `_.trim`. * * @private * @param {string} string The string to trim. * @returns {string} Returns the trimmed string. */ function baseTrim(string) { return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string; } module.exports = baseTrim; }), 7509: (function (module) { /** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ function baseUnary(func) { return function(value) { return func(value); }; } module.exports = baseUnary; }), 2471: (function (module) { /** * Checks if a `cache` value for `key` exists. * * @private * @param {Object} cache The cache to query. * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function cacheHas(cache, key) { return cache.has(key); } module.exports = cacheHas; }), 8269: (function (module, __unused_webpack_exports, __webpack_require__) { var identity = __webpack_require__(1622); /** * Casts `value` to `identity` if it's not a function. * * @private * @param {*} value The value to inspect. * @returns {Function} Returns cast function. */ function castFunction(value) { return typeof value == 'function' ? value : identity; } module.exports = castFunction; }), 3835: (function (module, __unused_webpack_exports, __webpack_require__) { var isArray = __webpack_require__(6377), isKey = __webpack_require__(7074), stringToPath = __webpack_require__(8997), toString = __webpack_require__(6214); /** * Casts `value` to a path array if it's not one. * * @private * @param {*} value The value to inspect. * @param {Object} [object] The object to query keys on. * @returns {Array} Returns the cast property path array. */ function castPath(value, object) { if (isArray(value)) { return value; } return isKey(value, object) ? [value] : stringToPath(toString(value)); } module.exports = castPath; }), 8606: (function (module) { /** * Copies the values of `source` to `array`. * * @private * @param {Array} source The array to copy values from. * @param {Array} [array=[]] The array to copy values to. * @returns {Array} Returns `array`. */ function copyArray(source, array) { var index = -1, length = source.length; array || (array = Array(length)); while (++index < length) { array[index] = source[index]; } return array; } module.exports = copyArray; }), 5772: (function (module, __unused_webpack_exports, __webpack_require__) { var root = __webpack_require__(5238); /** Used to detect overreaching core-js shims. */ var coreJsData = root['__core-js_shared__']; module.exports = coreJsData; }), 2679: (function (module, __unused_webpack_exports, __webpack_require__) { var isArrayLike = __webpack_require__(508); /** * Creates a `baseEach` or `baseEachRight` function. * * @private * @param {Function} eachFunc The function to iterate over a collection. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ function createBaseEach(eachFunc, fromRight) { return function(collection, iteratee) { if (collection == null) { return collection; } if (!isArrayLike(collection)) { return eachFunc(collection, iteratee); } var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection); while ((fromRight ? index-- : ++index < length)) { if (iteratee(iterable[index], index, iterable) === false) { break; } } return collection; }; } module.exports = createBaseEach; }), 132: (function (module) { /** * Creates a base function for methods like `_.forIn` and `_.forOwn`. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ function createBaseFor(fromRight) { return function(object, iteratee, keysFunc) { var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; while (length--) { var key = props[fromRight ? length : ++index]; if (iteratee(iterable[key], key, iterable) === false) { break; } } return object; }; } module.exports = createBaseFor; }), 727: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIteratee = __webpack_require__(5462), isArrayLike = __webpack_require__(508), keys = __webpack_require__(7361); /** * Creates a `_.find` or `_.findLast` function. * * @private * @param {Function} findIndexFunc The function to find the collection index. * @returns {Function} Returns the new find function. */ function createFind(findIndexFunc) { return function(collection, predicate, fromIndex) { var iterable = Object(collection); if (!isArrayLike(collection)) { var iteratee = baseIteratee(predicate, 3); collection = keys(collection); predicate = function(key) { return iteratee(iterable[key], key, iterable); }; } var index = findIndexFunc(collection, predicate, fromIndex); return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; }; } module.exports = createFind; }), 914: (function (module, __unused_webpack_exports, __webpack_require__) { var LodashWrapper = __webpack_require__(9675), flatRest = __webpack_require__(4502), getData = __webpack_require__(6007), getFuncName = __webpack_require__(195), isArray = __webpack_require__(6377), isLaziable = __webpack_require__(6252); /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** Used to compose bitmasks for function metadata. */ var WRAP_CURRY_FLAG = 8, WRAP_PARTIAL_FLAG = 32, WRAP_ARY_FLAG = 128, WRAP_REARG_FLAG = 256; /** * Creates a `_.flow` or `_.flowRight` function. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new flow function. */ function createFlow(fromRight) { return flatRest(function(funcs) { var length = funcs.length, index = length, prereq = LodashWrapper.prototype.thru; if (fromRight) { funcs.reverse(); } while (index--) { var func = funcs[index]; if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } if (prereq && !wrapper && getFuncName(func) == 'wrapper') { var wrapper = new LodashWrapper([], true); } } index = wrapper ? index : length; while (++index < length) { func = funcs[index]; var funcName = getFuncName(func), data = funcName == 'wrapper' ? getData(func) : undefined; if (data && isLaziable(data[0]) && data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && !data[4].length && data[9] == 1 ) { wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); } else { wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func); } } return function() { var args = arguments, value = args[0]; if (wrapper && args.length == 1 && isArray(value)) { return wrapper.plant(value).value(); } var index = 0, result = length ? funcs[index].apply(this, args) : value; while (++index < length) { result = funcs[index].call(this, result); } return result; }; }); } module.exports = createFlow; }), 9833: (function (module, __unused_webpack_exports, __webpack_require__) { var getNative = __webpack_require__(440); var defineProperty = (function() { try { var func = getNative(Object, 'defineProperty'); func({}, '', {}); return func; } catch (e) {} }()); module.exports = defineProperty; }), 4476: (function (module, __unused_webpack_exports, __webpack_require__) { var SetCache = __webpack_require__(3290), arraySome = __webpack_require__(3955), cacheHas = __webpack_require__(2471); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** * A specialized version of `baseIsEqualDeep` for arrays with support for * partial deep comparisons. * * @private * @param {Array} array The array to compare. * @param {Array} other The other array to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `array` and `other` objects. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. */ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } // Check that cyclic values are equal. var arrStacked = stack.get(array); var othStacked = stack.get(other); if (arrStacked && othStacked) { return arrStacked == other && othStacked == array; } var index = -1, result = true, seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; stack.set(array, other); stack.set(other, array); // Ignore non-index properties. while (++index < arrLength) { var arrValue = array[index], othValue = other[index]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); } if (compared !== undefined) { if (compared) { continue; } result = false; break; } // Recursively compare arrays (susceptible to call stack limits). if (seen) { if (!arraySome(other, function(othValue, othIndex) { if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { return seen.push(othIndex); } })) { result = false; break; } } else if (!( arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack) )) { result = false; break; } } stack['delete'](array); stack['delete'](other); return result; } module.exports = equalArrays; }), 9027: (function (module, __unused_webpack_exports, __webpack_require__) { var Symbol = __webpack_require__(4886), Uint8Array = __webpack_require__(8965), eq = __webpack_require__(4071), equalArrays = __webpack_require__(4476), mapToArray = __webpack_require__(7170), setToArray = __webpack_require__(2779); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** `Object#toString` result references. */ var boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', mapTag = '[object Map]', numberTag = '[object Number]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', symbolTag = '[object Symbol]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]'; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; /** * A specialized version of `baseIsEqualDeep` for comparing objects of * the same `toStringTag`. * * **Note:** This function only supports comparing values with tags of * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {string} tag The `toStringTag` of the objects to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { switch (tag) { case dataViewTag: if ((object.byteLength != other.byteLength) || (object.byteOffset != other.byteOffset)) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag: if ((object.byteLength != other.byteLength) || !equalFunc(new Uint8Array(object), new Uint8Array(other))) { return false; } return true; case boolTag: case dateTag: case numberTag: // Coerce booleans to `1` or `0` and dates to milliseconds. // Invalid dates are coerced to `NaN`. return eq(+object, +other); case errorTag: return object.name == other.name && object.message == other.message; case regexpTag: case stringTag: // Coerce regexes to strings and treat strings, primitives and objects, // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring // for more details. return object == (other + ''); case mapTag: var convert = mapToArray; case setTag: var isPartial = bitmask & COMPARE_PARTIAL_FLAG; convert || (convert = setToArray); if (object.size != other.size && !isPartial) { return false; } // Assume cyclic values are equal. var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits). stack.set(object, other); var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); stack['delete'](object); return result; case symbolTag: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } module.exports = equalByTag; }), 8714: (function (module, __unused_webpack_exports, __webpack_require__) { var getAllKeys = __webpack_require__(3948); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * A specialized version of `baseIsEqualDeep` for objects with support for * partial deep comparisons. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index = objLength; while (index--) { var key = objProps[index]; if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { return false; } } // Check that cyclic values are equal. var objStacked = stack.get(object); var othStacked = stack.get(other); if (objStacked && othStacked) { return objStacked == other && othStacked == object; } var result = true; stack.set(object, other); stack.set(other, object); var skipCtor = isPartial; while (++index < objLength) { key = objProps[index]; var objValue = object[key], othValue = other[key]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); } // Recursively compare objects (susceptible to call stack limits). if (!(compared === undefined ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) : compared )) { result = false; break; } skipCtor || (skipCtor = key == 'constructor'); } if (result && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal. if (objCtor != othCtor && ('constructor' in object && 'constructor' in other) && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) { result = false; } } stack['delete'](object); stack['delete'](other); return result; } module.exports = equalObjects; }), 4502: (function (module, __unused_webpack_exports, __webpack_require__) { var flatten = __webpack_require__(6380), overRest = __webpack_require__(6813), setToString = __webpack_require__(2413); /** * A specialized version of `baseRest` which flattens the rest array. * * @private * @param {Function} func The function to apply a rest parameter to. * @returns {Function} Returns the new function. */ function flatRest(func) { return setToString(overRest(func, undefined, flatten), func + ''); } module.exports = flatRest; }), 2593: (function (module, __unused_webpack_exports, __webpack_require__) { /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g; module.exports = freeGlobal; }), 3948: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGetAllKeys = __webpack_require__(7743), getSymbols = __webpack_require__(6230), keys = __webpack_require__(7361); /** * Creates an array of own enumerable property names and symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names and symbols. */ function getAllKeys(object) { return baseGetAllKeys(object, keys, getSymbols); } module.exports = getAllKeys; }), 9254: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGetAllKeys = __webpack_require__(7743), getSymbolsIn = __webpack_require__(2992), keysIn = __webpack_require__(3747); /** * Creates an array of own and inherited enumerable property names and * symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names and symbols. */ function getAllKeysIn(object) { return baseGetAllKeys(object, keysIn, getSymbolsIn); } module.exports = getAllKeysIn; }), 6007: (function (module, __unused_webpack_exports, __webpack_require__) { var metaMap = __webpack_require__(900), noop = __webpack_require__(6032); /** * Gets metadata for `func`. * * @private * @param {Function} func The function to query. * @returns {*} Returns the metadata for `func`. */ var getData = !metaMap ? noop : function(func) { return metaMap.get(func); }; module.exports = getData; }), 195: (function (module, __unused_webpack_exports, __webpack_require__) { var realNames = __webpack_require__(8564); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Gets the name of `func`. * * @private * @param {Function} func The function to query. * @returns {string} Returns the function name. */ function getFuncName(func) { var result = (func.name + ''), array = realNames[result], length = hasOwnProperty.call(realNames, result) ? array.length : 0; while (length--) { var data = array[length], otherFunc = data.func; if (otherFunc == null || otherFunc == func) { return data.name; } } return result; } module.exports = getFuncName; }), 1143: (function (module, __unused_webpack_exports, __webpack_require__) { var isKeyable = __webpack_require__(6669); /** * Gets the data for `map`. * * @private * @param {Object} map The map to query. * @param {string} key The reference key. * @returns {*} Returns the map data. */ function getMapData(map, key) { var data = map.__data__; return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; } module.exports = getMapData; }), 7145: (function (module, __unused_webpack_exports, __webpack_require__) { var isStrictComparable = __webpack_require__(1542), keys = __webpack_require__(7361); /** * Gets the property names, values, and compare flags of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the match data of `object`. */ function getMatchData(object) { var result = keys(object), length = result.length; while (length--) { var key = result[length], value = object[key]; result[length] = [key, value, isStrictComparable(value)]; } return result; } module.exports = getMatchData; }), 440: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIsNative = __webpack_require__(692), getValue = __webpack_require__(8974); /** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ function getNative(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : undefined; } module.exports = getNative; }), 6095: (function (module, __unused_webpack_exports, __webpack_require__) { var overArg = __webpack_require__(6512); /** Built-in value references. */ var getPrototype = overArg(Object.getPrototypeOf, Object); module.exports = getPrototype; }), 5118: (function (module, __unused_webpack_exports, __webpack_require__) { var Symbol = __webpack_require__(4886); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } module.exports = getRawTag; }), 6230: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayFilter = __webpack_require__(2654), stubArray = __webpack_require__(1036); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Built-in value references. */ var propertyIsEnumerable = objectProto.propertyIsEnumerable; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeGetSymbols = Object.getOwnPropertySymbols; /** * Creates an array of the own enumerable symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */ var getSymbols = !nativeGetSymbols ? stubArray : function(object) { if (object == null) { return []; } object = Object(object); return arrayFilter(nativeGetSymbols(object), function(symbol) { return propertyIsEnumerable.call(object, symbol); }); }; module.exports = getSymbols; }), 2992: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayPush = __webpack_require__(5741), getPrototype = __webpack_require__(6095), getSymbols = __webpack_require__(6230), stubArray = __webpack_require__(1036); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeGetSymbols = Object.getOwnPropertySymbols; /** * Creates an array of the own and inherited enumerable symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */ var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { var result = []; while (object) { arrayPush(result, getSymbols(object)); object = getPrototype(object); } return result; }; module.exports = getSymbolsIn; }), 9937: (function (module, __unused_webpack_exports, __webpack_require__) { var DataView = __webpack_require__(8172), Map = __webpack_require__(9036), Promise = __webpack_require__(44), Set = __webpack_require__(6656), WeakMap = __webpack_require__(3283), baseGetTag = __webpack_require__(3757), toSource = __webpack_require__(1473); /** `Object#toString` result references. */ var mapTag = '[object Map]', objectTag = '[object Object]', promiseTag = '[object Promise]', setTag = '[object Set]', weakMapTag = '[object WeakMap]'; var dataViewTag = '[object DataView]'; /** Used to detect maps, sets, and weakmaps. */ var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map), promiseCtorString = toSource(Promise), setCtorString = toSource(Set), weakMapCtorString = toSource(WeakMap); /** * Gets the `toStringTag` of `value`. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ var getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || (Map && getTag(new Map) != mapTag) || (Promise && getTag(Promise.resolve()) != promiseTag) || (Set && getTag(new Set) != setTag) || (WeakMap && getTag(new WeakMap) != weakMapTag)) { getTag = function(value) { var result = baseGetTag(value), Ctor = result == objectTag ? value.constructor : undefined, ctorString = Ctor ? toSource(Ctor) : ''; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag; case mapCtorString: return mapTag; case promiseCtorString: return promiseTag; case setCtorString: return setTag; case weakMapCtorString: return weakMapTag; } } return result; }; } module.exports = getTag; }), 8974: (function (module) { /** * Gets the value at `key` of `object`. * * @private * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function getValue(object, key) { return object == null ? undefined : object[key]; } module.exports = getValue; }), 7635: (function (module, __unused_webpack_exports, __webpack_require__) { var castPath = __webpack_require__(3835), isArguments = __webpack_require__(9732), isArray = __webpack_require__(6377), isIndex = __webpack_require__(9251), isLength = __webpack_require__(7924), toKey = __webpack_require__(8481); /** * Checks if `path` exists on `object`. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @param {Function} hasFunc The function to check properties. * @returns {boolean} Returns `true` if `path` exists, else `false`. */ function hasPath(object, path, hasFunc) { path = castPath(path, object); var index = -1, length = path.length, result = false; while (++index < length) { var key = toKey(path[index]); if (!(result = object != null && hasFunc(object, key))) { break; } object = object[key]; } if (result || ++index != length) { return result; } length = object == null ? 0 : object.length; return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); } module.exports = hasPath; }), 9520: (function (module) { /** Used to compose unicode character classes. */ var rsAstralRange = '\\ud800-\\udfff', rsComboMarksRange = '\\u0300-\\u036f', reComboHalfMarksRange = '\\ufe20-\\ufe2f', rsComboSymbolsRange = '\\u20d0-\\u20ff', rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsVarRange = '\\ufe0e\\ufe0f'; /** Used to compose unicode capture groups. */ var rsZWJ = '\\u200d'; /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); /** * Checks if `string` contains Unicode symbols. * * @private * @param {string} string The string to inspect. * @returns {boolean} Returns `true` if a symbol is found, else `false`. */ function hasUnicode(string) { return reHasUnicode.test(string); } module.exports = hasUnicode; }), 7322: (function (module, __unused_webpack_exports, __webpack_require__) { var nativeCreate = __webpack_require__(7305); /** * Removes all key-value entries from the hash. * * @private * @name clear * @memberOf Hash */ function hashClear() { this.__data__ = nativeCreate ? nativeCreate(null) : {}; this.size = 0; } module.exports = hashClear; }), 2937: (function (module) { /** * Removes `key` and its value from the hash. * * @private * @name delete * @memberOf Hash * @param {Object} hash The hash to modify. * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function hashDelete(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } module.exports = hashDelete; }), 207: (function (module, __unused_webpack_exports, __webpack_require__) { var nativeCreate = __webpack_require__(7305); /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Gets the hash value for `key`. * * @private * @name get * @memberOf Hash * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function hashGet(key) { var data = this.__data__; if (nativeCreate) { var result = data[key]; return result === HASH_UNDEFINED ? undefined : result; } return hasOwnProperty.call(data, key) ? data[key] : undefined; } module.exports = hashGet; }), 2165: (function (module, __unused_webpack_exports, __webpack_require__) { var nativeCreate = __webpack_require__(7305); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Checks if a hash value for `key` exists. * * @private * @name has * @memberOf Hash * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function hashHas(key) { var data = this.__data__; return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); } module.exports = hashHas; }), 7523: (function (module, __unused_webpack_exports, __webpack_require__) { var nativeCreate = __webpack_require__(7305); /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** * Sets the hash `key` to `value`. * * @private * @name set * @memberOf Hash * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the hash instance. */ function hashSet(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; return this; } module.exports = hashSet; }), 1668: (function (module, __unused_webpack_exports, __webpack_require__) { var Symbol = __webpack_require__(4886), isArguments = __webpack_require__(9732), isArray = __webpack_require__(6377); /** Built-in value references. */ var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; /** * Checks if `value` is a flattenable `arguments` object or array. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. */ function isFlattenable(value) { return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); } module.exports = isFlattenable; }), 9251: (function (module) { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ function isIndex(value, length) { var type = typeof value; length = length == null ? MAX_SAFE_INTEGER : length; return !!length && (type == 'number' || (type != 'symbol' && reIsUint.test(value))) && (value > -1 && value % 1 == 0 && value < length); } module.exports = isIndex; }), 7074: (function (module, __unused_webpack_exports, __webpack_require__) { var isArray = __webpack_require__(6377), isSymbol = __webpack_require__(1359); /** Used to match property names within property paths. */ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/; /** * Checks if `value` is a property name and not a property path. * * @private * @param {*} value The value to check. * @param {Object} [object] The object to query keys on. * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ function isKey(value, object) { if (isArray(value)) { return false; } var type = typeof value; if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || (object != null && value in Object(object)); } module.exports = isKey; }), 6669: (function (module) { /** * Checks if `value` is suitable for use as unique object key. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ function isKeyable(value) { var type = typeof value; return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') ? (value !== '__proto__') : (value === null); } module.exports = isKeyable; }), 6252: (function (module, __unused_webpack_exports, __webpack_require__) { var LazyWrapper = __webpack_require__(4281), getData = __webpack_require__(6007), getFuncName = __webpack_require__(195), lodash = __webpack_require__(6985); /** * Checks if `func` has a lazy counterpart. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` has a lazy counterpart, * else `false`. */ function isLaziable(func) { var funcName = getFuncName(func), other = lodash[funcName]; if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { return false; } if (func === other) { return true; } var data = getData(other); return !!data && func === data[0]; } module.exports = isLaziable; }), 3417: (function (module, __unused_webpack_exports, __webpack_require__) { var coreJsData = __webpack_require__(5772); /** Used to detect methods masquerading as native. */ var maskSrcKey = (function() { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); return uid ? ('Symbol(src)_1.' + uid) : ''; }()); /** * Checks if `func` has its source masked. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ function isMasked(func) { return !!maskSrcKey && (maskSrcKey in func); } module.exports = isMasked; }), 8857: (function (module) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ function isPrototype(value) { var Ctor = value && value.constructor, proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; return value === proto; } module.exports = isPrototype; }), 1542: (function (module, __unused_webpack_exports, __webpack_require__) { var isObject = __webpack_require__(8532); /** * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` if suitable for strict * equality comparisons, else `false`. */ function isStrictComparable(value) { return value === value && !isObject(value); } module.exports = isStrictComparable; }), 7435: (function (module) { /** * Removes all key-value entries from the list cache. * * @private * @name clear * @memberOf ListCache */ function listCacheClear() { this.__data__ = []; this.size = 0; } module.exports = listCacheClear; }), 8438: (function (module, __unused_webpack_exports, __webpack_require__) { var assocIndexOf = __webpack_require__(8357); /** Used for built-in method references. */ var arrayProto = Array.prototype; /** Built-in value references. */ var splice = arrayProto.splice; /** * Removes `key` and its value from the list cache. * * @private * @name delete * @memberOf ListCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function listCacheDelete(key) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } module.exports = listCacheDelete; }), 3067: (function (module, __unused_webpack_exports, __webpack_require__) { var assocIndexOf = __webpack_require__(8357); /** * Gets the list cache value for `key`. * * @private * @name get * @memberOf ListCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function listCacheGet(key) { var data = this.__data__, index = assocIndexOf(data, key); return index < 0 ? undefined : data[index][1]; } module.exports = listCacheGet; }), 9679: (function (module, __unused_webpack_exports, __webpack_require__) { var assocIndexOf = __webpack_require__(8357); /** * Checks if a list cache value for `key` exists. * * @private * @name has * @memberOf ListCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function listCacheHas(key) { return assocIndexOf(this.__data__, key) > -1; } module.exports = listCacheHas; }), 2426: (function (module, __unused_webpack_exports, __webpack_require__) { var assocIndexOf = __webpack_require__(8357); /** * Sets the list cache `key` to `value`. * * @private * @name set * @memberOf ListCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the list cache instance. */ function listCacheSet(key, value) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { ++this.size; data.push([key, value]); } else { data[index][1] = value; } return this; } module.exports = listCacheSet; }), 6409: (function (module, __unused_webpack_exports, __webpack_require__) { var Hash = __webpack_require__(1796), ListCache = __webpack_require__(283), Map = __webpack_require__(9036); /** * Removes all key-value entries from the map. * * @private * @name clear * @memberOf MapCache */ function mapCacheClear() { this.size = 0; this.__data__ = { 'hash': new Hash, 'map': new (Map || ListCache), 'string': new Hash }; } module.exports = mapCacheClear; }), 5335: (function (module, __unused_webpack_exports, __webpack_require__) { var getMapData = __webpack_require__(1143); /** * Removes `key` and its value from the map. * * @private * @name delete * @memberOf MapCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function mapCacheDelete(key) { var result = getMapData(this, key)['delete'](key); this.size -= result ? 1 : 0; return result; } module.exports = mapCacheDelete; }), 5601: (function (module, __unused_webpack_exports, __webpack_require__) { var getMapData = __webpack_require__(1143); /** * Gets the map value for `key`. * * @private * @name get * @memberOf MapCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function mapCacheGet(key) { return getMapData(this, key).get(key); } module.exports = mapCacheGet; }), 1533: (function (module, __unused_webpack_exports, __webpack_require__) { var getMapData = __webpack_require__(1143); /** * Checks if a map value for `key` exists. * * @private * @name has * @memberOf MapCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function mapCacheHas(key) { return getMapData(this, key).has(key); } module.exports = mapCacheHas; }), 151: (function (module, __unused_webpack_exports, __webpack_require__) { var getMapData = __webpack_require__(1143); /** * Sets the map `key` to `value`. * * @private * @name set * @memberOf MapCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the map cache instance. */ function mapCacheSet(key, value) { var data = getMapData(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } module.exports = mapCacheSet; }), 7170: (function (module) { /** * Converts `map` to its key-value pairs. * * @private * @param {Object} map The map to convert. * @returns {Array} Returns the key-value pairs. */ function mapToArray(map) { var index = -1, result = Array(map.size); map.forEach(function(value, key) { result[++index] = [key, value]; }); return result; } module.exports = mapToArray; }), 4167: (function (module) { /** * A specialized version of `matchesProperty` for source values suitable * for strict equality comparisons, i.e. `===`. * * @private * @param {string} key The key of the property to get. * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */ function matchesStrictComparable(key, srcValue) { return function(object) { if (object == null) { return false; } return object[key] === srcValue && (srcValue !== undefined || (key in Object(object))); }; } module.exports = matchesStrictComparable; }), 6141: (function (module, __unused_webpack_exports, __webpack_require__) { var memoize = __webpack_require__(4984); /** Used as the maximum memoize cache size. */ var MAX_MEMOIZE_SIZE = 500; /** * A specialized version of `_.memoize` which clears the memoized function's * cache when it exceeds `MAX_MEMOIZE_SIZE`. * * @private * @param {Function} func The function to have its output memoized. * @returns {Function} Returns the new memoized function. */ function memoizeCapped(func) { var result = memoize(func, function(key) { if (cache.size === MAX_MEMOIZE_SIZE) { cache.clear(); } return key; }); var cache = result.cache; return result; } module.exports = memoizeCapped; }), 900: (function (module, __unused_webpack_exports, __webpack_require__) { var WeakMap = __webpack_require__(3283); /** Used to store function metadata. */ var metaMap = WeakMap && new WeakMap; module.exports = metaMap; }), 7305: (function (module, __unused_webpack_exports, __webpack_require__) { var getNative = __webpack_require__(440); /* Built-in method references that are verified to be native. */ var nativeCreate = getNative(Object, 'create'); module.exports = nativeCreate; }), 2440: (function (module, __unused_webpack_exports, __webpack_require__) { var overArg = __webpack_require__(6512); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeKeys = overArg(Object.keys, Object); module.exports = nativeKeys; }), 1308: (function (module) { /** * This function is like * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * except that it includes inherited enumerable properties. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function nativeKeysIn(object) { var result = []; if (object != null) { for (var key in Object(object)) { result.push(key); } } return result; } module.exports = nativeKeysIn; }), 895: (function (module, exports, __webpack_require__) { /* module decorator */ module = __webpack_require__.nmd(module); var freeGlobal = __webpack_require__(2593); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process; /** Used to access faster Node.js helpers. */ var nodeUtil = (function() { try { // Use `util.types` for Node.js 10+. var types = freeModule && freeModule.require && freeModule.require('util').types; if (types) { return types; } // Legacy `process.binding('util')` for Node.js < 10. return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }()); module.exports = nodeUtil; }), 7070: (function (module) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return nativeObjectToString.call(value); } module.exports = objectToString; }), 6512: (function (module) { /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } module.exports = overArg; }), 6813: (function (module, __unused_webpack_exports, __webpack_require__) { var apply = __webpack_require__(9198); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max; /** * A specialized version of `baseRest` which transforms the rest array. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @param {Function} transform The rest array transform. * @returns {Function} Returns the new function. */ function overRest(func, start, transform) { start = nativeMax(start === undefined ? (func.length - 1) : start, 0); return function() { var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array(length); while (++index < length) { array[index] = args[start + index]; } index = -1; var otherArgs = Array(start + 1); while (++index < start) { otherArgs[index] = args[index]; } otherArgs[start] = transform(array); return apply(func, this, otherArgs); }; } module.exports = overRest; }), 8564: (function (module) { /** Used to lookup unminified function names. */ var realNames = {}; module.exports = realNames; }), 5238: (function (module, __unused_webpack_exports, __webpack_require__) { var freeGlobal = __webpack_require__(2593); /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function('return this')(); module.exports = root; }), 1760: (function (module) { /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** * Adds `value` to the array cache. * * @private * @name add * @memberOf SetCache * @alias push * @param {*} value The value to cache. * @returns {Object} Returns the cache instance. */ function setCacheAdd(value) { this.__data__.set(value, HASH_UNDEFINED); return this; } module.exports = setCacheAdd; }), 5484: (function (module) { /** * Checks if `value` is in the array cache. * * @private * @name has * @memberOf SetCache * @param {*} value The value to search for. * @returns {boolean} Returns `true` if `value` is found, else `false`. */ function setCacheHas(value) { return this.__data__.has(value); } module.exports = setCacheHas; }), 2779: (function (module) { /** * Converts `set` to an array of its values. * * @private * @param {Object} set The set to convert. * @returns {Array} Returns the values. */ function setToArray(set) { var index = -1, result = Array(set.size); set.forEach(function(value) { result[++index] = value; }); return result; } module.exports = setToArray; }), 2413: (function (module, __unused_webpack_exports, __webpack_require__) { var baseSetToString = __webpack_require__(2422), shortOut = __webpack_require__(7890); /** * Sets the `toString` method of `func` to return `string`. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ var setToString = shortOut(baseSetToString); module.exports = setToString; }), 7890: (function (module) { /** Used to detect hot functions by number of calls within a span of milliseconds. */ var HOT_COUNT = 800, HOT_SPAN = 16; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeNow = Date.now; /** * Creates a function that'll short out and invoke `identity` instead * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` * milliseconds. * * @private * @param {Function} func The function to restrict. * @returns {Function} Returns the new shortable function. */ function shortOut(func) { var count = 0, lastCalled = 0; return function() { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { return arguments[0]; } } else { count = 0; } return func.apply(undefined, arguments); }; } module.exports = shortOut; }), 6063: (function (module, __unused_webpack_exports, __webpack_require__) { var ListCache = __webpack_require__(283); /** * Removes all key-value entries from the stack. * * @private * @name clear * @memberOf Stack */ function stackClear() { this.__data__ = new ListCache; this.size = 0; } module.exports = stackClear; }), 7727: (function (module) { /** * Removes `key` and its value from the stack. * * @private * @name delete * @memberOf Stack * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function stackDelete(key) { var data = this.__data__, result = data['delete'](key); this.size = data.size; return result; } module.exports = stackDelete; }), 3281: (function (module) { /** * Gets the stack value for `key`. * * @private * @name get * @memberOf Stack * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function stackGet(key) { return this.__data__.get(key); } module.exports = stackGet; }), 6667: (function (module) { /** * Checks if a stack value for `key` exists. * * @private * @name has * @memberOf Stack * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function stackHas(key) { return this.__data__.has(key); } module.exports = stackHas; }), 1270: (function (module, __unused_webpack_exports, __webpack_require__) { var ListCache = __webpack_require__(283), Map = __webpack_require__(9036), MapCache = __webpack_require__(4544); /** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200; /** * Sets the stack `key` to `value`. * * @private * @name set * @memberOf Stack * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the stack cache instance. */ function stackSet(key, value) { var data = this.__data__; if (data instanceof ListCache) { var pairs = data.__data__; if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { pairs.push([key, value]); this.size = ++data.size; return this; } data = this.__data__ = new MapCache(pairs); } data.set(key, value); this.size = data.size; return this; } module.exports = stackSet; }), 6749: (function (module, __unused_webpack_exports, __webpack_require__) { var asciiSize = __webpack_require__(609), hasUnicode = __webpack_require__(9520), unicodeSize = __webpack_require__(9668); /** * Gets the number of symbols in `string`. * * @private * @param {string} string The string to inspect. * @returns {number} Returns the string size. */ function stringSize(string) { return hasUnicode(string) ? unicodeSize(string) : asciiSize(string); } module.exports = stringSize; }), 8997: (function (module, __unused_webpack_exports, __webpack_require__) { var memoizeCapped = __webpack_require__(6141); /** Used to match property names within property paths. */ var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; /** Used to match backslashes in property paths. */ var reEscapeChar = /\\(\\)?/g; /** * Converts `string` to a property path array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the property path array. */ var stringToPath = memoizeCapped(function(string) { var result = []; if (string.charCodeAt(0) === 46 /* . */) { result.push(''); } string.replace(rePropName, function(match, number, quote, subString) { result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); }); return result; }); module.exports = stringToPath; }), 8481: (function (module, __unused_webpack_exports, __webpack_require__) { var isSymbol = __webpack_require__(1359); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** * Converts `value` to a string key if it's not a string or symbol. * * @private * @param {*} value The value to inspect. * @returns {string|symbol} Returns the key. */ function toKey(value) { if (typeof value == 'string' || isSymbol(value)) { return value; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } module.exports = toKey; }), 1473: (function (module) { /** Used for built-in method references. */ var funcProto = Function.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** * Converts `func` to its source code. * * @private * @param {Function} func The function to convert. * @returns {string} Returns the source code. */ function toSource(func) { if (func != null) { try { return funcToString.call(func); } catch (e) {} try { return (func + ''); } catch (e) {} } return ''; } module.exports = toSource; }), 3230: (function (module) { /** Used to match a single whitespace character. */ var reWhitespace = /\s/; /** * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace * character of `string`. * * @private * @param {string} string The string to inspect. * @returns {number} Returns the index of the last non-whitespace character. */ function trimmedEndIndex(string) { var index = string.length; while (index-- && reWhitespace.test(string.charAt(index))) {} return index; } module.exports = trimmedEndIndex; }), 9668: (function (module) { /** Used to compose unicode character classes. */ var rsAstralRange = '\\ud800-\\udfff', rsComboMarksRange = '\\u0300-\\u036f', reComboHalfMarksRange = '\\ufe20-\\ufe2f', rsComboSymbolsRange = '\\u20d0-\\u20ff', rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsVarRange = '\\ufe0e\\ufe0f'; /** Used to compose unicode capture groups. */ var rsAstral = '[' + rsAstralRange + ']', rsCombo = '[' + rsComboRange + ']', rsFitz = '\\ud83c[\\udffb-\\udfff]', rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', rsNonAstral = '[^' + rsAstralRange + ']', rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', rsZWJ = '\\u200d'; /** Used to compose unicode regexes. */ var reOptMod = rsModifier + '?', rsOptVar = '[' + rsVarRange + ']?', rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', rsSeq = rsOptVar + reOptMod + rsOptJoin, rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); /** * Gets the size of a Unicode `string`. * * @private * @param {string} string The string inspect. * @returns {number} Returns the string size. */ function unicodeSize(string) { var result = reUnicode.lastIndex = 0; while (reUnicode.test(string)) { ++result; } return result; } module.exports = unicodeSize; }), 219: (function (module, __unused_webpack_exports, __webpack_require__) { var LazyWrapper = __webpack_require__(4281), LodashWrapper = __webpack_require__(9675), copyArray = __webpack_require__(8606); /** * Creates a clone of `wrapper`. * * @private * @param {Object} wrapper The wrapper to clone. * @returns {Object} Returns the cloned wrapper. */ function wrapperClone(wrapper) { if (wrapper instanceof LazyWrapper) { return wrapper.clone(); } var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); result.__actions__ = copyArray(wrapper.__actions__); result.__index__ = wrapper.__index__; result.__values__ = wrapper.__values__; return result; } module.exports = wrapperClone; }), 3789: (function (module, __unused_webpack_exports, __webpack_require__) { var baseClamp = __webpack_require__(2009), toNumber = __webpack_require__(6127); /** * Clamps `number` within the inclusive `lower` and `upper` bounds. * * @static * @memberOf _ * @since 4.0.0 * @category Number * @param {number} number The number to clamp. * @param {number} [lower] The lower bound. * @param {number} upper The upper bound. * @returns {number} Returns the clamped number. * @example * * _.clamp(-10, -5, 5); * // => -5 * * _.clamp(10, -5, 5); * // => 5 */ function clamp(number, lower, upper) { if (upper === undefined) { upper = lower; lower = undefined; } if (upper !== undefined) { upper = toNumber(upper); upper = upper === upper ? upper : 0; } if (lower !== undefined) { lower = toNumber(lower); lower = lower === lower ? lower : 0; } return baseClamp(toNumber(number), lower, upper); } module.exports = clamp; }), 5055: (function (module) { /** * Creates a function that returns `value`. * * @static * @memberOf _ * @since 2.4.0 * @category Util * @param {*} value The value to return from the new function. * @returns {Function} Returns the new constant function. * @example * * var objects = _.times(2, _.constant({ 'a': 1 })); * * console.log(objects); * // => [{ 'a': 1 }, { 'a': 1 }] * * console.log(objects[0] === objects[1]); * // => true */ function constant(value) { return function() { return value; }; } module.exports = constant; }), 8305: (function (module, __unused_webpack_exports, __webpack_require__) { var isObject = __webpack_require__(8532), now = __webpack_require__(806), toNumber = __webpack_require__(6127); /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max, nativeMin = Math.min; /** * Creates a debounced function that delays invoking `func` until after `wait` * milliseconds have elapsed since the last time the debounced function was * invoked. The debounced function comes with a `cancel` method to cancel * delayed `func` invocations and a `flush` method to immediately invoke them. * Provide `options` to indicate whether `func` should be invoked on the * leading and/or trailing edge of the `wait` timeout. The `func` is invoked * with the last arguments provided to the debounced function. Subsequent * calls to the debounced function return the result of the last `func` * invocation. * * **Note:** If `leading` and `trailing` options are `true`, `func` is * invoked on the trailing edge of the timeout only if the debounced function * is invoked more than once during the `wait` timeout. * * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred * until to the next tick, similar to `setTimeout` with a timeout of `0`. * * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) * for details over the differences between `_.debounce` and `_.throttle`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to debounce. * @param {number} [wait=0] The number of milliseconds to delay. * @param {Object} [options={}] The options object. * @param {boolean} [options.leading=false] * Specify invoking on the leading edge of the timeout. * @param {number} [options.maxWait] * The maximum time `func` is allowed to be delayed before it's invoked. * @param {boolean} [options.trailing=true] * Specify invoking on the trailing edge of the timeout. * @returns {Function} Returns the new debounced function. * @example * * // Avoid costly calculations while the window size is in flux. * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); * * // Invoke `sendMail` when clicked, debouncing subsequent calls. * jQuery(element).on('click', _.debounce(sendMail, 300, { * 'leading': true, * 'trailing': false * })); * * // Ensure `batchLog` is invoked once after 1 second of debounced calls. * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); * var source = new EventSource('/stream'); * jQuery(source).on('message', debounced); * * // Cancel the trailing debounced invocation. * jQuery(window).on('popstate', debounced.cancel); */ function debounce(func, wait, options) { var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } wait = toNumber(wait) || 0; if (isObject(options)) { leading = !!options.leading; maxing = 'maxWait' in options; maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; trailing = 'trailing' in options ? !!options.trailing : trailing; } function invokeFunc(time) { var args = lastArgs, thisArg = lastThis; lastArgs = lastThis = undefined; lastInvokeTime = time; result = func.apply(thisArg, args); return result; } function leadingEdge(time) { // Reset any `maxWait` timer. lastInvokeTime = time; // Start the timer for the trailing edge. timerId = setTimeout(timerExpired, wait); // Invoke the leading edge. return leading ? invokeFunc(time) : result; } function remainingWait(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall; return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; } function shouldInvoke(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the // trailing edge, the system time has gone backwards and we're treating // it as the trailing edge, or we've hit the `maxWait` limit. return (lastCallTime === undefined || (timeSinceLastCall >= wait) || (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); } function timerExpired() { var time = now(); if (shouldInvoke(time)) { return trailingEdge(time); } // Restart the timer. timerId = setTimeout(timerExpired, remainingWait(time)); } function trailingEdge(time) { timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been // debounced at least once. if (trailing && lastArgs) { return invokeFunc(time); } lastArgs = lastThis = undefined; return result; } function cancel() { if (timerId !== undefined) { clearTimeout(timerId); } lastInvokeTime = 0; lastArgs = lastCallTime = lastThis = timerId = undefined; } function flush() { return timerId === undefined ? result : trailingEdge(now()); } function debounced() { var time = now(), isInvoking = shouldInvoke(time); lastArgs = arguments; lastThis = this; lastCallTime = time; if (isInvoking) { if (timerId === undefined) { return leadingEdge(lastCallTime); } if (maxing) { // Handle invocations in a tight loop. clearTimeout(timerId); timerId = setTimeout(timerExpired, wait); return invokeFunc(lastCallTime); } } if (timerId === undefined) { timerId = setTimeout(timerExpired, wait); } return result; } debounced.cancel = cancel; debounced.flush = flush; return debounced; } module.exports = debounce; }), 4075: (function (module) { /** * Checks `value` to determine whether a default value should be returned in * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, * or `undefined`. * * @static * @memberOf _ * @since 4.14.0 * @category Util * @param {*} value The value to check. * @param {*} defaultValue The default value. * @returns {*} Returns the resolved value. * @example * * _.defaultTo(1, 10); * // => 1 * * _.defaultTo(undefined, 10); * // => 10 */ function defaultTo(value, defaultValue) { return (value == null || value !== value) ? defaultValue : value; } module.exports = defaultTo; }), 4071: (function (module) { /** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.eq(object, object); * // => true * * _.eq(object, other); * // => false * * _.eq('a', 'a'); * // => true * * _.eq('a', Object('a')); * // => false * * _.eq(NaN, NaN); * // => true */ function eq(value, other) { return value === other || (value !== value && other !== other); } module.exports = eq; }), 9777: (function (module, __unused_webpack_exports, __webpack_require__) { var createFind = __webpack_require__(727), findIndex = __webpack_require__(3142); /** * Iterates over elements of `collection`, returning the first element * `predicate` returns truthy for. The predicate is invoked with three * arguments: (value, index|key, collection). * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to inspect. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @param {number} [fromIndex=0] The index to search from. * @returns {*} Returns the matched element, else `undefined`. * @example * * var users = [ * { 'user': 'barney', 'age': 36, 'active': true }, * { 'user': 'fred', 'age': 40, 'active': false }, * { 'user': 'pebbles', 'age': 1, 'active': true } * ]; * * _.find(users, function(o) { return o.age < 40; }); * // => object for 'barney' * * // The `_.matches` iteratee shorthand. * _.find(users, { 'age': 1, 'active': true }); * // => object for 'pebbles' * * // The `_.matchesProperty` iteratee shorthand. * _.find(users, ['active', false]); * // => object for 'fred' * * // The `_.property` iteratee shorthand. * _.find(users, 'active'); * // => object for 'barney' */ var find = createFind(findIndex); module.exports = find; }), 3142: (function (module, __unused_webpack_exports, __webpack_require__) { var baseFindIndex = __webpack_require__(2056), baseIteratee = __webpack_require__(5462), toInteger = __webpack_require__(8536); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max; /** * This method is like `_.find` except that it returns the index of the first * element `predicate` returns truthy for instead of the element itself. * * @static * @memberOf _ * @since 1.1.0 * @category Array * @param {Array} array The array to inspect. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @param {number} [fromIndex=0] The index to search from. * @returns {number} Returns the index of the found element, else `-1`. * @example * * var users = [ * { 'user': 'barney', 'active': false }, * { 'user': 'fred', 'active': false }, * { 'user': 'pebbles', 'active': true } * ]; * * _.findIndex(users, function(o) { return o.user == 'barney'; }); * // => 0 * * // The `_.matches` iteratee shorthand. * _.findIndex(users, { 'user': 'fred', 'active': false }); * // => 1 * * // The `_.matchesProperty` iteratee shorthand. * _.findIndex(users, ['active', false]); * // => 0 * * // The `_.property` iteratee shorthand. * _.findIndex(users, 'active'); * // => 2 */ function findIndex(array, predicate, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index = fromIndex == null ? 0 : toInteger(fromIndex); if (index < 0) { index = nativeMax(length + index, 0); } return baseFindIndex(array, baseIteratee(predicate, 3), index); } module.exports = findIndex; }), 5720: (function (module, __unused_webpack_exports, __webpack_require__) { var createFind = __webpack_require__(727), findLastIndex = __webpack_require__(3758); /** * This method is like `_.find` except that it iterates over elements of * `collection` from right to left. * * @static * @memberOf _ * @since 2.0.0 * @category Collection * @param {Array|Object} collection The collection to inspect. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @param {number} [fromIndex=collection.length-1] The index to search from. * @returns {*} Returns the matched element, else `undefined`. * @example * * _.findLast([1, 2, 3, 4], function(n) { * return n % 2 == 1; * }); * // => 3 */ var findLast = createFind(findLastIndex); module.exports = findLast; }), 3758: (function (module, __unused_webpack_exports, __webpack_require__) { var baseFindIndex = __webpack_require__(2056), baseIteratee = __webpack_require__(5462), toInteger = __webpack_require__(8536); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max, nativeMin = Math.min; /** * This method is like `_.findIndex` except that it iterates over elements * of `collection` from right to left. * * @static * @memberOf _ * @since 2.0.0 * @category Array * @param {Array} array The array to inspect. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @param {number} [fromIndex=array.length-1] The index to search from. * @returns {number} Returns the index of the found element, else `-1`. * @example * * var users = [ * { 'user': 'barney', 'active': true }, * { 'user': 'fred', 'active': false }, * { 'user': 'pebbles', 'active': false } * ]; * * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); * // => 2 * * // The `_.matches` iteratee shorthand. * _.findLastIndex(users, { 'user': 'barney', 'active': true }); * // => 0 * * // The `_.matchesProperty` iteratee shorthand. * _.findLastIndex(users, ['active', false]); * // => 2 * * // The `_.property` iteratee shorthand. * _.findLastIndex(users, 'active'); * // => 0 */ function findLastIndex(array, predicate, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index = length - 1; if (fromIndex !== undefined) { index = toInteger(fromIndex); index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); } return baseFindIndex(array, baseIteratee(predicate, 3), index, true); } module.exports = findLastIndex; }), 6380: (function (module, __unused_webpack_exports, __webpack_require__) { var baseFlatten = __webpack_require__(5265); /** * Flattens `array` a single level deep. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to flatten. * @returns {Array} Returns the new flattened array. * @example * * _.flatten([1, [2, [3, [4]], 5]]); * // => [1, 2, [3, [4]], 5] */ function flatten(array) { var length = array == null ? 0 : array.length; return length ? baseFlatten(array, 1) : []; } module.exports = flatten; }), 5801: (function (module, __unused_webpack_exports, __webpack_require__) { var createFlow = __webpack_require__(914); /** * Creates a function that returns the result of invoking the given functions * with the `this` binding of the created function, where each successive * invocation is supplied the return value of the previous. * * @static * @memberOf _ * @since 3.0.0 * @category Util * @param {...(Function|Function[])} [funcs] The functions to invoke. * @returns {Function} Returns the new composite function. * @see _.flowRight * @example * * function square(n) { * return n * n; * } * * var addSquare = _.flow([_.add, square]); * addSquare(1, 2); * // => 9 */ var flow = createFlow(); module.exports = flow; }), 2397: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayEach = __webpack_require__(4970), baseEach = __webpack_require__(8264), castFunction = __webpack_require__(8269), isArray = __webpack_require__(6377); /** * Iterates over elements of `collection` and invokes `iteratee` for each element. * The iteratee is invoked with three arguments: (value, index|key, collection). * Iteratee functions may exit iteration early by explicitly returning `false`. * * **Note:** As with other "Collections" methods, objects with a "length" * property are iterated like arrays. To avoid this behavior use `_.forIn` * or `_.forOwn` for object iteration. * * @static * @memberOf _ * @since 0.1.0 * @alias each * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Array|Object} Returns `collection`. * @see _.forEachRight * @example * * _.forEach([1, 2], function(value) { * console.log(value); * }); * // => Logs `1` then `2`. * * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { * console.log(key); * }); * // => Logs 'a' then 'b' (iteration order is not guaranteed). */ function forEach(collection, iteratee) { var func = isArray(collection) ? arrayEach : baseEach; return func(collection, castFunction(iteratee)); } module.exports = forEach; }), 4738: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGet = __webpack_require__(1957); /** * Gets the value at `path` of `object`. If the resolved value is * `undefined`, the `defaultValue` is returned in its place. * * @static * @memberOf _ * @since 3.7.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @param {*} [defaultValue] The value returned for `undefined` resolved values. * @returns {*} Returns the resolved value. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }] }; * * _.get(object, 'a[0].b.c'); * // => 3 * * _.get(object, ['a', '0', 'b', 'c']); * // => 3 * * _.get(object, 'a.b.c', 'default'); * // => 'default' */ function get(object, path, defaultValue) { var result = object == null ? undefined : baseGet(object, path); return result === undefined ? defaultValue : result; } module.exports = get; }), 9290: (function (module, __unused_webpack_exports, __webpack_require__) { var baseHasIn = __webpack_require__(6993), hasPath = __webpack_require__(7635); /** * Checks if `path` is a direct or inherited property of `object`. * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @returns {boolean} Returns `true` if `path` exists, else `false`. * @example * * var object = _.create({ 'a': _.create({ 'b': 2 }) }); * * _.hasIn(object, 'a'); * // => true * * _.hasIn(object, 'a.b'); * // => true * * _.hasIn(object, ['a', 'b']); * // => true * * _.hasIn(object, 'b'); * // => false */ function hasIn(object, path) { return object != null && hasPath(object, path, baseHasIn); } module.exports = hasIn; }), 1622: (function (module) { /** * This method returns the first argument it receives. * * @static * @since 0.1.0 * @memberOf _ * @category Util * @param {*} value Any value. * @returns {*} Returns `value`. * @example * * var object = { 'a': 1 }; * * console.log(_.identity(object) === object); * // => true */ function identity(value) { return value; } module.exports = identity; }), 9732: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIsArguments = __webpack_require__(841), isObjectLike = __webpack_require__(7013); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Built-in value references. */ var propertyIsEnumerable = objectProto.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; module.exports = isArguments; }), 6377: (function (module) { /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray = Array.isArray; module.exports = isArray; }), 508: (function (module, __unused_webpack_exports, __webpack_require__) { var isFunction = __webpack_require__(6644), isLength = __webpack_require__(7924); /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */ function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } module.exports = isArrayLike; }), 6018: (function (module, exports, __webpack_require__) { /* module decorator */ module = __webpack_require__.nmd(module); var root = __webpack_require__(5238), stubFalse = __webpack_require__(5786); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; /** * Checks if `value` is a buffer. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * * _.isBuffer(new Buffer(2)); * // => true * * _.isBuffer(new Uint8Array(2)); * // => false */ var isBuffer = nativeIsBuffer || stubFalse; module.exports = isBuffer; }), 6633: (function (module, __unused_webpack_exports, __webpack_require__) { var baseKeys = __webpack_require__(7407), getTag = __webpack_require__(9937), isArguments = __webpack_require__(9732), isArray = __webpack_require__(6377), isArrayLike = __webpack_require__(508), isBuffer = __webpack_require__(6018), isPrototype = __webpack_require__(8857), isTypedArray = __webpack_require__(8586); /** `Object#toString` result references. */ var mapTag = '[object Map]', setTag = '[object Set]'; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Checks if `value` is an empty object, collection, map, or set. * * Objects are considered empty if they have no own enumerable string keyed * properties. * * Array-like values such as `arguments` objects, arrays, buffers, strings, or * jQuery-like collections are considered empty if they have a `length` of `0`. * Similarly, maps and sets are considered empty if they have a `size` of `0`. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is empty, else `false`. * @example * * _.isEmpty(null); * // => true * * _.isEmpty(true); * // => true * * _.isEmpty(1); * // => true * * _.isEmpty([1, 2, 3]); * // => false * * _.isEmpty({ 'a': 1 }); * // => false */ function isEmpty(value) { if (value == null) { return true; } if (isArrayLike(value) && (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || isBuffer(value) || isTypedArray(value) || isArguments(value))) { return !value.length; } var tag = getTag(value); if (tag == mapTag || tag == setTag) { return !value.size; } if (isPrototype(value)) { return !baseKeys(value).length; } for (var key in value) { if (hasOwnProperty.call(value, key)) { return false; } } return true; } module.exports = isEmpty; }), 6644: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGetTag = __webpack_require__(3757), isObject = __webpack_require__(8532); /** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]', proxyTag = '[object Proxy]'; /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction(value) { if (!isObject(value)) { return false; } // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag = baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } module.exports = isFunction; }), 7924: (function (module) { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */ function isLength(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } module.exports = isLength; }), 8532: (function (module) { /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject(value) { var type = typeof value; return value != null && (type == 'object' || type == 'function'); } module.exports = isObject; }), 7013: (function (module) { /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && typeof value == 'object'; } module.exports = isObjectLike; }), 1085: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGetTag = __webpack_require__(3757), isArray = __webpack_require__(6377), isObjectLike = __webpack_require__(7013); /** `Object#toString` result references. */ var stringTag = '[object String]'; /** * Checks if `value` is classified as a `String` primitive or object. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a string, else `false`. * @example * * _.isString('abc'); * // => true * * _.isString(1); * // => false */ function isString(value) { return typeof value == 'string' || (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); } module.exports = isString; }), 1359: (function (module, __unused_webpack_exports, __webpack_require__) { var baseGetTag = __webpack_require__(3757), isObjectLike = __webpack_require__(7013); /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol(value) { return typeof value == 'symbol' || (isObjectLike(value) && baseGetTag(value) == symbolTag); } module.exports = isSymbol; }), 8586: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIsTypedArray = __webpack_require__(2195), baseUnary = __webpack_require__(7509), nodeUtil = __webpack_require__(895); /* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; /** * Checks if `value` is classified as a typed array. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * * _.isTypedArray(new Uint8Array); * // => true * * _.isTypedArray([]); * // => false */ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; module.exports = isTypedArray; }), 7361: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayLikeKeys = __webpack_require__(4979), baseKeys = __webpack_require__(7407), isArrayLike = __webpack_require__(508); /** * Creates an array of the own enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. See the * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * for more details. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keys(new Foo); * // => ['a', 'b'] (iteration order is not guaranteed) * * _.keys('hi'); * // => ['0', '1'] */ function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } module.exports = keys; }), 3747: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayLikeKeys = __webpack_require__(4979), baseKeysIn = __webpack_require__(9237), isArrayLike = __webpack_require__(508); /** * Creates an array of the own and inherited enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @memberOf _ * @since 3.0.0 * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keysIn(new Foo); * // => ['a', 'b', 'c'] (iteration order is not guaranteed) */ function keysIn(object) { return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); } module.exports = keysIn; }), 3729: (function (module, __unused_webpack_exports, __webpack_require__) { var baseAssignValue = __webpack_require__(2676), baseForOwn = __webpack_require__(3406), baseIteratee = __webpack_require__(5462); /** * Creates an object with the same keys as `object` and values generated * by running each own enumerable string keyed property of `object` thru * `iteratee`. The iteratee is invoked with three arguments: * (value, key, object). * * @static * @memberOf _ * @since 2.4.0 * @category Object * @param {Object} object The object to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Object} Returns the new mapped object. * @see _.mapKeys * @example * * var users = { * 'fred': { 'user': 'fred', 'age': 40 }, * 'pebbles': { 'user': 'pebbles', 'age': 1 } * }; * * _.mapValues(users, function(o) { return o.age; }); * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) * * // The `_.property` iteratee shorthand. * _.mapValues(users, 'age'); * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) */ function mapValues(object, iteratee) { var result = {}; iteratee = baseIteratee(iteratee, 3); baseForOwn(object, function(value, key, object) { baseAssignValue(result, key, iteratee(value, key, object)); }); return result; } module.exports = mapValues; }), 4984: (function (module, __unused_webpack_exports, __webpack_require__) { var MapCache = __webpack_require__(4544); /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** * Creates a function that memoizes the result of `func`. If `resolver` is * provided, it determines the cache key for storing the result based on the * arguments provided to the memoized function. By default, the first argument * provided to the memoized function is used as the map cache key. The `func` * is invoked with the `this` binding of the memoized function. * * **Note:** The cache is exposed as the `cache` property on the memoized * function. Its creation may be customized by replacing the `_.memoize.Cache` * constructor with one whose instances implement the * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) * method interface of `clear`, `delete`, `get`, `has`, and `set`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to have its output memoized. * @param {Function} [resolver] The function to resolve the cache key. * @returns {Function} Returns the new memoized function. * @example * * var object = { 'a': 1, 'b': 2 }; * var other = { 'c': 3, 'd': 4 }; * * var values = _.memoize(_.values); * values(object); * // => [1, 2] * * values(other); * // => [3, 4] * * object.a = 2; * values(object); * // => [1, 2] * * // Modify the result cache. * values.cache.set(object, ['a', 'b']); * values(object); * // => ['a', 'b'] * * // Replace `_.memoize.Cache`. * _.memoize.Cache = WeakMap; */ function memoize(func, resolver) { if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { throw new TypeError(FUNC_ERROR_TEXT); } var memoized = function() { var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key)) { return cache.get(key); } var result = func.apply(this, args); memoized.cache = cache.set(key, result) || cache; return result; }; memoized.cache = new (memoize.Cache || MapCache); return memoized; } // Expose `MapCache`. memoize.Cache = MapCache; module.exports = memoize; }), 3103: (function (module) { /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** * Creates a function that negates the result of the predicate `func`. The * `func` predicate is invoked with the `this` binding and arguments of the * created function. * * @static * @memberOf _ * @since 3.0.0 * @category Function * @param {Function} predicate The predicate to negate. * @returns {Function} Returns the new negated function. * @example * * function isEven(n) { * return n % 2 == 0; * } * * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); * // => [1, 3, 5] */ function negate(predicate) { if (typeof predicate != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } return function() { var args = arguments; switch (args.length) { case 0: return !predicate.call(this); case 1: return !predicate.call(this, args[0]); case 2: return !predicate.call(this, args[0], args[1]); case 3: return !predicate.call(this, args[0], args[1], args[2]); } return !predicate.apply(this, args); }; } module.exports = negate; }), 6032: (function (module) { /** * This method returns `undefined`. * * @static * @memberOf _ * @since 2.3.0 * @category Util * @example * * _.times(2, _.noop); * // => [undefined, undefined] */ function noop() { // No operation performed. } module.exports = noop; }), 806: (function (module, __unused_webpack_exports, __webpack_require__) { var root = __webpack_require__(5238); /** * Gets the timestamp of the number of milliseconds that have elapsed since * the Unix epoch (1 January 1970 00:00:00 UTC). * * @static * @memberOf _ * @since 2.4.0 * @category Date * @returns {number} Returns the timestamp. * @example * * _.defer(function(stamp) { * console.log(_.now() - stamp); * }, _.now()); * // => Logs the number of milliseconds it took for the deferred invocation. */ var now = function() { return root.Date.now(); }; module.exports = now; }), 3452: (function (module, __unused_webpack_exports, __webpack_require__) { var baseIteratee = __webpack_require__(5462), negate = __webpack_require__(3103), pickBy = __webpack_require__(4103); /** * The opposite of `_.pickBy`; this method creates an object composed of * the own and inherited enumerable string keyed properties of `object` that * `predicate` doesn't return truthy for. The predicate is invoked with two * arguments: (value, key). * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The source object. * @param {Function} [predicate=_.identity] The function invoked per property. * @returns {Object} Returns the new object. * @example * * var object = { 'a': 1, 'b': '2', 'c': 3 }; * * _.omitBy(object, _.isNumber); * // => { 'b': '2' } */ function omitBy(object, predicate) { return pickBy(object, negate(baseIteratee(predicate))); } module.exports = omitBy; }), 4103: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayMap = __webpack_require__(1098), baseIteratee = __webpack_require__(5462), basePickBy = __webpack_require__(7100), getAllKeysIn = __webpack_require__(9254); /** * Creates an object composed of the `object` properties `predicate` returns * truthy for. The predicate is invoked with two arguments: (value, key). * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The source object. * @param {Function} [predicate=_.identity] The function invoked per property. * @returns {Object} Returns the new object. * @example * * var object = { 'a': 1, 'b': '2', 'c': 3 }; * * _.pickBy(object, _.isNumber); * // => { 'a': 1, 'c': 3 } */ function pickBy(object, predicate) { if (object == null) { return {}; } var props = arrayMap(getAllKeysIn(object), function(prop) { return [prop]; }); predicate = baseIteratee(predicate); return basePickBy(object, props, function(value, path) { return predicate(value, path[0]); }); } module.exports = pickBy; }), 8303: (function (module, __unused_webpack_exports, __webpack_require__) { var baseProperty = __webpack_require__(2726), basePropertyDeep = __webpack_require__(1374), isKey = __webpack_require__(7074), toKey = __webpack_require__(8481); /** * Creates a function that returns the value at `path` of a given object. * * @static * @memberOf _ * @since 2.4.0 * @category Util * @param {Array|string} path The path of the property to get. * @returns {Function} Returns the new accessor function. * @example * * var objects = [ * { 'a': { 'b': 2 } }, * { 'a': { 'b': 1 } } * ]; * * _.map(objects, _.property('a.b')); * // => [2, 1] * * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); * // => [1, 2] */ function property(path) { return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); } module.exports = property; }), 1455: (function (module, __unused_webpack_exports, __webpack_require__) { var arrayReduce = __webpack_require__(2607), baseEach = __webpack_require__(8264), baseIteratee = __webpack_require__(5462), baseReduce = __webpack_require__(9864), isArray = __webpack_require__(6377); /** * Reduces `collection` to a value which is the accumulated result of running * each element in `collection` thru `iteratee`, where each successive * invocation is supplied the return value of the previous. If `accumulator` * is not given, the first element of `collection` is used as the initial * value. The iteratee is invoked with four arguments: * (accumulator, value, index|key, collection). * * Many lodash methods are guarded to work as iteratees for methods like * `_.reduce`, `_.reduceRight`, and `_.transform`. * * The guarded methods are: * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, * and `sortBy` * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @param {*} [accumulator] The initial value. * @returns {*} Returns the accumulated value. * @see _.reduceRight * @example * * _.reduce([1, 2], function(sum, n) { * return sum + n; * }, 0); * // => 3 * * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { * (result[value] || (result[value] = [])).push(key); * return result; * }, {}); * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) */ function reduce(collection, iteratee, accumulator) { var func = isArray(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3; return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach); } module.exports = reduce; }), 4659: (function (module, __unused_webpack_exports, __webpack_require__) { var baseKeys = __webpack_require__(7407), getTag = __webpack_require__(9937), isArrayLike = __webpack_require__(508), isString = __webpack_require__(1085), stringSize = __webpack_require__(6749); /** `Object#toString` result references. */ var mapTag = '[object Map]', setTag = '[object Set]'; /** * Gets the size of `collection` by returning its length for array-like * values or the number of own enumerable string keyed properties for objects. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object|string} collection The collection to inspect. * @returns {number} Returns the collection size. * @example * * _.size([1, 2, 3]); * // => 3 * * _.size({ 'a': 1, 'b': 2 }); * // => 2 * * _.size('pebbles'); * // => 7 */ function size(collection) { if (collection == null) { return 0; } if (isArrayLike(collection)) { return isString(collection) ? stringSize(collection) : collection.length; } var tag = getTag(collection); if (tag == mapTag || tag == setTag) { return collection.size; } return baseKeys(collection).length; } module.exports = size; }), 1036: (function (module) { /** * This method returns a new empty array. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {Array} Returns the new empty array. * @example * * var arrays = _.times(2, _.stubArray); * * console.log(arrays); * // => [[], []] * * console.log(arrays[0] === arrays[1]); * // => false */ function stubArray() { return []; } module.exports = stubArray; }), 5786: (function (module) { /** * This method returns `false`. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {boolean} Returns `false`. * @example * * _.times(2, _.stubFalse); * // => [false, false] */ function stubFalse() { return false; } module.exports = stubFalse; }), 5082: (function (module, __unused_webpack_exports, __webpack_require__) { var debounce = __webpack_require__(8305), isObject = __webpack_require__(8532); /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** * Creates a throttled function that only invokes `func` at most once per * every `wait` milliseconds. The throttled function comes with a `cancel` * method to cancel delayed `func` invocations and a `flush` method to * immediately invoke them. Provide `options` to indicate whether `func` * should be invoked on the leading and/or trailing edge of the `wait` * timeout. The `func` is invoked with the last arguments provided to the * throttled function. Subsequent calls to the throttled function return the * result of the last `func` invocation. * * **Note:** If `leading` and `trailing` options are `true`, `func` is * invoked on the trailing edge of the timeout only if the throttled function * is invoked more than once during the `wait` timeout. * * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred * until to the next tick, similar to `setTimeout` with a timeout of `0`. * * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) * for details over the differences between `_.throttle` and `_.debounce`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to throttle. * @param {number} [wait=0] The number of milliseconds to throttle invocations to. * @param {Object} [options={}] The options object. * @param {boolean} [options.leading=true] * Specify invoking on the leading edge of the timeout. * @param {boolean} [options.trailing=true] * Specify invoking on the trailing edge of the timeout. * @returns {Function} Returns the new throttled function. * @example * * // Avoid excessively updating the position while scrolling. * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); * * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); * jQuery(element).on('click', throttled); * * // Cancel the trailing throttled invocation. * jQuery(window).on('popstate', throttled.cancel); */ function throttle(func, wait, options) { var leading = true, trailing = true; if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } if (isObject(options)) { leading = 'leading' in options ? !!options.leading : leading; trailing = 'trailing' in options ? !!options.trailing : trailing; } return debounce(func, wait, { 'leading': leading, 'maxWait': wait, 'trailing': trailing }); } module.exports = throttle; }), 5597: (function (module, __unused_webpack_exports, __webpack_require__) { var toNumber = __webpack_require__(6127); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0, MAX_INTEGER = 1.7976931348623157e+308; /** * Converts `value` to a finite number. * * @static * @memberOf _ * @since 4.12.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted number. * @example * * _.toFinite(3.2); * // => 3.2 * * _.toFinite(Number.MIN_VALUE); * // => 5e-324 * * _.toFinite(Infinity); * // => 1.7976931348623157e+308 * * _.toFinite('3.2'); * // => 3.2 */ function toFinite(value) { if (!value) { return value === 0 ? value : 0; } value = toNumber(value); if (value === INFINITY || value === -INFINITY) { var sign = (value < 0 ? -1 : 1); return sign * MAX_INTEGER; } return value === value ? value : 0; } module.exports = toFinite; }), 8536: (function (module, __unused_webpack_exports, __webpack_require__) { var toFinite = __webpack_require__(5597); /** * Converts `value` to an integer. * * **Note:** This method is loosely based on * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted integer. * @example * * _.toInteger(3.2); * // => 3 * * _.toInteger(Number.MIN_VALUE); * // => 0 * * _.toInteger(Infinity); * // => 1.7976931348623157e+308 * * _.toInteger('3.2'); * // => 3 */ function toInteger(value) { var result = toFinite(value), remainder = result % 1; return result === result ? (remainder ? result - remainder : result) : 0; } module.exports = toInteger; }), 6127: (function (module, __unused_webpack_exports, __webpack_require__) { var baseTrim = __webpack_require__(1072), isObject = __webpack_require__(8532), isSymbol = __webpack_require__(1359); /** Used as references for various `Number` constants. */ var NAN = 0 / 0; /** Used to detect bad signed hexadecimal string values. */ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; /** Used to detect binary string values. */ var reIsBinary = /^0b[01]+$/i; /** Used to detect octal string values. */ var reIsOctal = /^0o[0-7]+$/i; /** Built-in method references without a dependency on `root`. */ var freeParseInt = parseInt; /** * Converts `value` to a number. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to process. * @returns {number} Returns the number. * @example * * _.toNumber(3.2); * // => 3.2 * * _.toNumber(Number.MIN_VALUE); * // => 5e-324 * * _.toNumber(Infinity); * // => Infinity * * _.toNumber('3.2'); * // => 3.2 */ function toNumber(value) { if (typeof value == 'number') { return value; } if (isSymbol(value)) { return NAN; } if (isObject(value)) { var other = typeof value.valueOf == 'function' ? value.valueOf() : value; value = isObject(other) ? (other + '') : other; } if (typeof value != 'string') { return value === 0 ? value : +value; } value = baseTrim(value); var isBinary = reIsBinary.test(value); return (isBinary || reIsOctal.test(value)) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : (reIsBadHex.test(value) ? NAN : +value); } module.exports = toNumber; }), 6214: (function (module, __unused_webpack_exports, __webpack_require__) { var baseToString = __webpack_require__(9653); /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {string} Returns the converted string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(value); } module.exports = toString; }), 6985: (function (module, __unused_webpack_exports, __webpack_require__) { var LazyWrapper = __webpack_require__(4281), LodashWrapper = __webpack_require__(9675), baseLodash = __webpack_require__(4382), isArray = __webpack_require__(6377), isObjectLike = __webpack_require__(7013), wrapperClone = __webpack_require__(219); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Creates a `lodash` object which wraps `value` to enable implicit method * chain sequences. Methods that operate on and return arrays, collections, * and functions can be chained together. Methods that retrieve a single value * or may return a primitive value will automatically end the chain sequence * and return the unwrapped value. Otherwise, the value must be unwrapped * with `_#value`. * * Explicit chain sequences, which must be unwrapped with `_#value`, may be * enabled using `_.chain`. * * The execution of chained methods is lazy, that is, it's deferred until * `_#value` is implicitly or explicitly called. * * Lazy evaluation allows several methods to support shortcut fusion. * Shortcut fusion is an optimization to merge iteratee calls; this avoids * the creation of intermediate arrays and can greatly reduce the number of * iteratee executions. Sections of a chain sequence qualify for shortcut * fusion if the section is applied to an array and iteratees accept only * one argument. The heuristic for whether a section qualifies for shortcut * fusion is subject to change. * * Chaining is supported in custom builds as long as the `_#value` method is * directly or indirectly included in the build. * * In addition to lodash methods, wrappers have `Array` and `String` methods. * * The wrapper `Array` methods are: * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` * * The wrapper `String` methods are: * `replace` and `split` * * The wrapper methods that support shortcut fusion are: * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` * * The chainable wrapper methods are: * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, * `zipObject`, `zipObjectDeep`, and `zipWith` * * The wrapper methods that are **not** chainable by default are: * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, * `upperFirst`, `value`, and `words` * * @name _ * @constructor * @category Seq * @param {*} value The value to wrap in a `lodash` instance. * @returns {Object} Returns the new `lodash` wrapper instance. * @example * * function square(n) { * return n * n; * } * * var wrapped = _([1, 2, 3]); * * // Returns an unwrapped value. * wrapped.reduce(_.add); * // => 6 * * // Returns a wrapped value. * var squares = wrapped.map(square); * * _.isArray(squares); * // => false * * _.isArray(squares.value()); * // => true */ function lodash(value) { if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { if (value instanceof LodashWrapper) { return value; } if (hasOwnProperty.call(value, '__wrapped__')) { return wrapperClone(value); } } return new LodashWrapper(value); } // Ensure wrappers are instances of `baseLodash`. lodash.prototype = baseLodash.prototype; lodash.prototype.constructor = lodash; module.exports = lodash; }), 9516: (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, { compose: () => (/* reexport */ compose), createStore: () => (/* reexport */ createStore_createStore), bindActionCreators: () => (/* reexport */ bindActionCreators), combineReducers: () => (/* reexport */ combineReducers), applyMiddleware: () => (/* reexport */ applyMiddleware) }); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_freeGlobal.js /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; /* ESM default export */ const _freeGlobal = (freeGlobal); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_root.js /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = _freeGlobal || freeSelf || Function('return this')(); /* ESM default export */ const _root = (root); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_Symbol.js /** Built-in value references. */ var Symbol = _root.Symbol; /* ESM default export */ const _Symbol = (Symbol); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_getRawTag.js /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var _getRawTag_hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** Built-in value references. */ var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { var isOwn = _getRawTag_hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } /* ESM default export */ const _getRawTag = (getRawTag); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_objectToString.js /** Used for built-in method references. */ var _objectToString_objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var _objectToString_nativeObjectToString = _objectToString_objectProto.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return _objectToString_nativeObjectToString.call(value); } /* ESM default export */ const _objectToString = (objectToString); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_baseGetTag.js /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var _baseGetTag_symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return (_baseGetTag_symToStringTag && _baseGetTag_symToStringTag in Object(value)) ? _getRawTag(value) : _objectToString(value); } /* ESM default export */ const _baseGetTag = (baseGetTag); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_overArg.js /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } /* ESM default export */ const _overArg = (overArg); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/_getPrototype.js /** Built-in value references. */ var getPrototype = _overArg(Object.getPrototypeOf, Object); /* ESM default export */ const _getPrototype = (getPrototype); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/isObjectLike.js /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && typeof value == 'object'; } /* ESM default export */ const lodash_es_isObjectLike = (isObjectLike); ;// CONCATENATED MODULE: ../../app/node_modules/lodash-es/isPlainObject.js /** `Object#toString` result references. */ var objectTag = '[object Object]'; /** Used for built-in method references. */ var funcProto = Function.prototype, isPlainObject_objectProto = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var isPlainObject_hasOwnProperty = isPlainObject_objectProto.hasOwnProperty; /** Used to infer the `Object` constructor. */ var objectCtorString = funcToString.call(Object); /** * Checks if `value` is a plain object, that is, an object created by the * `Object` constructor or one with a `[[Prototype]]` of `null`. * * @static * @memberOf _ * @since 0.8.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. * @example * * function Foo() { * this.a = 1; * } * * _.isPlainObject(new Foo); * // => false * * _.isPlainObject([1, 2, 3]); * // => false * * _.isPlainObject({ 'x': 0, 'y': 0 }); * // => true * * _.isPlainObject(Object.create(null)); * // => true */ function isPlainObject_isPlainObject(value) { if (!lodash_es_isObjectLike(value) || _baseGetTag(value) != objectTag) { return false; } var proto = _getPrototype(value); if (proto === null) { return true; } var Ctor = isPlainObject_hasOwnProperty.call(proto, 'constructor') && proto.constructor; return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; } /* ESM default export */ const lodash_es_isPlainObject = (isPlainObject_isPlainObject); // EXTERNAL MODULE: ../../app/node_modules/redux/node_modules/symbol-observable/es/index.js + 1 modules var es = __webpack_require__(3485); ;// CONCATENATED MODULE: ../../app/node_modules/redux/es/createStore.js /** * These are private action types reserved by Redux. * For any unknown actions, you must return the current state. * If the current state is undefined, you must return the initial state. * Do not reference these action types directly in your code. */ var createStore_ActionTypes = { INIT: '@@redux/INIT' }; /** * Creates a Redux store that holds the state tree. * The only way to change the data in the store is to call `dispatch()` on it. * * There should only be a single store in your app. To specify how different * parts of the state tree respond to actions, you may combine several reducers * into a single reducer function by using `combineReducers`. * * @param {Function} reducer A function that returns the next state tree, given * the current state tree and the action to handle. * * @param {any} [preloadedState] The initial state. You may optionally specify it * to hydrate the state from the server in universal apps, or to restore a * previously serialized user session. * If you use `combineReducers` to produce the root reducer function, this must be * an object with the same shape as `combineReducers` keys. * * @param {Function} enhancer The store enhancer. You may optionally specify it * to enhance the store with third-party capabilities such as middleware, * time travel, persistence, etc. The only store enhancer that ships with Redux * is `applyMiddleware()`. * * @returns {Store} A Redux store that lets you read the state, dispatch actions * and subscribe to changes. */ function createStore_createStore(reducer, preloadedState, enhancer) { var _ref2; if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') { enhancer = preloadedState; preloadedState = undefined; } if (typeof enhancer !== 'undefined') { if (typeof enhancer !== 'function') { throw new Error('Expected the enhancer to be a function.'); } return enhancer(createStore_createStore)(reducer, preloadedState); } if (typeof reducer !== 'function') { throw new Error('Expected the reducer to be a function.'); } var currentReducer = reducer; var currentState = preloadedState; var currentListeners = []; var nextListeners = currentListeners; var isDispatching = false; function ensureCanMutateNextListeners() { if (nextListeners === currentListeners) { nextListeners = currentListeners.slice(); } } /** * Reads the state tree managed by the store. * * @returns {any} The current state tree of your application. */ function getState() { return currentState; } /** * Adds a change listener. It will be called any time an action is dispatched, * and some part of the state tree may potentially have changed. You may then * call `getState()` to read the current state tree inside the callback. * * You may call `dispatch()` from a change listener, with the following * caveats: * * 1. The subscriptions are snapshotted just before every `dispatch()` call. * If you subscribe or unsubscribe while the listeners are being invoked, this * will not have any effect on the `dispatch()` that is currently in progress. * However, the next `dispatch()` call, whether nested or not, will use a more * recent snapshot of the subscription list. * * 2. The listener should not expect to see all state changes, as the state * might have been updated multiple times during a nested `dispatch()` before * the listener is called. It is, however, guaranteed that all subscribers * registered before the `dispatch()` started will be called with the latest * state by the time it exits. * * @param {Function} listener A callback to be invoked on every dispatch. * @returns {Function} A function to remove this change listener. */ function subscribe(listener) { if (typeof listener !== 'function') { throw new Error('Expected listener to be a function.'); } var isSubscribed = true; ensureCanMutateNextListeners(); nextListeners.push(listener); return function unsubscribe() { if (!isSubscribed) { return; } isSubscribed = false; ensureCanMutateNextListeners(); var index = nextListeners.indexOf(listener); nextListeners.splice(index, 1); }; } /** * Dispatches an action. It is the only way to trigger a state change. * * The `reducer` function, used to create the store, will be called with the * current state tree and the given `action`. Its return value will * be considered the **next** state of the tree, and the change listeners * will be notified. * * The base implementation only supports plain object actions. If you want to * dispatch a Promise, an Observable, a thunk, or something else, you need to * wrap your store creating function into the corresponding middleware. For * example, see the documentation for the `redux-thunk` package. Even the * middleware will eventually dispatch plain object actions using this method. * * @param {Object} action A plain object representing “what changed”. It is * a good idea to keep actions serializable so you can record and replay user * sessions, or use the time travelling `redux-devtools`. An action must have * a `type` property which may not be `undefined`. It is a good idea to use * string constants for action types. * * @returns {Object} For convenience, the same action object you dispatched. * * Note that, if you use a custom middleware, it may wrap `dispatch()` to * return something else (for example, a Promise you can await). */ function dispatch(action) { if (!lodash_es_isPlainObject(action)) { throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.'); } if (typeof action.type === 'undefined') { throw new Error('Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?'); } if (isDispatching) { throw new Error('Reducers may not dispatch actions.'); } try { isDispatching = true; currentState = currentReducer(currentState, action); } finally { isDispatching = false; } var listeners = currentListeners = nextListeners; for (var i = 0; i < listeners.length; i++) { listeners[i](); } return action; } /** * Replaces the reducer currently used by the store to calculate the state. * * You might need this if your app implements code splitting and you want to * load some of the reducers dynamically. You might also need this if you * implement a hot reloading mechanism for Redux. * * @param {Function} nextReducer The reducer for the store to use instead. * @returns {void} */ function replaceReducer(nextReducer) { if (typeof nextReducer !== 'function') { throw new Error('Expected the nextReducer to be a function.'); } currentReducer = nextReducer; dispatch({ type: createStore_ActionTypes.INIT }); } /** * Interoperability point for observable/reactive libraries. * @returns {observable} A minimal observable of state changes. * For more information, see the observable proposal: * https://github.com/zenparsing/es-observable */ function observable() { var _ref; var outerSubscribe = subscribe; return _ref = { /** * The minimal observable subscription method. * @param {Object} observer Any object that can be used as an observer. * The observer object should have a `next` method. * @returns {subscription} An object with an `unsubscribe` method that can * be used to unsubscribe the observable from the store, and prevent further * emission of values from the observable. */ subscribe: function subscribe(observer) { if (typeof observer !== 'object') { throw new TypeError('Expected the observer to be an object.'); } function observeState() { if (observer.next) { observer.next(getState()); } } observeState(); var unsubscribe = outerSubscribe(observeState); return { unsubscribe: unsubscribe }; } }, _ref[es/* default */.Z] = function () { return this; }, _ref; } // When a store is created, an "INIT" action is dispatched so that every // reducer returns their initial state. This effectively populates // the initial state tree. dispatch({ type: createStore_ActionTypes.INIT }); return _ref2 = { dispatch: dispatch, subscribe: subscribe, getState: getState, replaceReducer: replaceReducer }, _ref2[es/* default */.Z] = observable, _ref2; } ;// CONCATENATED MODULE: ../../app/node_modules/redux/es/combineReducers.js function getUndefinedStateErrorMessage(key, action) { var actionType = action && action.type; var actionName = actionType && '"' + actionType.toString() + '"' || 'an action'; return 'Given action ' + actionName + ', reducer "' + key + '" returned undefined. ' + 'To ignore an action, you must explicitly return the previous state.'; } function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) { var reducerKeys = Object.keys(reducers); var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer'; if (reducerKeys.length === 0) { return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.'; } if (!isPlainObject(inputState)) { return 'The ' + argumentName + ' has unexpected type of "' + {}.toString.call(inputState).match(/\s([a-z|A-Z]+)/)[1] + '". Expected argument to be an object with the following ' + ('keys: "' + reducerKeys.join('", "') + '"'); } var unexpectedKeys = Object.keys(inputState).filter(function (key) { return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]; }); unexpectedKeys.forEach(function (key) { unexpectedKeyCache[key] = true; }); if (unexpectedKeys.length > 0) { return 'Unexpected ' + (unexpectedKeys.length > 1 ? 'keys' : 'key') + ' ' + ('"' + unexpectedKeys.join('", "') + '" found in ' + argumentName + '. ') + 'Expected to find one of the known reducer keys instead: ' + ('"' + reducerKeys.join('", "') + '". Unexpected keys will be ignored.'); } } function assertReducerSanity(reducers) { Object.keys(reducers).forEach(function (key) { var reducer = reducers[key]; var initialState = reducer(undefined, { type: createStore_ActionTypes.INIT }); if (typeof initialState === 'undefined') { throw new Error('Reducer "' + key + '" returned undefined during initialization. ' + 'If the state passed to the reducer is undefined, you must ' + 'explicitly return the initial state. The initial state may ' + 'not be undefined.'); } var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.'); if (typeof reducer(undefined, { type: type }) === 'undefined') { throw new Error('Reducer "' + key + '" returned undefined when probed with a random type. ' + ('Don\'t try to handle ' + createStore_ActionTypes.INIT + ' or other actions in "redux/*" ') + 'namespace. They are considered private. Instead, you must return the ' + 'current state for any unknown actions, unless it is undefined, ' + 'in which case you must return the initial state, regardless of the ' + 'action type. The initial state may not be undefined.'); } }); } /** * Turns an object whose values are different reducer functions, into a single * reducer function. It will call every child reducer, and gather their results * into a single state object, whose keys correspond to the keys of the passed * reducer functions. * * @param {Object} reducers An object whose values correspond to different * reducer functions that need to be combined into one. One handy way to obtain * it is to use ES6 `import * as reducers` syntax. The reducers may never return * undefined for any action. Instead, they should return their initial state * if the state passed to them was undefined, and the current state for any * unrecognized action. * * @returns {Function} A reducer function that invokes every reducer inside the * passed object, and builds a state object with the same shape. */ function combineReducers(reducers) { var reducerKeys = Object.keys(reducers); var finalReducers = {}; for (var i = 0; i < reducerKeys.length; i++) { var key = reducerKeys[i]; if (false) {} if (typeof reducers[key] === 'function') { finalReducers[key] = reducers[key]; } } var finalReducerKeys = Object.keys(finalReducers); if (false) { var unexpectedKeyCache } var sanityError; try { assertReducerSanity(finalReducers); } catch (e) { sanityError = e; } return function combination() { var state = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; var action = arguments[1]; if (sanityError) { throw sanityError; } if (false) { var warningMessage } var hasChanged = false; var nextState = {}; for (var i = 0; i < finalReducerKeys.length; i++) { var key = finalReducerKeys[i]; var reducer = finalReducers[key]; var previousStateForKey = state[key]; var nextStateForKey = reducer(previousStateForKey, action); if (typeof nextStateForKey === 'undefined') { var errorMessage = getUndefinedStateErrorMessage(key, action); throw new Error(errorMessage); } nextState[key] = nextStateForKey; hasChanged = hasChanged || nextStateForKey !== previousStateForKey; } return hasChanged ? nextState : state; }; } ;// CONCATENATED MODULE: ../../app/node_modules/redux/es/bindActionCreators.js function bindActionCreator(actionCreator, dispatch) { return function () { return dispatch(actionCreator.apply(undefined, arguments)); }; } /** * Turns an object whose values are action creators, into an object with the * same keys, but with every function wrapped into a `dispatch` call so they * may be invoked directly. This is just a convenience method, as you can call * `store.dispatch(MyActionCreators.doSomething())` yourself just fine. * * For convenience, you can also pass a single function as the first argument, * and get a function in return. * * @param {Function|Object} actionCreators An object whose values are action * creator functions. One handy way to obtain it is to use ES6 `import * as` * syntax. You may also pass a single function. * * @param {Function} dispatch The `dispatch` function available on your Redux * store. * * @returns {Function|Object} The object mimicking the original object, but with * every action creator wrapped into the `dispatch` call. If you passed a * function as `actionCreators`, the return value will also be a single * function. */ function bindActionCreators(actionCreators, dispatch) { if (typeof actionCreators === 'function') { return bindActionCreator(actionCreators, dispatch); } if (typeof actionCreators !== 'object' || actionCreators === null) { throw new Error('bindActionCreators expected an object or a function, instead received ' + (actionCreators === null ? 'null' : typeof actionCreators) + '. ' + 'Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?'); } var keys = Object.keys(actionCreators); var boundActionCreators = {}; for (var i = 0; i < keys.length; i++) { var key = keys[i]; var actionCreator = actionCreators[key]; if (typeof actionCreator === 'function') { boundActionCreators[key] = bindActionCreator(actionCreator, dispatch); } } return boundActionCreators; } ;// CONCATENATED MODULE: ../../app/node_modules/redux/es/compose.js /** * Composes single-argument functions from right to left. The rightmost * function can take multiple arguments as it provides the signature for * the resulting composite function. * * @param {...Function} funcs The functions to compose. * @returns {Function} A function obtained by composing the argument functions * from right to left. For example, compose(f, g, h) is identical to doing * (...args) => f(g(h(...args))). */ function compose() { for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) { funcs[_key] = arguments[_key]; } if (funcs.length === 0) { return function (arg) { return arg; }; } if (funcs.length === 1) { return funcs[0]; } var last = funcs[funcs.length - 1]; var rest = funcs.slice(0, -1); return function () { return rest.reduceRight(function (composed, f) { return f(composed); }, last.apply(undefined, arguments)); }; } ;// CONCATENATED MODULE: ../../app/node_modules/redux/es/applyMiddleware.js var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** * Creates a store enhancer that applies middleware to the dispatch method * of the Redux store. This is handy for a variety of tasks, such as expressing * asynchronous actions in a concise manner, or logging every action payload. * * See `redux-thunk` package as an example of the Redux middleware. * * Because middleware is potentially asynchronous, this should be the first * store enhancer in the composition chain. * * Note that each middleware will be given the `dispatch` and `getState` functions * as named arguments. * * @param {...Function} middlewares The middleware chain to be applied. * @returns {Function} A store enhancer applying the middleware. */ function applyMiddleware() { for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) { middlewares[_key] = arguments[_key]; } return function (createStore) { return function (reducer, preloadedState, enhancer) { var store = createStore(reducer, preloadedState, enhancer); var _dispatch = store.dispatch; var chain = []; var middlewareAPI = { getState: store.getState, dispatch: function dispatch(action) { return _dispatch(action); } }; chain = middlewares.map(function (middleware) { return middleware(middlewareAPI); }); _dispatch = compose.apply(undefined, chain)(store.dispatch); return _extends({}, store, { dispatch: _dispatch }); }; }; } ;// CONCATENATED MODULE: ../../app/node_modules/redux/es/index.js /* * This is a dummy function to check if the function name has been altered by minification. * If the function has been minified and NODE_ENV !== 'production', warn the user. */ function isCrushed() {} if (false) {} }), 3485: (function (module, __webpack_exports__, __webpack_require__) { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, { Z: () => (/* binding */ es) }); ;// CONCATENATED MODULE: ../../app/node_modules/redux/node_modules/symbol-observable/es/ponyfill.js function symbolObservablePonyfill(root) { var result; var Symbol = root.Symbol; if (typeof Symbol === 'function') { if (Symbol.observable) { result = Symbol.observable; } else { result = Symbol('observable'); Symbol.observable = result; } } else { result = '@@observable'; } return result; }; ;// CONCATENATED MODULE: ../../app/node_modules/redux/node_modules/symbol-observable/es/index.js /* module decorator */ module = __webpack_require__.hmd(module); /* global window */ var es_root; if (typeof self !== 'undefined') { es_root = self; } else if (typeof window !== 'undefined') { es_root = window; } else if (typeof __webpack_require__.g !== 'undefined') { es_root = __webpack_require__.g; } else if (true) { es_root = module; } else {} var es_result = symbolObservablePonyfill(es_root); /* ESM default export */ const es = (es_result); }), 1185: (function (__unused_webpack_module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; exports.clone = clone; exports.addLast = addLast; exports.addFirst = addFirst; exports.removeLast = removeLast; exports.removeFirst = removeFirst; exports.insert = insert; exports.removeAt = removeAt; exports.replaceAt = replaceAt; exports.getIn = getIn; exports.set = set; exports.setIn = setIn; exports.update = update; exports.updateIn = updateIn; exports.merge = merge; exports.mergeDeep = mergeDeep; exports.mergeIn = mergeIn; exports.omit = omit; exports.addDefaults = addDefaults; /*! * Timm * * Immutability helpers with fast reads and acceptable writes. * * @copyright Guillermo Grau Panea 2016 * @license MIT */ var INVALID_ARGS = 'INVALID_ARGS'; // =============================================== // ### Helpers // =============================================== function throwStr(msg) { throw new Error(msg); } function getKeysAndSymbols(obj) { var keys = Object.keys(obj); if (Object.getOwnPropertySymbols) { return keys.concat(Object.getOwnPropertySymbols(obj)); } return keys; } var hasOwnProperty = {}.hasOwnProperty; function clone(obj) { if (Array.isArray(obj)) return obj.slice(); var keys = getKeysAndSymbols(obj); var out = {}; for (var i = 0; i < keys.length; i++) { var key = keys[i]; out[key] = obj[key]; } return out; } function doMerge(fAddDefaults, fDeep, first) { var out = first; !(out != null) && throwStr( false ? 0 : INVALID_ARGS); var fChanged = false; for (var _len = arguments.length, rest = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { rest[_key - 3] = arguments[_key]; } for (var idx = 0; idx < rest.length; idx++) { var obj = rest[idx]; if (obj == null) continue; var keys = getKeysAndSymbols(obj); if (!keys.length) continue; for (var j = 0; j <= keys.length; j++) { var key = keys[j]; if (fAddDefaults && out[key] !== undefined) continue; var nextVal = obj[key]; if (fDeep && isObject(out[key]) && isObject(nextVal)) { nextVal = doMerge(fAddDefaults, fDeep, out[key], nextVal); } if (nextVal === undefined || nextVal === out[key]) continue; if (!fChanged) { fChanged = true; out = clone(out); } out[key] = nextVal; } } return out; } function isObject(o) { var type = typeof o === 'undefined' ? 'undefined' : _typeof(o); return o != null && (type === 'object' || type === 'function'); } // _deepFreeze = (obj) -> // Object.freeze obj // for key in Object.getOwnPropertyNames obj // val = obj[key] // if isObject(val) and not Object.isFrozen val // _deepFreeze val // obj // =============================================== // -- ### Arrays // =============================================== // -- #### addLast() // -- Returns a new array with an appended item or items. // -- // -- Usage: `addLast(array: Array, val: Array|T): Array` // -- // -- ```js // -- arr = ['a', 'b'] // -- arr2 = addLast(arr, 'c') // -- // ['a', 'b', 'c'] // -- arr2 === arr // -- // false // -- arr3 = addLast(arr, ['c', 'd']) // -- // ['a', 'b', 'c', 'd'] // -- ``` // `array.concat(val)` also handles the scalar case, // but is apparently very slow function addLast(array, val) { if (Array.isArray(val)) return array.concat(val); return array.concat([val]); } // -- #### addFirst() // -- Returns a new array with a prepended item or items. // -- // -- Usage: `addFirst(array: Array, val: Array|T): Array` // -- // -- ```js // -- arr = ['a', 'b'] // -- arr2 = addFirst(arr, 'c') // -- // ['c', 'a', 'b'] // -- arr2 === arr // -- // false // -- arr3 = addFirst(arr, ['c', 'd']) // -- // ['c', 'd', 'a', 'b'] // -- ``` function addFirst(array, val) { if (Array.isArray(val)) return val.concat(array); return [val].concat(array); } // -- #### removeLast() // -- Returns a new array removing the last item. // -- // -- Usage: `removeLast(array: Array): Array` // -- // -- ```js // -- arr = ['a', 'b'] // -- arr2 = removeLast(arr) // -- // ['a'] // -- arr2 === arr // -- // false // -- // -- // The same array is returned if there are no changes: // -- arr3 = [] // -- removeLast(arr3) === arr3 // -- // true // -- ``` function removeLast(array) { if (!array.length) return array; return array.slice(0, array.length - 1); } // -- #### removeFirst() // -- Returns a new array removing the first item. // -- // -- Usage: `removeFirst(array: Array): Array` // -- // -- ```js // -- arr = ['a', 'b'] // -- arr2 = removeFirst(arr) // -- // ['b'] // -- arr2 === arr // -- // false // -- // -- // The same array is returned if there are no changes: // -- arr3 = [] // -- removeFirst(arr3) === arr3 // -- // true // -- ``` function removeFirst(array) { if (!array.length) return array; return array.slice(1); } // -- #### insert() // -- Returns a new array obtained by inserting an item or items // -- at a specified index. // -- // -- Usage: `insert(array: Array, idx: number, val: Array|T): Array` // -- // -- ```js // -- arr = ['a', 'b', 'c'] // -- arr2 = insert(arr, 1, 'd') // -- // ['a', 'd', 'b', 'c'] // -- arr2 === arr // -- // false // -- insert(arr, 1, ['d', 'e']) // -- // ['a', 'd', 'e', 'b', 'c'] // -- ``` function insert(array, idx, val) { return array.slice(0, idx).concat(Array.isArray(val) ? val : [val]).concat(array.slice(idx)); } // -- #### removeAt() // -- Returns a new array obtained by removing an item at // -- a specified index. // -- // -- Usage: `removeAt(array: Array, idx: number): Array` // -- // -- ```js // -- arr = ['a', 'b', 'c'] // -- arr2 = removeAt(arr, 1) // -- // ['a', 'c'] // -- arr2 === arr // -- // false // -- // -- // The same array is returned if there are no changes: // -- removeAt(arr, 4) === arr // -- // true // -- ``` function removeAt(array, idx) { if (idx >= array.length || idx < 0) return array; return array.slice(0, idx).concat(array.slice(idx + 1)); } // -- #### replaceAt() // -- Returns a new array obtained by replacing an item at // -- a specified index. If the provided item is the same as // -- (*referentially equal to*) the previous item at that position, // -- the original array is returned. // -- // -- Usage: `replaceAt(array: Array, idx: number, newItem: T): Array` // -- // -- ```js // -- arr = ['a', 'b', 'c'] // -- arr2 = replaceAt(arr, 1, 'd') // -- // ['a', 'd', 'c'] // -- arr2 === arr // -- // false // -- // -- // The same object is returned if there are no changes: // -- replaceAt(arr, 1, 'b') === arr // -- // true // -- ``` function replaceAt(array, idx, newItem) { if (array[idx] === newItem) return array; var len = array.length; var result = Array(len); for (var i = 0; i < len; i++) { result[i] = array[i]; } result[idx] = newItem; return result; } // =============================================== // -- ### Collections (objects and arrays) // =============================================== // -- The following types are used throughout this section // -- ```js // -- type ArrayOrObject = Array|Object; // -- type Key = number|string; // -- ``` // -- #### getIn() // -- Returns a value from an object at a given path. Works with // -- nested arrays and objects. If the path does not exist, it returns // -- `undefined`. // -- // -- Usage: `getIn(obj: ?ArrayOrObject, path: Array): any` // -- // -- ```js // -- obj = { a: 1, b: 2, d: { d1: 3, d2: 4 }, e: ['a', 'b', 'c'] } // -- getIn(obj, ['d', 'd1']) // -- // 3 // -- getIn(obj, ['e', 1]) // -- // 'b' // -- ``` function getIn(obj, path) { !Array.isArray(path) && throwStr( false ? 0 : INVALID_ARGS); if (obj == null) return undefined; var ptr = obj; for (var i = 0; i < path.length; i++) { var key = path[i]; ptr = ptr != null ? ptr[key] : undefined; if (ptr === undefined) return ptr; } return ptr; } // -- #### set() // -- Returns a new object with a modified attribute. // -- If the provided value is the same as (*referentially equal to*) // -- the previous value, the original object is returned. // -- // -- Usage: `set(obj: ?T, key: Key, val: any): T` // -- // -- ```js // -- obj = { a: 1, b: 2, c: 3 } // -- obj2 = set(obj, 'b', 5) // -- // { a: 1, b: 5, c: 3 } // -- obj2 === obj // -- // false // -- // -- // The same object is returned if there are no changes: // -- set(obj, 'b', 2) === obj // -- // true // -- ``` function set(obj, key, val) { var fallback = typeof key === 'number' ? [] : {}; var finalObj = obj == null ? fallback : obj; if (finalObj[key] === val) return finalObj; var obj2 = clone(finalObj); obj2[key] = val; return obj2; } // -- #### setIn() // -- Returns a new object with a modified **nested** attribute. // -- // -- Notes: // -- // -- * If the provided value is the same as (*referentially equal to*) // -- the previous value, the original object is returned. // -- * If the path does not exist, it will be created before setting // -- the new value. // -- // -- Usage: `setIn(obj: T, path: Array, val: any): T` // -- // -- ```js // -- obj = { a: 1, b: 2, d: { d1: 3, d2: 4 }, e: { e1: 'foo', e2: 'bar' } } // -- obj2 = setIn(obj, ['d', 'd1'], 4) // -- // { a: 1, b: 2, d: { d1: 4, d2: 4 }, e: { e1: 'foo', e2: 'bar' } } // -- obj2 === obj // -- // false // -- obj2.d === obj.d // -- // false // -- obj2.e === obj.e // -- // true // -- // -- // The same object is returned if there are no changes: // -- obj3 = setIn(obj, ['d', 'd1'], 3) // -- // { a: 1, b: 2, d: { d1: 3, d2: 4 }, e: { e1: 'foo', e2: 'bar' } } // -- obj3 === obj // -- // true // -- obj3.d === obj.d // -- // true // -- obj3.e === obj.e // -- // true // -- // -- // ... unknown paths create intermediate keys. Numeric segments are treated as array indices: // -- setIn({ a: 3 }, ['unknown', 0, 'path'], 4) // -- // { a: 3, unknown: [{ path: 4 }] } // -- ``` function doSetIn(obj, path, val, idx) { var newValue = void 0; var key = path[idx]; if (idx === path.length - 1) { newValue = val; } else { var nestedObj = isObject(obj) && isObject(obj[key]) ? obj[key] : typeof path[idx + 1] === 'number' ? [] : {}; newValue = doSetIn(nestedObj, path, val, idx + 1); } return set(obj, key, newValue); } function setIn(obj, path, val) { if (!path.length) return val; return doSetIn(obj, path, val, 0); } // -- #### update() // -- Returns a new object with a modified attribute, // -- calculated via a user-provided callback based on the current value. // -- If the calculated value is the same as (*referentially equal to*) // -- the previous value, the original object is returned. // -- // -- Usage: `update(obj: T, key: Key, // -- fnUpdate: (prevValue: any) => any): T` // -- // -- ```js // -- obj = { a: 1, b: 2, c: 3 } // -- obj2 = update(obj, 'b', (val) => val + 1) // -- // { a: 1, b: 3, c: 3 } // -- obj2 === obj // -- // false // -- // -- // The same object is returned if there are no changes: // -- update(obj, 'b', (val) => val) === obj // -- // true // -- ``` function update(obj, key, fnUpdate) { var prevVal = obj == null ? undefined : obj[key]; var nextVal = fnUpdate(prevVal); return set(obj, key, nextVal); } // -- #### updateIn() // -- Returns a new object with a modified **nested** attribute, // -- calculated via a user-provided callback based on the current value. // -- If the calculated value is the same as (*referentially equal to*) // -- the previous value, the original object is returned. // -- // -- Usage: `updateIn(obj: T, path: Array, // -- fnUpdate: (prevValue: any) => any): T` // -- // -- ```js // -- obj = { a: 1, d: { d1: 3, d2: 4 } } // -- obj2 = updateIn(obj, ['d', 'd1'], (val) => val + 1) // -- // { a: 1, d: { d1: 4, d2: 4 } } // -- obj2 === obj // -- // false // -- // -- // The same object is returned if there are no changes: // -- obj3 = updateIn(obj, ['d', 'd1'], (val) => val) // -- // { a: 1, d: { d1: 3, d2: 4 } } // -- obj3 === obj // -- // true // -- ``` function updateIn(obj, path, fnUpdate) { var prevVal = getIn(obj, path); var nextVal = fnUpdate(prevVal); return setIn(obj, path, nextVal); } // -- #### merge() // -- Returns a new object built as follows: the overlapping keys from the // -- second one overwrite the corresponding entries from the first one. // -- Similar to `Object.assign()`, but immutable. // -- // -- Usage: // -- // -- * `merge(obj1: Object, obj2: ?Object): Object` // -- * `merge(obj1: Object, ...objects: Array): Object` // -- // -- The unmodified `obj1` is returned if `obj2` does not *provide something // -- new to* `obj1`, i.e. if either of the following // -- conditions are true: // -- // -- * `obj2` is `null` or `undefined` // -- * `obj2` is an object, but it is empty // -- * All attributes of `obj2` are `undefined` // -- * All attributes of `obj2` are referentially equal to the // -- corresponding attributes of `obj1` // -- // -- Note that `undefined` attributes in `obj2` do not modify the // -- corresponding attributes in `obj1`. // -- // -- ```js // -- obj1 = { a: 1, b: 2, c: 3 } // -- obj2 = { c: 4, d: 5 } // -- obj3 = merge(obj1, obj2) // -- // { a: 1, b: 2, c: 4, d: 5 } // -- obj3 === obj1 // -- // false // -- // -- // The same object is returned if there are no changes: // -- merge(obj1, { c: 3 }) === obj1 // -- // true // -- ``` function merge(a, b, c, d, e, f) { for (var _len2 = arguments.length, rest = Array(_len2 > 6 ? _len2 - 6 : 0), _key2 = 6; _key2 < _len2; _key2++) { rest[_key2 - 6] = arguments[_key2]; } return rest.length ? doMerge.call.apply(doMerge, [null, false, false, a, b, c, d, e, f].concat(rest)) : doMerge(false, false, a, b, c, d, e, f); } // -- #### mergeDeep() // -- Returns a new object built as follows: the overlapping keys from the // -- second one overwrite the corresponding entries from the first one. // -- If both the first and second entries are objects they are merged recursively. // -- Similar to `Object.assign()`, but immutable, and deeply merging. // -- // -- Usage: // -- // -- * `mergeDeep(obj1: Object, obj2: ?Object): Object` // -- * `mergeDeep(obj1: Object, ...objects: Array): Object` // -- // -- The unmodified `obj1` is returned if `obj2` does not *provide something // -- new to* `obj1`, i.e. if either of the following // -- conditions are true: // -- // -- * `obj2` is `null` or `undefined` // -- * `obj2` is an object, but it is empty // -- * All attributes of `obj2` are `undefined` // -- * All attributes of `obj2` are referentially equal to the // -- corresponding attributes of `obj1` // -- // -- Note that `undefined` attributes in `obj2` do not modify the // -- corresponding attributes in `obj1`. // -- // -- ```js // -- obj1 = { a: 1, b: 2, c: { a: 1 } } // -- obj2 = { b: 3, c: { b: 2 } } // -- obj3 = mergeDeep(obj1, obj2) // -- // { a: 1, b: 3, c: { a: 1, b: 2 } } // -- obj3 === obj1 // -- // false // -- // -- // The same object is returned if there are no changes: // -- mergeDeep(obj1, { c: { a: 1 } }) === obj1 // -- // true // -- ``` function mergeDeep(a, b, c, d, e, f) { for (var _len3 = arguments.length, rest = Array(_len3 > 6 ? _len3 - 6 : 0), _key3 = 6; _key3 < _len3; _key3++) { rest[_key3 - 6] = arguments[_key3]; } return rest.length ? doMerge.call.apply(doMerge, [null, false, true, a, b, c, d, e, f].concat(rest)) : doMerge(false, true, a, b, c, d, e, f); } // -- #### mergeIn() // -- Similar to `merge()`, but merging the value at a given nested path. // -- Note that the returned type is the same as that of the first argument. // -- // -- Usage: // -- // -- * `mergeIn(obj1: T, path: Array, obj2: ?Object): T` // -- * `mergeIn(obj1: T, path: Array, // -- ...objects: Array): T` // -- // -- ```js // -- obj1 = { a: 1, d: { b: { d1: 3, d2: 4 } } } // -- obj2 = { d3: 5 } // -- obj3 = mergeIn(obj1, ['d', 'b'], obj2) // -- // { a: 1, d: { b: { d1: 3, d2: 4, d3: 5 } } } // -- obj3 === obj1 // -- // false // -- // -- // The same object is returned if there are no changes: // -- mergeIn(obj1, ['d', 'b'], { d2: 4 }) === obj1 // -- // true // -- ``` function mergeIn(a, path, b, c, d, e, f) { var prevVal = getIn(a, path); if (prevVal == null) prevVal = {}; var nextVal = void 0; for (var _len4 = arguments.length, rest = Array(_len4 > 7 ? _len4 - 7 : 0), _key4 = 7; _key4 < _len4; _key4++) { rest[_key4 - 7] = arguments[_key4]; } if (rest.length) { nextVal = doMerge.call.apply(doMerge, [null, false, false, prevVal, b, c, d, e, f].concat(rest)); } else { nextVal = doMerge(false, false, prevVal, b, c, d, e, f); } return setIn(a, path, nextVal); } // -- #### omit() // -- Returns an object excluding one or several attributes. // -- // -- Usage: `omit(obj: Object, attrs: Array|string): Object` // // -- ```js // -- obj = { a: 1, b: 2, c: 3, d: 4 } // -- omit(obj, 'a') // -- // { b: 2, c: 3, d: 4 } // -- omit(obj, ['b', 'c']) // -- // { a: 1, d: 4 } // -- // -- // The same object is returned if there are no changes: // -- omit(obj, 'z') === obj1 // -- // true // -- ``` function omit(obj, attrs) { var omitList = Array.isArray(attrs) ? attrs : [attrs]; var fDoSomething = false; for (var i = 0; i < omitList.length; i++) { if (hasOwnProperty.call(obj, omitList[i])) { fDoSomething = true; break; } } if (!fDoSomething) return obj; var out = {}; var keys = getKeysAndSymbols(obj); for (var _i = 0; _i < keys.length; _i++) { var key = keys[_i]; if (omitList.indexOf(key) >= 0) continue; out[key] = obj[key]; } return out; } // -- #### addDefaults() // -- Returns a new object built as follows: `undefined` keys in the first one // -- are filled in with the corresponding values from the second one // -- (even if they are `null`). // -- // -- Usage: // -- // -- * `addDefaults(obj: Object, defaults: Object): Object` // -- * `addDefaults(obj: Object, ...defaultObjects: Array): Object` // -- // -- ```js // -- obj1 = { a: 1, b: 2, c: 3 } // -- obj2 = { c: 4, d: 5, e: null } // -- obj3 = addDefaults(obj1, obj2) // -- // { a: 1, b: 2, c: 3, d: 5, e: null } // -- obj3 === obj1 // -- // false // -- // -- // The same object is returned if there are no changes: // -- addDefaults(obj1, { c: 4 }) === obj1 // -- // true // -- ``` function addDefaults(a, b, c, d, e, f) { for (var _len5 = arguments.length, rest = Array(_len5 > 6 ? _len5 - 6 : 0), _key5 = 6; _key5 < _len5; _key5++) { rest[_key5 - 6] = arguments[_key5]; } return rest.length ? doMerge.call.apply(doMerge, [null, true, false, a, b, c, d, e, f].concat(rest)) : doMerge(true, false, a, b, c, d, e, f); } // =============================================== // ### Public API // =============================================== var timm = { clone: clone, addLast: addLast, addFirst: addFirst, removeLast: removeLast, removeFirst: removeFirst, insert: insert, removeAt: removeAt, replaceAt: replaceAt, getIn: getIn, // eslint-disable-next-line object-shorthand set: set, // so that flow doesn't complain setIn: setIn, update: update, updateIn: updateIn, merge: merge, mergeDeep: mergeDeep, mergeIn: mergeIn, omit: omit, addDefaults: addDefaults }; exports["default"] = timm; }), 5487: (function () { "use strict"; /* eslint-disable eslint-comments/no-unlimited-disable */ /* eslint-disable */ /*! * tram.js v0.8.2-global * Cross-browser CSS3 transitions in JavaScript * https://github.com/bkwld/tram * MIT License */ /* prettier-ignore */ window.tram = function(a) { function b(a, b) { var c = new M.Bare; return c.init(a, b); } function c(a) { return a.replace(/[A-Z]/g, function(a) { return "-" + a.toLowerCase(); }); } function d(a) { var b = parseInt(a.slice(1), 16), c = b >> 16 & 255, d = b >> 8 & 255, e = 255 & b; return [ c, d, e ]; } function e(a, b, c) { return "#" + (1 << 24 | a << 16 | b << 8 | c).toString(16).slice(1); } function f() {} function g(a, b) { j("Type warning: Expected: [" + a + "] Got: [" + typeof b + "] " + b); } function h(a, b, c) { j("Units do not match [" + a + "]: " + b + ", " + c); } function i(a, b, c) { if (void 0 !== b && (c = b), void 0 === a) return c; var d = c; return $.test(a) || !_.test(a) ? d = parseInt(a, 10) : _.test(a) && (d = 1e3 * parseFloat(a)), 0 > d && (d = 0), d === d ? d : c; } function j(a) { U.debug && window && window.console.warn(a); } function k(a) { for(var b = -1, c = a ? a.length : 0, d = []; ++b < c;){ var e = a[b]; e && d.push(e); } return d; } var l = function(a, b, c) { function d(a) { return "object" == typeof a; } function e(a) { return "function" == typeof a; } function f() {} function g(h, i) { function j() { var a = new k; return e(a.init) && a.init.apply(a, arguments), a; } function k() {} i === c && (i = h, h = Object), j.Bare = k; var l, m = f[a] = h[a], n = k[a] = j[a] = new f; return n.constructor = j, j.mixin = function(b) { return k[a] = j[a] = g(j, b)[a], j; }, j.open = function(a) { if (l = {}, e(a) ? l = a.call(j, n, m, j, h) : d(a) && (l = a), d(l)) for(var c in l)b.call(l, c) && (n[c] = l[c]); return e(n.init) || (n.init = h), j; }, j.open(i); } return g; }("prototype", {}.hasOwnProperty), m = { ease: [ "ease", function(a, b, c, d) { var e = (a /= d) * a, f = e * a; return b + c * (-2.75 * f * e + 11 * e * e + -15.5 * f + 8 * e + .25 * a); } ], "ease-in": [ "ease-in", function(a, b, c, d) { var e = (a /= d) * a, f = e * a; return b + c * (-1 * f * e + 3 * e * e + -3 * f + 2 * e); } ], "ease-out": [ "ease-out", function(a, b, c, d) { var e = (a /= d) * a, f = e * a; return b + c * (.3 * f * e + -1.6 * e * e + 2.2 * f + -1.8 * e + 1.9 * a); } ], "ease-in-out": [ "ease-in-out", function(a, b, c, d) { var e = (a /= d) * a, f = e * a; return b + c * (2 * f * e + -5 * e * e + 2 * f + 2 * e); } ], linear: [ "linear", function(a, b, c, d) { return c * a / d + b; } ], "ease-in-quad": [ "cubic-bezier(0.550, 0.085, 0.680, 0.530)", function(a, b, c, d) { return c * (a /= d) * a + b; } ], "ease-out-quad": [ "cubic-bezier(0.250, 0.460, 0.450, 0.940)", function(a, b, c, d) { return -c * (a /= d) * (a - 2) + b; } ], "ease-in-out-quad": [ "cubic-bezier(0.455, 0.030, 0.515, 0.955)", function(a, b, c, d) { return (a /= d / 2) < 1 ? c / 2 * a * a + b : -c / 2 * (--a * (a - 2) - 1) + b; } ], "ease-in-cubic": [ "cubic-bezier(0.550, 0.055, 0.675, 0.190)", function(a, b, c, d) { return c * (a /= d) * a * a + b; } ], "ease-out-cubic": [ "cubic-bezier(0.215, 0.610, 0.355, 1)", function(a, b, c, d) { return c * ((a = a / d - 1) * a * a + 1) + b; } ], "ease-in-out-cubic": [ "cubic-bezier(0.645, 0.045, 0.355, 1)", function(a, b, c, d) { return (a /= d / 2) < 1 ? c / 2 * a * a * a + b : c / 2 * ((a -= 2) * a * a + 2) + b; } ], "ease-in-quart": [ "cubic-bezier(0.895, 0.030, 0.685, 0.220)", function(a, b, c, d) { return c * (a /= d) * a * a * a + b; } ], "ease-out-quart": [ "cubic-bezier(0.165, 0.840, 0.440, 1)", function(a, b, c, d) { return -c * ((a = a / d - 1) * a * a * a - 1) + b; } ], "ease-in-out-quart": [ "cubic-bezier(0.770, 0, 0.175, 1)", function(a, b, c, d) { return (a /= d / 2) < 1 ? c / 2 * a * a * a * a + b : -c / 2 * ((a -= 2) * a * a * a - 2) + b; } ], "ease-in-quint": [ "cubic-bezier(0.755, 0.050, 0.855, 0.060)", function(a, b, c, d) { return c * (a /= d) * a * a * a * a + b; } ], "ease-out-quint": [ "cubic-bezier(0.230, 1, 0.320, 1)", function(a, b, c, d) { return c * ((a = a / d - 1) * a * a * a * a + 1) + b; } ], "ease-in-out-quint": [ "cubic-bezier(0.860, 0, 0.070, 1)", function(a, b, c, d) { return (a /= d / 2) < 1 ? c / 2 * a * a * a * a * a + b : c / 2 * ((a -= 2) * a * a * a * a + 2) + b; } ], "ease-in-sine": [ "cubic-bezier(0.470, 0, 0.745, 0.715)", function(a, b, c, d) { return -c * Math.cos(a / d * (Math.PI / 2)) + c + b; } ], "ease-out-sine": [ "cubic-bezier(0.390, 0.575, 0.565, 1)", function(a, b, c, d) { return c * Math.sin(a / d * (Math.PI / 2)) + b; } ], "ease-in-out-sine": [ "cubic-bezier(0.445, 0.050, 0.550, 0.950)", function(a, b, c, d) { return -c / 2 * (Math.cos(Math.PI * a / d) - 1) + b; } ], "ease-in-expo": [ "cubic-bezier(0.950, 0.050, 0.795, 0.035)", function(a, b, c, d) { return 0 === a ? b : c * Math.pow(2, 10 * (a / d - 1)) + b; } ], "ease-out-expo": [ "cubic-bezier(0.190, 1, 0.220, 1)", function(a, b, c, d) { return a === d ? b + c : c * (-Math.pow(2, -10 * a / d) + 1) + b; } ], "ease-in-out-expo": [ "cubic-bezier(1, 0, 0, 1)", function(a, b, c, d) { return 0 === a ? b : a === d ? b + c : (a /= d / 2) < 1 ? c / 2 * Math.pow(2, 10 * (a - 1)) + b : c / 2 * (-Math.pow(2, -10 * --a) + 2) + b; } ], "ease-in-circ": [ "cubic-bezier(0.600, 0.040, 0.980, 0.335)", function(a, b, c, d) { return -c * (Math.sqrt(1 - (a /= d) * a) - 1) + b; } ], "ease-out-circ": [ "cubic-bezier(0.075, 0.820, 0.165, 1)", function(a, b, c, d) { return c * Math.sqrt(1 - (a = a / d - 1) * a) + b; } ], "ease-in-out-circ": [ "cubic-bezier(0.785, 0.135, 0.150, 0.860)", function(a, b, c, d) { return (a /= d / 2) < 1 ? -c / 2 * (Math.sqrt(1 - a * a) - 1) + b : c / 2 * (Math.sqrt(1 - (a -= 2) * a) + 1) + b; } ], "ease-in-back": [ "cubic-bezier(0.600, -0.280, 0.735, 0.045)", function(a, b, c, d, e) { return void 0 === e && (e = 1.70158), c * (a /= d) * a * ((e + 1) * a - e) + b; } ], "ease-out-back": [ "cubic-bezier(0.175, 0.885, 0.320, 1.275)", function(a, b, c, d, e) { return void 0 === e && (e = 1.70158), c * ((a = a / d - 1) * a * ((e + 1) * a + e) + 1) + b; } ], "ease-in-out-back": [ "cubic-bezier(0.680, -0.550, 0.265, 1.550)", function(a, b, c, d, e) { return void 0 === e && (e = 1.70158), (a /= d / 2) < 1 ? c / 2 * a * a * (((e *= 1.525) + 1) * a - e) + b : c / 2 * ((a -= 2) * a * (((e *= 1.525) + 1) * a + e) + 2) + b; } ] }, n = { "ease-in-back": "cubic-bezier(0.600, 0, 0.735, 0.045)", "ease-out-back": "cubic-bezier(0.175, 0.885, 0.320, 1)", "ease-in-out-back": "cubic-bezier(0.680, 0, 0.265, 1)" }, o = document, p = window, q = "bkwld-tram", r = /[\-\.0-9]/g, s = /[A-Z]/, t = "number", u = /^(rgb|#)/, v = /(em|cm|mm|in|pt|pc|px)$/, w = /(em|cm|mm|in|pt|pc|px|%)$/, x = /(deg|rad|turn)$/, y = "unitless", z = /(all|none) 0s ease 0s/, A = /^(width|height)$/, B = " ", C = o.createElement("a"), D = [ "Webkit", "Moz", "O", "ms" ], E = [ "-webkit-", "-moz-", "-o-", "-ms-" ], F = function(a) { if (a in C.style) return { dom: a, css: a }; var b, c, d = "", e = a.split("-"); for(b = 0; b < e.length; b++)d += e[b].charAt(0).toUpperCase() + e[b].slice(1); for(b = 0; b < D.length; b++)if (c = D[b] + d, c in C.style) return { dom: c, css: E[b] + a }; }, G = b.support = { bind: Function.prototype.bind, transform: F("transform"), transition: F("transition"), backface: F("backface-visibility"), timing: F("transition-timing-function") }; if (G.transition) { var H = G.timing.dom; if (C.style[H] = m["ease-in-back"][0], !C.style[H]) for(var I in n)m[I][0] = n[I]; } var J = b.frame = function() { var a = p.requestAnimationFrame || p.webkitRequestAnimationFrame || p.mozRequestAnimationFrame || p.oRequestAnimationFrame || p.msRequestAnimationFrame; return a && G.bind ? a.bind(p) : function(a) { p.setTimeout(a, 16); }; }(), K = b.now = function() { var a = p.performance, b = a && (a.now || a.webkitNow || a.msNow || a.mozNow); return b && G.bind ? b.bind(a) : Date.now || function() { return +new Date; }; }(), L = l(function(b) { function d(a, b) { var c = k(("" + a).split(B)), d = c[0]; b = b || {}; var e = Y[d]; if (!e) return j("Unsupported property: " + d); if (!b.weak || !this.props[d]) { var f = e[0], g = this.props[d]; return g || (g = this.props[d] = new f.Bare), g.init(this.$el, c, e, b), g; } } function e(a, b, c) { if (a) { var e = typeof a; if (b || (this.timer && this.timer.destroy(), this.queue = [], this.active = !1), "number" == e && b) return this.timer = new S({ duration: a, context: this, complete: h }), void (this.active = !0); if ("string" == e && b) { switch(a){ case "hide": o.call(this); break; case "stop": l.call(this); break; case "redraw": p.call(this); break; default: d.call(this, a, c && c[1]); } return h.call(this); } if ("function" == e) return void a.call(this, this); if ("object" == e) { var f = 0; u.call(this, a, function(a, b) { a.span > f && (f = a.span), a.stop(), a.animate(b); }, function(a) { "wait" in a && (f = i(a.wait, 0)); }), t.call(this), f > 0 && (this.timer = new S({ duration: f, context: this }), this.active = !0, b && (this.timer.complete = h)); var g = this, j = !1, k = {}; J(function() { u.call(g, a, function(a) { a.active && (j = !0, k[a.name] = a.nextStyle); }), j && g.$el.css(k); }); } } } function f(a) { a = i(a, 0), this.active ? this.queue.push({ options: a }) : (this.timer = new S({ duration: a, context: this, complete: h }), this.active = !0); } function g(a) { return this.active ? (this.queue.push({ options: a, args: arguments }), void (this.timer.complete = h)) : j("No active transition timer. Use start() or wait() before then()."); } function h() { if (this.timer && this.timer.destroy(), this.active = !1, this.queue.length) { var a = this.queue.shift(); e.call(this, a.options, !0, a.args); } } function l(a) { this.timer && this.timer.destroy(), this.queue = [], this.active = !1; var b; "string" == typeof a ? (b = {}, b[a] = 1) : b = "object" == typeof a && null != a ? a : this.props, u.call(this, b, v), t.call(this); } function m(a) { l.call(this, a), u.call(this, a, w, x); } function n(a) { "string" != typeof a && (a = "block"), this.el.style.display = a; } function o() { l.call(this), this.el.style.display = "none"; } function p() { this.el.offsetHeight; } function r() { l.call(this), a.removeData(this.el, q), this.$el = this.el = null; } function t() { var a, b, c = []; this.upstream && c.push(this.upstream); for(a in this.props)b = this.props[a], b.active && c.push(b.string); c = c.join(","), this.style !== c && (this.style = c, this.el.style[G.transition.dom] = c); } function u(a, b, e) { var f, g, h, i, j = b !== v, k = {}; for(f in a)h = a[f], f in Z ? (k.transform || (k.transform = {}), k.transform[f] = h) : (s.test(f) && (f = c(f)), f in Y ? k[f] = h : (i || (i = {}), i[f] = h)); for(f in k){ if (h = k[f], g = this.props[f], !g) { if (!j) continue; g = d.call(this, f); } b.call(this, g, h); } e && i && e.call(this, i); } function v(a) { a.stop(); } function w(a, b) { a.set(b); } function x(a) { this.$el.css(a); } function y(a, c) { b[a] = function() { return this.children ? A.call(this, c, arguments) : (this.el && c.apply(this, arguments), this); }; } function A(a, b) { var c, d = this.children.length; for(c = 0; d > c; c++)a.apply(this.children[c], b); return this; } b.init = function(b) { if (this.$el = a(b), this.el = this.$el[0], this.props = {}, this.queue = [], this.style = "", this.active = !1, U.keepInherited && !U.fallback) { var c = W(this.el, "transition"); c && !z.test(c) && (this.upstream = c); } G.backface && U.hideBackface && V(this.el, G.backface.css, "hidden"); }, y("add", d), y("start", e), y("wait", f), y("then", g), y("next", h), y("stop", l), y("set", m), y("show", n), y("hide", o), y("redraw", p), y("destroy", r); }), M = l(L, function(b) { function c(b, c) { var d = a.data(b, q) || a.data(b, q, new L.Bare); return d.el || d.init(b), c ? d.start(c) : d; } b.init = function(b, d) { var e = a(b); if (!e.length) return this; if (1 === e.length) return c(e[0], d); var f = []; return e.each(function(a, b) { f.push(c(b, d)); }), this.children = f, this; }; }), N = l(function(a) { function b() { var a = this.get(); this.update("auto"); var b = this.get(); return this.update(a), b; } function c(a, b, c) { return void 0 !== b && (c = b), a in m ? a : c; } function d(a) { var b = /rgba?\((\d+),\s*(\d+),\s*(\d+)/.exec(a); return (b ? e(b[1], b[2], b[3]) : a).replace(/#(\w)(\w)(\w)$/, "#$1$1$2$2$3$3"); } var f = { duration: 500, ease: "ease", delay: 0 }; a.init = function(a, b, d, e) { this.$el = a, this.el = a[0]; var g = b[0]; d[2] && (g = d[2]), X[g] && (g = X[g]), this.name = g, this.type = d[1], this.duration = i(b[1], this.duration, f.duration), this.ease = c(b[2], this.ease, f.ease), this.delay = i(b[3], this.delay, f.delay), this.span = this.duration + this.delay, this.active = !1, this.nextStyle = null, this.auto = A.test(this.name), this.unit = e.unit || this.unit || U.defaultUnit, this.angle = e.angle || this.angle || U.defaultAngle, U.fallback || e.fallback ? this.animate = this.fallback : (this.animate = this.transition, this.string = this.name + B + this.duration + "ms" + ("ease" != this.ease ? B + m[this.ease][0] : "") + (this.delay ? B + this.delay + "ms" : "")); }, a.set = function(a) { a = this.convert(a, this.type), this.update(a), this.redraw(); }, a.transition = function(a) { this.active = !0, a = this.convert(a, this.type), this.auto && ("auto" == this.el.style[this.name] && (this.update(this.get()), this.redraw()), "auto" == a && (a = b.call(this))), this.nextStyle = a; }, a.fallback = function(a) { var c = this.el.style[this.name] || this.convert(this.get(), this.type); a = this.convert(a, this.type), this.auto && ("auto" == c && (c = this.convert(this.get(), this.type)), "auto" == a && (a = b.call(this))), this.tween = new R({ from: c, to: a, duration: this.duration, delay: this.delay, ease: this.ease, update: this.update, context: this }); }, a.get = function() { return W(this.el, this.name); }, a.update = function(a) { V(this.el, this.name, a); }, a.stop = function() { (this.active || this.nextStyle) && (this.active = !1, this.nextStyle = null, V(this.el, this.name, this.get())); var a = this.tween; a && a.context && a.destroy(); }, a.convert = function(a, b) { if ("auto" == a && this.auto) return a; var c, e = "number" == typeof a, f = "string" == typeof a; switch(b){ case t: if (e) return a; if (f && "" === a.replace(r, "")) return +a; c = "number(unitless)"; break; case u: if (f) { if ("" === a && this.original) return this.original; if (b.test(a)) return "#" == a.charAt(0) && 7 == a.length ? a : d(a); } c = "hex or rgb string"; break; case v: if (e) return a + this.unit; if (f && b.test(a)) return a; c = "number(px) or string(unit)"; break; case w: if (e) return a + this.unit; if (f && b.test(a)) return a; c = "number(px) or string(unit or %)"; break; case x: if (e) return a + this.angle; if (f && b.test(a)) return a; c = "number(deg) or string(angle)"; break; case y: if (e) return a; if (f && w.test(a)) return a; c = "number(unitless) or string(unit or %)"; } return g(c, a), a; }, a.redraw = function() { this.el.offsetHeight; }; }), O = l(N, function(a, b) { a.init = function() { b.init.apply(this, arguments), this.original || (this.original = this.convert(this.get(), u)); }; }), P = l(N, function(a, b) { a.init = function() { b.init.apply(this, arguments), this.animate = this.fallback; }, a.get = function() { return this.$el[this.name](); }, a.update = function(a) { this.$el[this.name](a); }; }), Q = l(N, function(a, b) { function c(a, b) { var c, d, e, f, g; for(c in a)f = Z[c], e = f[0], d = f[1] || c, g = this.convert(a[c], e), b.call(this, d, g, e); } a.init = function() { b.init.apply(this, arguments), this.current || (this.current = {}, Z.perspective && U.perspective && (this.current.perspective = U.perspective, V(this.el, this.name, this.style(this.current)), this.redraw())); }, a.set = function(a) { c.call(this, a, function(a, b) { this.current[a] = b; }), V(this.el, this.name, this.style(this.current)), this.redraw(); }, a.transition = function(a) { var b = this.values(a); this.tween = new T({ current: this.current, values: b, duration: this.duration, delay: this.delay, ease: this.ease }); var c, d = {}; for(c in this.current)d[c] = c in b ? b[c] : this.current[c]; this.active = !0, this.nextStyle = this.style(d); }, a.fallback = function(a) { var b = this.values(a); this.tween = new T({ current: this.current, values: b, duration: this.duration, delay: this.delay, ease: this.ease, update: this.update, context: this }); }, a.update = function() { V(this.el, this.name, this.style(this.current)); }, a.style = function(a) { var b, c = ""; for(b in a)c += b + "(" + a[b] + ") "; return c; }, a.values = function(a) { var b, d = {}; return c.call(this, a, function(a, c, e) { d[a] = c, void 0 === this.current[a] && (b = 0, ~a.indexOf("scale") && (b = 1), this.current[a] = this.convert(b, e)); }), d; }; }), R = l(function(b) { function c(a) { 1 === n.push(a) && J(g); } function g() { var a, b, c, d = n.length; if (d) for(J(g), b = K(), a = d; a--;)c = n[a], c && c.render(b); } function i(b) { var c, d = a.inArray(b, n); d >= 0 && (c = n.slice(d + 1), n.length = d, c.length && (n = n.concat(c))); } function j(a) { return Math.round(a * o) / o; } function k(a, b, c) { return e(a[0] + c * (b[0] - a[0]), a[1] + c * (b[1] - a[1]), a[2] + c * (b[2] - a[2])); } var l = { ease: m.ease[1], from: 0, to: 1 }; b.init = function(a) { this.duration = a.duration || 0, this.delay = a.delay || 0; var b = a.ease || l.ease; m[b] && (b = m[b][1]), "function" != typeof b && (b = l.ease), this.ease = b, this.update = a.update || f, this.complete = a.complete || f, this.context = a.context || this, this.name = a.name; var c = a.from, d = a.to; void 0 === c && (c = l.from), void 0 === d && (d = l.to), this.unit = a.unit || "", "number" == typeof c && "number" == typeof d ? (this.begin = c, this.change = d - c) : this.format(d, c), this.value = this.begin + this.unit, this.start = K(), a.autoplay !== !1 && this.play(); }, b.play = function() { this.active || (this.start || (this.start = K()), this.active = !0, c(this)); }, b.stop = function() { this.active && (this.active = !1, i(this)); }, b.render = function(a) { var b, c = a - this.start; if (this.delay) { if (c <= this.delay) return; c -= this.delay; } if (c < this.duration) { var d = this.ease(c, 0, 1, this.duration); return b = this.startRGB ? k(this.startRGB, this.endRGB, d) : j(this.begin + d * this.change), this.value = b + this.unit, void this.update.call(this.context, this.value); } b = this.endHex || this.begin + this.change, this.value = b + this.unit, this.update.call(this.context, this.value), this.complete.call(this.context), this.destroy(); }, b.format = function(a, b) { if (b += "", a += "", "#" == a.charAt(0)) return this.startRGB = d(b), this.endRGB = d(a), this.endHex = a, this.begin = 0, void (this.change = 1); if (!this.unit) { var c = b.replace(r, ""), e = a.replace(r, ""); c !== e && h("tween", b, a), this.unit = c; } b = parseFloat(b), a = parseFloat(a), this.begin = this.value = b, this.change = a - b; }, b.destroy = function() { this.stop(), this.context = null, this.ease = this.update = this.complete = f; }; var n = [], o = 1e3; }), S = l(R, function(a) { a.init = function(a) { this.duration = a.duration || 0, this.complete = a.complete || f, this.context = a.context, this.play(); }, a.render = function(a) { var b = a - this.start; b < this.duration || (this.complete.call(this.context), this.destroy()); }; }), T = l(R, function(a, b) { a.init = function(a) { this.context = a.context, this.update = a.update, this.tweens = [], this.current = a.current; var b, c; for(b in a.values)c = a.values[b], this.current[b] !== c && this.tweens.push(new R({ name: b, from: this.current[b], to: c, duration: a.duration, delay: a.delay, ease: a.ease, autoplay: !1 })); this.play(); }, a.render = function(a) { var b, c, d = this.tweens.length, e = !1; for(b = d; b--;)c = this.tweens[b], c.context && (c.render(a), this.current[c.name] = c.value, e = !0); return e ? void (this.update && this.update.call(this.context)) : this.destroy(); }, a.destroy = function() { if (b.destroy.call(this), this.tweens) { var a, c = this.tweens.length; for(a = c; a--;)this.tweens[a].destroy(); this.tweens = null, this.current = null; } }; }), U = b.config = { debug: !1, defaultUnit: "px", defaultAngle: "deg", keepInherited: !1, hideBackface: !1, perspective: "", fallback: !G.transition, agentTests: [] }; b.fallback = function(a) { if (!G.transition) return U.fallback = !0; U.agentTests.push("(" + a + ")"); var b = new RegExp(U.agentTests.join("|"), "i"); U.fallback = b.test(navigator.userAgent); }, b.fallback("6.0.[2-5] Safari"), b.tween = function(a) { return new R(a); }, b.delay = function(a, b, c) { return new S({ complete: b, duration: a, context: c }); }, a.fn.tram = function(a) { return b.call(null, this, a); }; var V = a.style, W = a.css, X = { transform: G.transform && G.transform.css }, Y = { color: [ O, u ], background: [ O, u, "background-color" ], "outline-color": [ O, u ], "border-color": [ O, u ], "border-top-color": [ O, u ], "border-right-color": [ O, u ], "border-bottom-color": [ O, u ], "border-left-color": [ O, u ], "border-width": [ N, v ], "border-top-width": [ N, v ], "border-right-width": [ N, v ], "border-bottom-width": [ N, v ], "border-left-width": [ N, v ], "border-spacing": [ N, v ], "letter-spacing": [ N, v ], margin: [ N, v ], "margin-top": [ N, v ], "margin-right": [ N, v ], "margin-bottom": [ N, v ], "margin-left": [ N, v ], padding: [ N, v ], "padding-top": [ N, v ], "padding-right": [ N, v ], "padding-bottom": [ N, v ], "padding-left": [ N, v ], "outline-width": [ N, v ], opacity: [ N, t ], top: [ N, w ], right: [ N, w ], bottom: [ N, w ], left: [ N, w ], "font-size": [ N, w ], "text-indent": [ N, w ], "word-spacing": [ N, w ], width: [ N, w ], "min-width": [ N, w ], "max-width": [ N, w ], height: [ N, w ], "min-height": [ N, w ], "max-height": [ N, w ], "line-height": [ N, y ], "scroll-top": [ P, t, "scrollTop" ], "scroll-left": [ P, t, "scrollLeft" ] }, Z = {}; G.transform && (Y.transform = [ Q ], Z = { x: [ w, "translateX" ], y: [ w, "translateY" ], rotate: [ x ], rotateX: [ x ], rotateY: [ x ], scale: [ t ], scaleX: [ t ], scaleY: [ t ], skew: [ x ], skewX: [ x ], skewY: [ x ] }), G.transform && G.backface && (Z.z = [ w, "translateZ" ], Z.rotateZ = [ x ], Z.scaleZ = [ t ], Z.perspective = [ v ]); var $ = /ms/, _ = /s|\./; return a.tram = b; }(window.jQuery); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NoYXJlZC9yZW5kZXIvcGx1Z2lucy9CYXNlU2l0ZU1vZHVsZXMvdHJhbS1taW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgZXNsaW50LWNvbW1lbnRzL25vLXVubGltaXRlZC1kaXNhYmxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLyohXG4gKiB0cmFtLmpzIHYwLjguMi1nbG9iYWxcbiAqIENyb3NzLWJyb3dzZXIgQ1NTMyB0cmFuc2l0aW9ucyBpbiBKYXZhU2NyaXB0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmt3bGQvdHJhbVxuICogTUlUIExpY2Vuc2VcbiAqL1xuLyogcHJldHRpZXItaWdub3JlICovXG53aW5kb3cudHJhbT1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYil7dmFyIGM9bmV3IE0uQmFyZTtyZXR1cm4gYy5pbml0KGEsYil9ZnVuY3Rpb24gYyhhKXtyZXR1cm4gYS5yZXBsYWNlKC9bQS1aXS9nLGZ1bmN0aW9uKGEpe3JldHVyblwiLVwiK2EudG9Mb3dlckNhc2UoKX0pO31mdW5jdGlvbiBkKGEpe3ZhciBiPXBhcnNlSW50KGEuc2xpY2UoMSksMTYpLGM9Yj4+MTYmMjU1LGQ9Yj4+OCYyNTUsZT0yNTUmYjtyZXR1cm5bYyxkLGVdfWZ1bmN0aW9uIGUoYSxiLGMpe3JldHVyblwiI1wiKygxPDwyNHxhPDwxNnxiPDw4fGMpLnRvU3RyaW5nKDE2KS5zbGljZSgxKX1mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGcoYSxiKXtqKFwiVHlwZSB3YXJuaW5nOiBFeHBlY3RlZDogW1wiK2ErXCJdIEdvdDogW1wiK3R5cGVvZiBiK1wiXSBcIitiKX1mdW5jdGlvbiBoKGEsYixjKXtqKFwiVW5pdHMgZG8gbm90IG1hdGNoIFtcIithK1wiXTogXCIrYitcIiwgXCIrYyl9ZnVuY3Rpb24gaShhLGIsYyl7aWYodm9pZCAwIT09YiYmKGM9Yiksdm9pZCAwPT09YSlyZXR1cm4gYzt2YXIgZD1jO3JldHVybiAkLnRlc3QoYSl8fCFfLnRlc3QoYSk/ZD1wYXJzZUludChhLDEwKTpfLnRlc3QoYSkmJihkPTFlMypwYXJzZUZsb2F0KGEpKSwwPmQmJihkPTApLGQ9PT1kP2Q6Y31mdW5jdGlvbiBqKGEpe1UuZGVidWcmJndpbmRvdyYmd2luZG93LmNvbnNvbGUud2FybihhKX1mdW5jdGlvbiBrKGEpe2Zvcih2YXIgYj0tMSxjPWE/YS5sZW5ndGg6MCxkPVtdOysrYjxjOyl7dmFyIGU9YVtiXTtlJiZkLnB1c2goZSl9cmV0dXJuIGR9dmFyIGw9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGF9ZnVuY3Rpb24gZShhKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBhfWZ1bmN0aW9uIGYoKXt9ZnVuY3Rpb24gZyhoLGkpe2Z1bmN0aW9uIGooKXt2YXIgYT1uZXcgaztyZXR1cm4gZShhLmluaXQpJiZhLmluaXQuYXBwbHkoYSxhcmd1bWVudHMpLGF9ZnVuY3Rpb24gaygpe31pPT09YyYmKGk9aCxoPU9iamVjdCksai5CYXJlPWs7dmFyIGwsbT1mW2FdPWhbYV0sbj1rW2FdPWpbYV09bmV3IGY7cmV0dXJuIG4uY29uc3RydWN0b3I9aixqLm1peGluPWZ1bmN0aW9uKGIpe3JldHVybiBrW2FdPWpbYV09ZyhqLGIpW2FdLGp9LGoub3Blbj1mdW5jdGlvbihhKXtpZihsPXt9LGUoYSk/bD1hLmNhbGwoaixuLG0saixoKTpkKGEpJiYobD1hKSxkKGwpKWZvcih2YXIgYyBpbiBsKWIuY2FsbChsLGMpJiYobltjXT1sW2NdKTtyZXR1cm4gZShuLmluaXQpfHwobi5pbml0PWgpLGp9LGoub3BlbihpKX1yZXR1cm4gZ30oXCJwcm90b3R5cGVcIix7fS5oYXNPd25Qcm9wZXJ0eSksbT17ZWFzZTpbXCJlYXNlXCIsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9KGEvPWQpKmEsZj1lKmE7cmV0dXJuIGIrYyooLTIuNzUqZiplKzExKmUqZSstMTUuNSpmKzgqZSsuMjUqYSl9XSxcImVhc2UtaW5cIjpbXCJlYXNlLWluXCIsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9KGEvPWQpKmEsZj1lKmE7cmV0dXJuIGIrYyooLTEqZiplKzMqZSplKy0zKmYrMiplKX1dLFwiZWFzZS1vdXRcIjpbXCJlYXNlLW91dFwiLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPShhLz1kKSphLGY9ZSphO3JldHVybiBiK2MqKC4zKmYqZSstMS42KmUqZSsyLjIqZistMS44KmUrMS45KmEpfV0sXCJlYXNlLWluLW91dFwiOltcImVhc2UtaW4tb3V0XCIsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9KGEvPWQpKmEsZj1lKmE7cmV0dXJuIGIrYyooMipmKmUrLTUqZSplKzIqZisyKmUpfV0sbGluZWFyOltcImxpbmVhclwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKmEvZCtifV0sXCJlYXNlLWluLXF1YWRcIjpbXCJjdWJpYy1iZXppZXIoMC41NTAsIDAuMDg1LCAwLjY4MCwgMC41MzApXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGMqKGEvPWQpKmErYn1dLFwiZWFzZS1vdXQtcXVhZFwiOltcImN1YmljLWJlemllcigwLjI1MCwgMC40NjAsIDAuNDUwLCAwLjk0MClcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4tYyooYS89ZCkqKGEtMikrYn1dLFwiZWFzZS1pbi1vdXQtcXVhZFwiOltcImN1YmljLWJlemllcigwLjQ1NSwgMC4wMzAsIDAuNTE1LCAwLjk1NSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYS89ZC8yKTwxP2MvMiphKmErYjotYy8yKigtLWEqKGEtMiktMSkrYn1dLFwiZWFzZS1pbi1jdWJpY1wiOltcImN1YmljLWJlemllcigwLjU1MCwgMC4wNTUsIDAuNjc1LCAwLjE5MClcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYyooYS89ZCkqYSphK2J9XSxcImVhc2Utb3V0LWN1YmljXCI6W1wiY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxMCwgMC4zNTUsIDEpXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGMqKChhPWEvZC0xKSphKmErMSkrYn1dLFwiZWFzZS1pbi1vdXQtY3ViaWNcIjpbXCJjdWJpYy1iZXppZXIoMC42NDUsIDAuMDQ1LCAwLjM1NSwgMSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYS89ZC8yKTwxP2MvMiphKmEqYStiOmMvMiooKGEtPTIpKmEqYSsyKStifV0sXCJlYXNlLWluLXF1YXJ0XCI6W1wiY3ViaWMtYmV6aWVyKDAuODk1LCAwLjAzMCwgMC42ODUsIDAuMjIwKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKihhLz1kKSphKmEqYStifV0sXCJlYXNlLW91dC1xdWFydFwiOltcImN1YmljLWJlemllcigwLjE2NSwgMC44NDAsIDAuNDQwLCAxKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybi1jKigoYT1hL2QtMSkqYSphKmEtMSkrYn1dLFwiZWFzZS1pbi1vdXQtcXVhcnRcIjpbXCJjdWJpYy1iZXppZXIoMC43NzAsIDAsIDAuMTc1LCAxKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybihhLz1kLzIpPDE/Yy8yKmEqYSphKmErYjotYy8yKigoYS09MikqYSphKmEtMikrYn1dLFwiZWFzZS1pbi1xdWludFwiOltcImN1YmljLWJlemllcigwLjc1NSwgMC4wNTAsIDAuODU1LCAwLjA2MClcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYyooYS89ZCkqYSphKmEqYStifV0sXCJlYXNlLW91dC1xdWludFwiOltcImN1YmljLWJlemllcigwLjIzMCwgMSwgMC4zMjAsIDEpXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGMqKChhPWEvZC0xKSphKmEqYSphKzEpK2J9XSxcImVhc2UtaW4tb3V0LXF1aW50XCI6W1wiY3ViaWMtYmV6aWVyKDAuODYwLCAwLCAwLjA3MCwgMSlcIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYS89ZC8yKTwxP2MvMiphKmEqYSphKmErYjpjLzIqKChhLT0yKSphKmEqYSphKzIpK2J9XSxcImVhc2UtaW4tc2luZVwiOltcImN1YmljLWJlemllcigwLjQ3MCwgMCwgMC43NDUsIDAuNzE1KVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybi1jKk1hdGguY29zKGEvZCooTWF0aC5QSS8yKSkrYytifV0sXCJlYXNlLW91dC1zaW5lXCI6W1wiY3ViaWMtYmV6aWVyKDAuMzkwLCAwLjU3NSwgMC41NjUsIDEpXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGMqTWF0aC5zaW4oYS9kKihNYXRoLlBJLzIpKStifV0sXCJlYXNlLWluLW91dC1zaW5lXCI6W1wiY3ViaWMtYmV6aWVyKDAuNDQ1LCAwLjA1MCwgMC41NTAsIDAuOTUwKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybi1jLzIqKE1hdGguY29zKE1hdGguUEkqYS9kKS0xKStifV0sXCJlYXNlLWluLWV4cG9cIjpbXCJjdWJpYy1iZXppZXIoMC45NTAsIDAuMDUwLCAwLjc5NSwgMC4wMzUpXCIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIDA9PT1hP2I6YypNYXRoLnBvdygyLDEwKihhL2QtMSkpK2J9XSxcImVhc2Utb3V0LWV4cG9cIjpbXCJjdWJpYy1iZXppZXIoMC4xOTAsIDEsIDAuMjIwLCAxKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBhPT09ZD9iK2M6YyooLU1hdGgucG93KDIsLTEwKmEvZCkrMSkrYn1dLFwiZWFzZS1pbi1vdXQtZXhwb1wiOltcImN1YmljLWJlemllcigxLCAwLCAwLCAxKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiAwPT09YT9iOmE9PT1kP2IrYzooYS89ZC8yKTwxP2MvMipNYXRoLnBvdygyLDEwKihhLTEpKStiOmMvMiooLU1hdGgucG93KDIsLTEwKi0tYSkrMikrYn1dLFwiZWFzZS1pbi1jaXJjXCI6W1wiY3ViaWMtYmV6aWVyKDAuNjAwLCAwLjA0MCwgMC45ODAsIDAuMzM1KVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybi1jKihNYXRoLnNxcnQoMS0oYS89ZCkqYSktMSkrYn1dLFwiZWFzZS1vdXQtY2lyY1wiOltcImN1YmljLWJlemllcigwLjA3NSwgMC44MjAsIDAuMTY1LCAxKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKk1hdGguc3FydCgxLShhPWEvZC0xKSphKStifV0sXCJlYXNlLWluLW91dC1jaXJjXCI6W1wiY3ViaWMtYmV6aWVyKDAuNzg1LCAwLjEzNSwgMC4xNTAsIDAuODYwKVwiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybihhLz1kLzIpPDE/LWMvMiooTWF0aC5zcXJ0KDEtYSphKS0xKStiOmMvMiooTWF0aC5zcXJ0KDEtKGEtPTIpKmEpKzEpK2J9XSxcImVhc2UtaW4tYmFja1wiOltcImN1YmljLWJlemllcigwLjYwMCwgLTAuMjgwLCAwLjczNSwgMC4wNDUpXCIsZnVuY3Rpb24oYSxiLGMsZCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MS43MDE1OCksYyooYS89ZCkqYSooKGUrMSkqYS1lKStifV0sXCJlYXNlLW91dC1iYWNrXCI6W1wiY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMjAsIDEuMjc1KVwiLGZ1bmN0aW9uKGEsYixjLGQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTEuNzAxNTgpLGMqKChhPWEvZC0xKSphKigoZSsxKSphK2UpKzEpK2J9XSxcImVhc2UtaW4tb3V0LWJhY2tcIjpbXCJjdWJpYy1iZXppZXIoMC42ODAsIC0wLjU1MCwgMC4yNjUsIDEuNTUwKVwiLGZ1bmN0aW9uKGEsYixjLGQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTEuNzAxNTgpLChhLz1kLzIpPDE/Yy8yKmEqYSooKChlKj0xLjUyNSkrMSkqYS1lKStiOmMvMiooKGEtPTIpKmEqKCgoZSo9MS41MjUpKzEpKmErZSkrMikrYn1dfSxuPXtcImVhc2UtaW4tYmFja1wiOlwiY3ViaWMtYmV6aWVyKDAuNjAwLCAwLCAwLjczNSwgMC4wNDUpXCIsXCJlYXNlLW91dC1iYWNrXCI6XCJjdWJpYy1iZXppZXIoMC4xNzUsIDAuODg1LCAwLjMyMCwgMSlcIixcImVhc2UtaW4tb3V0LWJhY2tcIjpcImN1YmljLWJlemllcigwLjY4MCwgMCwgMC4yNjUsIDEpXCJ9LG89ZG9jdW1lbnQscD13aW5kb3cscT1cImJrd2xkLXRyYW1cIixyPS9bXFwtXFwuMC05XS9nLHM9L1tBLVpdLyx0PVwibnVtYmVyXCIsdT0vXihyZ2J8IykvLHY9LyhlbXxjbXxtbXxpbnxwdHxwY3xweCkkLyx3PS8oZW18Y218bW18aW58cHR8cGN8cHh8JSkkLyx4PS8oZGVnfHJhZHx0dXJuKSQvLHk9XCJ1bml0bGVzc1wiLHo9LyhhbGx8bm9uZSkgMHMgZWFzZSAwcy8sQT0vXih3aWR0aHxoZWlnaHQpJC8sQj1cIiBcIixDPW8uY3JlYXRlRWxlbWVudChcImFcIiksRD1bXCJXZWJraXRcIixcIk1velwiLFwiT1wiLFwibXNcIl0sRT1bXCItd2Via2l0LVwiLFwiLW1vei1cIixcIi1vLVwiLFwiLW1zLVwiXSxGPWZ1bmN0aW9uKGEpe2lmKGEgaW4gQy5zdHlsZSlyZXR1cm57ZG9tOmEsY3NzOmF9O3ZhciBiLGMsZD1cIlwiLGU9YS5zcGxpdChcIi1cIik7Zm9yKGI9MDtiPGUubGVuZ3RoO2IrKylkKz1lW2JdLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2VbYl0uc2xpY2UoMSk7Zm9yKGI9MDtiPEQubGVuZ3RoO2IrKylpZihjPURbYl0rZCxjIGluIEMuc3R5bGUpcmV0dXJue2RvbTpjLGNzczpFW2JdK2F9fSxHPWIuc3VwcG9ydD17YmluZDpGdW5jdGlvbi5wcm90b3R5cGUuYmluZCx0cmFuc2Zvcm06RihcInRyYW5zZm9ybVwiKSx0cmFuc2l0aW9uOkYoXCJ0cmFuc2l0aW9uXCIpLGJhY2tmYWNlOkYoXCJiYWNrZmFjZS12aXNpYmlsaXR5XCIpLHRpbWluZzpGKFwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb25cIil9O2lmKEcudHJhbnNpdGlvbil7dmFyIEg9Ry50aW1pbmcuZG9tO2lmKEMuc3R5bGVbSF09bVtcImVhc2UtaW4tYmFja1wiXVswXSwhQy5zdHlsZVtIXSlmb3IodmFyIEkgaW4gbiltW0ldWzBdPW5bSV19dmFyIEo9Yi5mcmFtZT1mdW5jdGlvbigpe3ZhciBhPXAucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxwLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8cC5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHAub1JlcXVlc3RBbmltYXRpb25GcmFtZXx8cC5tc1JlcXVlc3RBbmltYXRpb25GcmFtZTtyZXR1cm4gYSYmRy5iaW5kP2EuYmluZChwKTpmdW5jdGlvbihhKXtwLnNldFRpbWVvdXQoYSwxNil9fSgpLEs9Yi5ub3c9ZnVuY3Rpb24oKXt2YXIgYT1wLnBlcmZvcm1hbmNlLGI9YSYmKGEubm93fHxhLndlYmtpdE5vd3x8YS5tc05vd3x8YS5tb3pOb3cpO3JldHVybiBiJiZHLmJpbmQ/Yi5iaW5kKGEpOkRhdGUubm93fHxmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX19KCksTD1sKGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGQoYSxiKXt2YXIgYz1rKChcIlwiK2EpLnNwbGl0KEIpKSxkPWNbMF07Yj1ifHx7fTt2YXIgZT1ZW2RdO2lmKCFlKXJldHVybiBqKFwiVW5zdXBwb3J0ZWQgcHJvcGVydHk6IFwiK2QpO2lmKCFiLndlYWt8fCF0aGlzLnByb3BzW2RdKXt2YXIgZj1lWzBdLGc9dGhpcy5wcm9wc1tkXTtyZXR1cm4gZ3x8KGc9dGhpcy5wcm9wc1tkXT1uZXcgZi5CYXJlKSxnLmluaXQodGhpcy4kZWwsYyxlLGIpLGd9fWZ1bmN0aW9uIGUoYSxiLGMpe2lmKGEpe3ZhciBlPXR5cGVvZiBhO2lmKGJ8fCh0aGlzLnRpbWVyJiZ0aGlzLnRpbWVyLmRlc3Ryb3koKSx0aGlzLnF1ZXVlPVtdLHRoaXMuYWN0aXZlPSExKSxcIm51bWJlclwiPT1lJiZiKXJldHVybiB0aGlzLnRpbWVyPW5ldyBTKHtkdXJhdGlvbjphLGNvbnRleHQ6dGhpcyxjb21wbGV0ZTpofSksdm9pZCh0aGlzLmFjdGl2ZT0hMCk7aWYoXCJzdHJpbmdcIj09ZSYmYil7c3dpdGNoKGEpe2Nhc2VcImhpZGVcIjpvLmNhbGwodGhpcyk7YnJlYWs7Y2FzZVwic3RvcFwiOmwuY2FsbCh0aGlzKTticmVhaztjYXNlXCJyZWRyYXdcIjpwLmNhbGwodGhpcyk7YnJlYWs7ZGVmYXVsdDpkLmNhbGwodGhpcyxhLGMmJmNbMV0pfXJldHVybiBoLmNhbGwodGhpcyl9aWYoXCJmdW5jdGlvblwiPT1lKXJldHVybiB2b2lkIGEuY2FsbCh0aGlzLHRoaXMpO2lmKFwib2JqZWN0XCI9PWUpe3ZhciBmPTA7dS5jYWxsKHRoaXMsYSxmdW5jdGlvbihhLGIpe2Euc3Bhbj5mJiYoZj1hLnNwYW4pLGEuc3RvcCgpLGEuYW5pbWF0ZShiKX0sZnVuY3Rpb24oYSl7XCJ3YWl0XCJpbiBhJiYoZj1pKGEud2FpdCwwKSl9KSx0LmNhbGwodGhpcyksZj4wJiYodGhpcy50aW1lcj1uZXcgUyh7ZHVyYXRpb246Zixjb250ZXh0OnRoaXN9KSx0aGlzLmFjdGl2ZT0hMCxiJiYodGhpcy50aW1lci5jb21wbGV0ZT1oKSk7dmFyIGc9dGhpcyxqPSExLGs9e307SihmdW5jdGlvbigpe3UuY2FsbChnLGEsZnVuY3Rpb24oYSl7YS5hY3RpdmUmJihqPSEwLGtbYS5uYW1lXT1hLm5leHRTdHlsZSl9KSxqJiZnLiRlbC5jc3Moayl9KX19fWZ1bmN0aW9uIGYoYSl7YT1pKGEsMCksdGhpcy5hY3RpdmU/dGhpcy5xdWV1ZS5wdXNoKHtvcHRpb25zOmF9KToodGhpcy50aW1lcj1uZXcgUyh7ZHVyYXRpb246YSxjb250ZXh0OnRoaXMsY29tcGxldGU6aH0pLHRoaXMuYWN0aXZlPSEwKX1mdW5jdGlvbiBnKGEpe3JldHVybiB0aGlzLmFjdGl2ZT8odGhpcy5xdWV1ZS5wdXNoKHtvcHRpb25zOmEsYXJnczphcmd1bWVudHN9KSx2b2lkKHRoaXMudGltZXIuY29tcGxldGU9aCkpOmooXCJObyBhY3RpdmUgdHJhbnNpdGlvbiB0aW1lci4gVXNlIHN0YXJ0KCkgb3Igd2FpdCgpIGJlZm9yZSB0aGVuKCkuXCIpfWZ1bmN0aW9uIGgoKXtpZih0aGlzLnRpbWVyJiZ0aGlzLnRpbWVyLmRlc3Ryb3koKSx0aGlzLmFjdGl2ZT0hMSx0aGlzLnF1ZXVlLmxlbmd0aCl7dmFyIGE9dGhpcy5xdWV1ZS5zaGlmdCgpO2UuY2FsbCh0aGlzLGEub3B0aW9ucywhMCxhLmFyZ3MpfX1mdW5jdGlvbiBsKGEpe3RoaXMudGltZXImJnRoaXMudGltZXIuZGVzdHJveSgpLHRoaXMucXVldWU9W10sdGhpcy5hY3RpdmU9ITE7dmFyIGI7XCJzdHJpbmdcIj09dHlwZW9mIGE/KGI9e30sYlthXT0xKTpiPVwib2JqZWN0XCI9PXR5cGVvZiBhJiZudWxsIT1hP2E6dGhpcy5wcm9wcyx1LmNhbGwodGhpcyxiLHYpLHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBtKGEpe2wuY2FsbCh0aGlzLGEpLHUuY2FsbCh0aGlzLGEsdyx4KX1mdW5jdGlvbiBuKGEpe1wic3RyaW5nXCIhPXR5cGVvZiBhJiYoYT1cImJsb2NrXCIpLHRoaXMuZWwuc3R5bGUuZGlzcGxheT1hfWZ1bmN0aW9uIG8oKXtsLmNhbGwodGhpcyksdGhpcy5lbC5zdHlsZS5kaXNwbGF5PVwibm9uZVwifWZ1bmN0aW9uIHAoKXt0aGlzLmVsLm9mZnNldEhlaWdodH1mdW5jdGlvbiByKCl7bC5jYWxsKHRoaXMpLGEucmVtb3ZlRGF0YSh0aGlzLmVsLHEpLHRoaXMuJGVsPXRoaXMuZWw9bnVsbH1mdW5jdGlvbiB0KCl7dmFyIGEsYixjPVtdO3RoaXMudXBzdHJlYW0mJmMucHVzaCh0aGlzLnVwc3RyZWFtKTtmb3IoYSBpbiB0aGlzLnByb3BzKWI9dGhpcy5wcm9wc1thXSxiLmFjdGl2ZSYmYy5wdXNoKGIuc3RyaW5nKTtjPWMuam9pbihcIixcIiksdGhpcy5zdHlsZSE9PWMmJih0aGlzLnN0eWxlPWMsdGhpcy5lbC5zdHlsZVtHLnRyYW5zaXRpb24uZG9tXT1jKX1mdW5jdGlvbiB1KGEsYixlKXt2YXIgZixnLGgsaSxqPWIhPT12LGs9e307Zm9yKGYgaW4gYSloPWFbZl0sZiBpbiBaPyhrLnRyYW5zZm9ybXx8KGsudHJhbnNmb3JtPXt9KSxrLnRyYW5zZm9ybVtmXT1oKToocy50ZXN0KGYpJiYoZj1jKGYpKSxmIGluIFk/a1tmXT1oOihpfHwoaT17fSksaVtmXT1oKSk7Zm9yKGYgaW4gayl7aWYoaD1rW2ZdLGc9dGhpcy5wcm9wc1tmXSwhZyl7aWYoIWopY29udGludWU7Zz1kLmNhbGwodGhpcyxmKX1iLmNhbGwodGhpcyxnLGgpfWUmJmkmJmUuY2FsbCh0aGlzLGkpfWZ1bmN0aW9uIHYoYSl7YS5zdG9wKCl9ZnVuY3Rpb24gdyhhLGIpe2Euc2V0KGIpfWZ1bmN0aW9uIHgoYSl7dGhpcy4kZWwuY3NzKGEpfWZ1bmN0aW9uIHkoYSxjKXtiW2FdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4/QS5jYWxsKHRoaXMsYyxhcmd1bWVudHMpOih0aGlzLmVsJiZjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzKX19ZnVuY3Rpb24gQShhLGIpe3ZhciBjLGQ9dGhpcy5jaGlsZHJlbi5sZW5ndGg7Zm9yKGM9MDtkPmM7YysrKWEuYXBwbHkodGhpcy5jaGlsZHJlbltjXSxiKTtyZXR1cm4gdGhpc31iLmluaXQ9ZnVuY3Rpb24oYil7aWYodGhpcy4kZWw9YShiKSx0aGlzLmVsPXRoaXMuJGVsWzBdLHRoaXMucHJvcHM9e30sdGhpcy5xdWV1ZT1bXSx0aGlzLnN0eWxlPVwiXCIsdGhpcy5hY3RpdmU9ITEsVS5rZWVwSW5oZXJpdGVkJiYhVS5mYWxsYmFjayl7dmFyIGM9Vyh0aGlzLmVsLFwidHJhbnNpdGlvblwiKTtjJiYhei50ZXN0KGMpJiYodGhpcy51cHN0cmVhbT1jKX1HLmJhY2tmYWNlJiZVLmhpZGVCYWNrZmFjZSYmVih0aGlzLmVsLEcuYmFja2ZhY2UuY3NzLFwiaGlkZGVuXCIpfSx5KFwiYWRkXCIsZCkseShcInN0YXJ0XCIsZSkseShcIndhaXRcIixmKSx5KFwidGhlblwiLGcpLHkoXCJuZXh0XCIsaCkseShcInN0b3BcIixsKSx5KFwic2V0XCIsbSkseShcInNob3dcIixuKSx5KFwiaGlkZVwiLG8pLHkoXCJyZWRyYXdcIixwKSx5KFwiZGVzdHJveVwiLHIpfSksTT1sKEwsZnVuY3Rpb24oYil7ZnVuY3Rpb24gYyhiLGMpe3ZhciBkPWEuZGF0YShiLHEpfHxhLmRhdGEoYixxLG5ldyBMLkJhcmUpO3JldHVybiBkLmVsfHxkLmluaXQoYiksYz9kLnN0YXJ0KGMpOmR9Yi5pbml0PWZ1bmN0aW9uKGIsZCl7dmFyIGU9YShiKTtpZighZS5sZW5ndGgpcmV0dXJuIHRoaXM7aWYoMT09PWUubGVuZ3RoKXJldHVybiBjKGVbMF0sZCk7dmFyIGY9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihhLGIpe2YucHVzaChjKGIsZCkpfSksdGhpcy5jaGlsZHJlbj1mLHRoaXN9fSksTj1sKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYT10aGlzLmdldCgpO3RoaXMudXBkYXRlKFwiYXV0b1wiKTt2YXIgYj10aGlzLmdldCgpO3JldHVybiB0aGlzLnVwZGF0ZShhKSxifWZ1bmN0aW9uIGMoYSxiLGMpe3JldHVybiB2b2lkIDAhPT1iJiYoYz1iKSxhIGluIG0/YTpjfWZ1bmN0aW9uIGQoYSl7dmFyIGI9L3JnYmE/XFwoKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKS8uZXhlYyhhKTtyZXR1cm4gKGI/ZShiWzFdLGJbMl0sYlszXSk6YSkucmVwbGFjZSgvIyhcXHcpKFxcdykoXFx3KSQvLFwiIyQxJDEkMiQyJDMkM1wiKTt9dmFyIGY9e2R1cmF0aW9uOjUwMCxlYXNlOlwiZWFzZVwiLGRlbGF5OjB9O2EuaW5pdD1mdW5jdGlvbihhLGIsZCxlKXt0aGlzLiRlbD1hLHRoaXMuZWw9YVswXTt2YXIgZz1iWzBdO2RbMl0mJihnPWRbMl0pLFhbZ10mJihnPVhbZ10pLHRoaXMubmFtZT1nLHRoaXMudHlwZT1kWzFdLHRoaXMuZHVyYXRpb249aShiWzFdLHRoaXMuZHVyYXRpb24sZi5kdXJhdGlvbiksdGhpcy5lYXNlPWMoYlsyXSx0aGlzLmVhc2UsZi5lYXNlKSx0aGlzLmRlbGF5PWkoYlszXSx0aGlzLmRlbGF5LGYuZGVsYXkpLHRoaXMuc3Bhbj10aGlzLmR1cmF0aW9uK3RoaXMuZGVsYXksdGhpcy5hY3RpdmU9ITEsdGhpcy5uZXh0U3R5bGU9bnVsbCx0aGlzLmF1dG89QS50ZXN0KHRoaXMubmFtZSksdGhpcy51bml0PWUudW5pdHx8dGhpcy51bml0fHxVLmRlZmF1bHRVbml0LHRoaXMuYW5nbGU9ZS5hbmdsZXx8dGhpcy5hbmdsZXx8VS5kZWZhdWx0QW5nbGUsVS5mYWxsYmFja3x8ZS5mYWxsYmFjaz90aGlzLmFuaW1hdGU9dGhpcy5mYWxsYmFjazoodGhpcy5hbmltYXRlPXRoaXMudHJhbnNpdGlvbix0aGlzLnN0cmluZz10aGlzLm5hbWUrQit0aGlzLmR1cmF0aW9uK1wibXNcIisoXCJlYXNlXCIhPXRoaXMuZWFzZT9CK21bdGhpcy5lYXNlXVswXTpcIlwiKSsodGhpcy5kZWxheT9CK3RoaXMuZGVsYXkrXCJtc1wiOlwiXCIpKX0sYS5zZXQ9ZnVuY3Rpb24oYSl7YT10aGlzLmNvbnZlcnQoYSx0aGlzLnR5cGUpLHRoaXMudXBkYXRlKGEpLHRoaXMucmVkcmF3KCl9LGEudHJhbnNpdGlvbj1mdW5jdGlvbihhKXt0aGlzLmFjdGl2ZT0hMCxhPXRoaXMuY29udmVydChhLHRoaXMudHlwZSksdGhpcy5hdXRvJiYoXCJhdXRvXCI9PXRoaXMuZWwuc3R5bGVbdGhpcy5uYW1lXSYmKHRoaXMudXBkYXRlKHRoaXMuZ2V0KCkpLHRoaXMucmVkcmF3KCkpLFwiYXV0b1wiPT1hJiYoYT1iLmNhbGwodGhpcykpKSx0aGlzLm5leHRTdHlsZT1hfSxhLmZhbGxiYWNrPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuZWwuc3R5bGVbdGhpcy5uYW1lXXx8dGhpcy5jb252ZXJ0KHRoaXMuZ2V0KCksdGhpcy50eXBlKTthPXRoaXMuY29udmVydChhLHRoaXMudHlwZSksdGhpcy5hdXRvJiYoXCJhdXRvXCI9PWMmJihjPXRoaXMuY29udmVydCh0aGlzLmdldCgpLHRoaXMudHlwZSkpLFwiYXV0b1wiPT1hJiYoYT1iLmNhbGwodGhpcykpKSx0aGlzLnR3ZWVuPW5ldyBSKHtmcm9tOmMsdG86YSxkdXJhdGlvbjp0aGlzLmR1cmF0aW9uLGRlbGF5OnRoaXMuZGVsYXksZWFzZTp0aGlzLmVhc2UsdXBkYXRlOnRoaXMudXBkYXRlLGNvbnRleHQ6dGhpc30pfSxhLmdldD1mdW5jdGlvbigpe3JldHVybiBXKHRoaXMuZWwsdGhpcy5uYW1lKX0sYS51cGRhdGU9ZnVuY3Rpb24oYSl7Vih0aGlzLmVsLHRoaXMubmFtZSxhKX0sYS5zdG9wPWZ1bmN0aW9uKCl7KHRoaXMuYWN0aXZlfHx0aGlzLm5leHRTdHlsZSkmJih0aGlzLmFjdGl2ZT0hMSx0aGlzLm5leHRTdHlsZT1udWxsLFYodGhpcy5lbCx0aGlzLm5hbWUsdGhpcy5nZXQoKSkpO3ZhciBhPXRoaXMudHdlZW47YSYmYS5jb250ZXh0JiZhLmRlc3Ryb3koKX0sYS5jb252ZXJ0PWZ1bmN0aW9uKGEsYil7aWYoXCJhdXRvXCI9PWEmJnRoaXMuYXV0bylyZXR1cm4gYTt2YXIgYyxlPVwibnVtYmVyXCI9PXR5cGVvZiBhLGY9XCJzdHJpbmdcIj09dHlwZW9mIGE7c3dpdGNoKGIpe2Nhc2UgdDppZihlKXJldHVybiBhO2lmKGYmJlwiXCI9PT1hLnJlcGxhY2UocixcIlwiKSlyZXR1cm4rYTtjPVwibnVtYmVyKHVuaXRsZXNzKVwiO2JyZWFrO2Nhc2UgdTppZihmKXtpZihcIlwiPT09YSYmdGhpcy5vcmlnaW5hbClyZXR1cm4gdGhpcy5vcmlnaW5hbDtpZihiLnRlc3QoYSkpcmV0dXJuXCIjXCI9PWEuY2hhckF0KDApJiY3PT1hLmxlbmd0aD9hOmQoYSl9Yz1cImhleCBvciByZ2Igc3RyaW5nXCI7YnJlYWs7Y2FzZSB2OmlmKGUpcmV0dXJuIGErdGhpcy51bml0O2lmKGYmJmIudGVzdChhKSlyZXR1cm4gYTtjPVwibnVtYmVyKHB4KSBvciBzdHJpbmcodW5pdClcIjticmVhaztjYXNlIHc6aWYoZSlyZXR1cm4gYSt0aGlzLnVuaXQ7aWYoZiYmYi50ZXN0KGEpKXJldHVybiBhO2M9XCJudW1iZXIocHgpIG9yIHN0cmluZyh1bml0IG9yICUpXCI7YnJlYWs7Y2FzZSB4OmlmKGUpcmV0dXJuIGErdGhpcy5hbmdsZTtpZihmJiZiLnRlc3QoYSkpcmV0dXJuIGE7Yz1cIm51bWJlcihkZWcpIG9yIHN0cmluZyhhbmdsZSlcIjticmVhaztjYXNlIHk6aWYoZSlyZXR1cm4gYTtpZihmJiZ3LnRlc3QoYSkpcmV0dXJuIGE7Yz1cIm51bWJlcih1bml0bGVzcykgb3Igc3RyaW5nKHVuaXQgb3IgJSlcIn1yZXR1cm4gZyhjLGEpLGF9LGEucmVkcmF3PWZ1bmN0aW9uKCl7dGhpcy5lbC5vZmZzZXRIZWlnaHR9fSksTz1sKE4sZnVuY3Rpb24oYSxiKXthLmluaXQ9ZnVuY3Rpb24oKXtiLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMub3JpZ2luYWx8fCh0aGlzLm9yaWdpbmFsPXRoaXMuY29udmVydCh0aGlzLmdldCgpLHUpKX19KSxQPWwoTixmdW5jdGlvbihhLGIpe2EuaW5pdD1mdW5jdGlvbigpe2IuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5hbmltYXRlPXRoaXMuZmFsbGJhY2t9LGEuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGVsW3RoaXMubmFtZV0oKX0sYS51cGRhdGU9ZnVuY3Rpb24oYSl7dGhpcy4kZWxbdGhpcy5uYW1lXShhKX19KSxRPWwoTixmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXt2YXIgYyxkLGUsZixnO2ZvcihjIGluIGEpZj1aW2NdLGU9ZlswXSxkPWZbMV18fGMsZz10aGlzLmNvbnZlcnQoYVtjXSxlKSxiLmNhbGwodGhpcyxkLGcsZSl9YS5pbml0PWZ1bmN0aW9uKCl7Yi5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLmN1cnJlbnR8fCh0aGlzLmN1cnJlbnQ9e30sWi5wZXJzcGVjdGl2ZSYmVS5wZXJzcGVjdGl2ZSYmKHRoaXMuY3VycmVudC5wZXJzcGVjdGl2ZT1VLnBlcnNwZWN0aXZlLFYodGhpcy5lbCx0aGlzLm5hbWUsdGhpcy5zdHlsZSh0aGlzLmN1cnJlbnQpKSx0aGlzLnJlZHJhdygpKSl9LGEuc2V0PWZ1bmN0aW9uKGEpe2MuY2FsbCh0aGlzLGEsZnVuY3Rpb24oYSxiKXt0aGlzLmN1cnJlbnRbYV09Yn0pLFYodGhpcy5lbCx0aGlzLm5hbWUsdGhpcy5zdHlsZSh0aGlzLmN1cnJlbnQpKSx0aGlzLnJlZHJhdygpfSxhLnRyYW5zaXRpb249ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy52YWx1ZXMoYSk7dGhpcy50d2Vlbj1uZXcgVCh7Y3VycmVudDp0aGlzLmN1cnJlbnQsdmFsdWVzOmIsZHVyYXRpb246dGhpcy5kdXJhdGlvbixkZWxheTp0aGlzLmRlbGF5LGVhc2U6dGhpcy5lYXNlfSk7dmFyIGMsZD17fTtmb3IoYyBpbiB0aGlzLmN1cnJlbnQpZFtjXT1jIGluIGI/YltjXTp0aGlzLmN1cnJlbnRbY107dGhpcy5hY3RpdmU9ITAsdGhpcy5uZXh0U3R5bGU9dGhpcy5zdHlsZShkKX0sYS5mYWxsYmFjaz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnZhbHVlcyhhKTt0aGlzLnR3ZWVuPW5ldyBUKHtjdXJyZW50OnRoaXMuY3VycmVudCx2YWx1ZXM6YixkdXJhdGlvbjp0aGlzLmR1cmF0aW9uLGRlbGF5OnRoaXMuZGVsYXksZWFzZTp0aGlzLmVhc2UsdXBkYXRlOnRoaXMudXBkYXRlLGNvbnRleHQ6dGhpc30pfSxhLnVwZGF0ZT1mdW5jdGlvbigpe1YodGhpcy5lbCx0aGlzLm5hbWUsdGhpcy5zdHlsZSh0aGlzLmN1cnJlbnQpKX0sYS5zdHlsZT1mdW5jdGlvbihhKXt2YXIgYixjPVwiXCI7Zm9yKGIgaW4gYSljKz1iK1wiKFwiK2FbYl0rXCIpIFwiO3JldHVybiBjfSxhLnZhbHVlcz1mdW5jdGlvbihhKXt2YXIgYixkPXt9O3JldHVybiBjLmNhbGwodGhpcyxhLGZ1bmN0aW9uKGEsYyxlKXtkW2FdPWMsdm9pZCAwPT09dGhpcy5jdXJyZW50W2FdJiYoYj0wLH5hLmluZGV4T2YoXCJzY2FsZVwiKSYmKGI9MSksdGhpcy5jdXJyZW50W2FdPXRoaXMuY29udmVydChiLGUpKX0pLGR9fSksUj1sKGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoYSl7MT09PW4ucHVzaChhKSYmSihnKX1mdW5jdGlvbiBnKCl7dmFyIGEsYixjLGQ9bi5sZW5ndGg7aWYoZClmb3IoSihnKSxiPUsoKSxhPWQ7YS0tOyljPW5bYV0sYyYmYy5yZW5kZXIoYil9ZnVuY3Rpb24gaShiKXt2YXIgYyxkPWEuaW5BcnJheShiLG4pO2Q+PTAmJihjPW4uc2xpY2UoZCsxKSxuLmxlbmd0aD1kLGMubGVuZ3RoJiYobj1uLmNvbmNhdChjKSkpfWZ1bmN0aW9uIGooYSl7cmV0dXJuIE1hdGgucm91bmQoYSpvKS9vfWZ1bmN0aW9uIGsoYSxiLGMpe3JldHVybiBlKGFbMF0rYyooYlswXS1hWzBdKSxhWzFdK2MqKGJbMV0tYVsxXSksYVsyXStjKihiWzJdLWFbMl0pKX12YXIgbD17ZWFzZTptLmVhc2VbMV0sZnJvbTowLHRvOjF9O2IuaW5pdD1mdW5jdGlvbihhKXt0aGlzLmR1cmF0aW9uPWEuZHVyYXRpb258fDAsdGhpcy5kZWxheT1hLmRlbGF5fHwwO3ZhciBiPWEuZWFzZXx8bC5lYXNlO21bYl0mJihiPW1bYl1bMV0pLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGImJihiPWwuZWFzZSksdGhpcy5lYXNlPWIsdGhpcy51cGRhdGU9YS51cGRhdGV8fGYsdGhpcy5jb21wbGV0ZT1hLmNvbXBsZXRlfHxmLHRoaXMuY29udGV4dD1hLmNvbnRleHR8fHRoaXMsdGhpcy5uYW1lPWEubmFtZTt2YXIgYz1hLmZyb20sZD1hLnRvO3ZvaWQgMD09PWMmJihjPWwuZnJvbSksdm9pZCAwPT09ZCYmKGQ9bC50byksdGhpcy51bml0PWEudW5pdHx8XCJcIixcIm51bWJlclwiPT10eXBlb2YgYyYmXCJudW1iZXJcIj09dHlwZW9mIGQ/KHRoaXMuYmVnaW49Yyx0aGlzLmNoYW5nZT1kLWMpOnRoaXMuZm9ybWF0KGQsYyksdGhpcy52YWx1ZT10aGlzLmJlZ2luK3RoaXMudW5pdCx0aGlzLnN0YXJ0PUsoKSxhLmF1dG9wbGF5IT09ITEmJnRoaXMucGxheSgpfSxiLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZXx8KHRoaXMuc3RhcnR8fCh0aGlzLnN0YXJ0PUsoKSksdGhpcy5hY3RpdmU9ITAsYyh0aGlzKSl9LGIuc3RvcD1mdW5jdGlvbigpe3RoaXMuYWN0aXZlJiYodGhpcy5hY3RpdmU9ITEsaSh0aGlzKSl9LGIucmVuZGVyPWZ1bmN0aW9uKGEpe3ZhciBiLGM9YS10aGlzLnN0YXJ0O2lmKHRoaXMuZGVsYXkpe2lmKGM8PXRoaXMuZGVsYXkpcmV0dXJuO2MtPXRoaXMuZGVsYXl9aWYoYzx0aGlzLmR1cmF0aW9uKXt2YXIgZD10aGlzLmVhc2UoYywwLDEsdGhpcy5kdXJhdGlvbik7cmV0dXJuIGI9dGhpcy5zdGFydFJHQj9rKHRoaXMuc3RhcnRSR0IsdGhpcy5lbmRSR0IsZCk6aih0aGlzLmJlZ2luK2QqdGhpcy5jaGFuZ2UpLHRoaXMudmFsdWU9Yit0aGlzLnVuaXQsdm9pZCB0aGlzLnVwZGF0ZS5jYWxsKHRoaXMuY29udGV4dCx0aGlzLnZhbHVlKX1iPXRoaXMuZW5kSGV4fHx0aGlzLmJlZ2luK3RoaXMuY2hhbmdlLHRoaXMudmFsdWU9Yit0aGlzLnVuaXQsdGhpcy51cGRhdGUuY2FsbCh0aGlzLmNvbnRleHQsdGhpcy52YWx1ZSksdGhpcy5jb21wbGV0ZS5jYWxsKHRoaXMuY29udGV4dCksdGhpcy5kZXN0cm95KCl9LGIuZm9ybWF0PWZ1bmN0aW9uKGEsYil7aWYoYis9XCJcIixhKz1cIlwiLFwiI1wiPT1hLmNoYXJBdCgwKSlyZXR1cm4gdGhpcy5zdGFydFJHQj1kKGIpLHRoaXMuZW5kUkdCPWQoYSksdGhpcy5lbmRIZXg9YSx0aGlzLmJlZ2luPTAsdm9pZCh0aGlzLmNoYW5nZT0xKTtpZighdGhpcy51bml0KXt2YXIgYz1iLnJlcGxhY2UocixcIlwiKSxlPWEucmVwbGFjZShyLFwiXCIpO2MhPT1lJiZoKFwidHdlZW5cIixiLGEpLHRoaXMudW5pdD1jfWI9cGFyc2VGbG9hdChiKSxhPXBhcnNlRmxvYXQoYSksdGhpcy5iZWdpbj10aGlzLnZhbHVlPWIsdGhpcy5jaGFuZ2U9YS1ifSxiLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnN0b3AoKSx0aGlzLmNvbnRleHQ9bnVsbCx0aGlzLmVhc2U9dGhpcy51cGRhdGU9dGhpcy5jb21wbGV0ZT1mfTt2YXIgbj1bXSxvPTFlM30pLFM9bChSLGZ1bmN0aW9uKGEpe2EuaW5pdD1mdW5jdGlvbihhKXt0aGlzLmR1cmF0aW9uPWEuZHVyYXRpb258fDAsdGhpcy5jb21wbGV0ZT1hLmNvbXBsZXRlfHxmLHRoaXMuY29udGV4dD1hLmNvbnRleHQsdGhpcy5wbGF5KCl9LGEucmVuZGVyPWZ1bmN0aW9uKGEpe3ZhciBiPWEtdGhpcy5zdGFydDtiPHRoaXMuZHVyYXRpb258fCh0aGlzLmNvbXBsZXRlLmNhbGwodGhpcy5jb250ZXh0KSx0aGlzLmRlc3Ryb3koKSl9fSksVD1sKFIsZnVuY3Rpb24oYSxiKXthLmluaXQ9ZnVuY3Rpb24oYSl7dGhpcy5jb250ZXh0PWEuY29udGV4dCx0aGlzLnVwZGF0ZT1hLnVwZGF0ZSx0aGlzLnR3ZWVucz1bXSx0aGlzLmN1cnJlbnQ9YS5jdXJyZW50O3ZhciBiLGM7Zm9yKGIgaW4gYS52YWx1ZXMpYz1hLnZhbHVlc1tiXSx0aGlzLmN1cnJlbnRbYl0hPT1jJiZ0aGlzLnR3ZWVucy5wdXNoKG5ldyBSKHtuYW1lOmIsZnJvbTp0aGlzLmN1cnJlbnRbYl0sdG86YyxkdXJhdGlvbjphLmR1cmF0aW9uLGRlbGF5OmEuZGVsYXksZWFzZTphLmVhc2UsYXV0b3BsYXk6ITF9KSk7dGhpcy5wbGF5KCl9LGEucmVuZGVyPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD10aGlzLnR3ZWVucy5sZW5ndGgsZT0hMTtmb3IoYj1kO2ItLTspYz10aGlzLnR3ZWVuc1tiXSxjLmNvbnRleHQmJihjLnJlbmRlcihhKSx0aGlzLmN1cnJlbnRbYy5uYW1lXT1jLnZhbHVlLGU9ITApO3JldHVybiBlP3ZvaWQodGhpcy51cGRhdGUmJnRoaXMudXBkYXRlLmNhbGwodGhpcy5jb250ZXh0KSk6dGhpcy5kZXN0cm95KCl9LGEuZGVzdHJveT1mdW5jdGlvbigpe2lmKGIuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMudHdlZW5zKXt2YXIgYSxjPXRoaXMudHdlZW5zLmxlbmd0aDtmb3IoYT1jO2EtLTspdGhpcy50d2VlbnNbYV0uZGVzdHJveSgpO3RoaXMudHdlZW5zPW51bGwsdGhpcy5jdXJyZW50PW51bGx9fX0pLFU9Yi5jb25maWc9e2RlYnVnOiExLGRlZmF1bHRVbml0OlwicHhcIixkZWZhdWx0QW5nbGU6XCJkZWdcIixrZWVwSW5oZXJpdGVkOiExLGhpZGVCYWNrZmFjZTohMSxwZXJzcGVjdGl2ZTpcIlwiLGZhbGxiYWNrOiFHLnRyYW5zaXRpb24sYWdlbnRUZXN0czpbXX07Yi5mYWxsYmFjaz1mdW5jdGlvbihhKXtpZighRy50cmFuc2l0aW9uKXJldHVybiBVLmZhbGxiYWNrPSEwO1UuYWdlbnRUZXN0cy5wdXNoKFwiKFwiK2ErXCIpXCIpO3ZhciBiPW5ldyBSZWdFeHAoVS5hZ2VudFRlc3RzLmpvaW4oXCJ8XCIpLFwiaVwiKTtVLmZhbGxiYWNrPWIudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KX0sYi5mYWxsYmFjayhcIjYuMC5bMi01XSBTYWZhcmlcIiksYi50d2Vlbj1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IFIoYSl9LGIuZGVsYXk9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuZXcgUyh7Y29tcGxldGU6YixkdXJhdGlvbjphLGNvbnRleHQ6Y30pfSxhLmZuLnRyYW09ZnVuY3Rpb24oYSl7cmV0dXJuIGIuY2FsbChudWxsLHRoaXMsYSl9O3ZhciBWPWEuc3R5bGUsVz1hLmNzcyxYPXt0cmFuc2Zvcm06Ry50cmFuc2Zvcm0mJkcudHJhbnNmb3JtLmNzc30sWT17Y29sb3I6W08sdV0sYmFja2dyb3VuZDpbTyx1LFwiYmFja2dyb3VuZC1jb2xvclwiXSxcIm91dGxpbmUtY29sb3JcIjpbTyx1XSxcImJvcmRlci1jb2xvclwiOltPLHVdLFwiYm9yZGVyLXRvcC1jb2xvclwiOltPLHVdLFwiYm9yZGVyLXJpZ2h0LWNvbG9yXCI6W08sdV0sXCJib3JkZXItYm90dG9tLWNvbG9yXCI6W08sdV0sXCJib3JkZXItbGVmdC1jb2xvclwiOltPLHVdLFwiYm9yZGVyLXdpZHRoXCI6W04sdl0sXCJib3JkZXItdG9wLXdpZHRoXCI6W04sdl0sXCJib3JkZXItcmlnaHQtd2lkdGhcIjpbTix2XSxcImJvcmRlci1ib3R0b20td2lkdGhcIjpbTix2XSxcImJvcmRlci1sZWZ0LXdpZHRoXCI6W04sdl0sXCJib3JkZXItc3BhY2luZ1wiOltOLHZdLFwibGV0dGVyLXNwYWNpbmdcIjpbTix2XSxtYXJnaW46W04sdl0sXCJtYXJnaW4tdG9wXCI6W04sdl0sXCJtYXJnaW4tcmlnaHRcIjpbTix2XSxcIm1hcmdpbi1ib3R0b21cIjpbTix2XSxcIm1hcmdpbi1sZWZ0XCI6W04sdl0scGFkZGluZzpbTix2XSxcInBhZGRpbmctdG9wXCI6W04sdl0sXCJwYWRkaW5nLXJpZ2h0XCI6W04sdl0sXCJwYWRkaW5nLWJvdHRvbVwiOltOLHZdLFwicGFkZGluZy1sZWZ0XCI6W04sdl0sXCJvdXRsaW5lLXdpZHRoXCI6W04sdl0sb3BhY2l0eTpbTix0XSx0b3A6W04sd10scmlnaHQ6W04sd10sYm90dG9tOltOLHddLGxlZnQ6W04sd10sXCJmb250LXNpemVcIjpbTix3XSxcInRleHQtaW5kZW50XCI6W04sd10sXCJ3b3JkLXNwYWNpbmdcIjpbTix3XSx3aWR0aDpbTix3XSxcIm1pbi13aWR0aFwiOltOLHddLFwibWF4LXdpZHRoXCI6W04sd10saGVpZ2h0OltOLHddLFwibWluLWhlaWdodFwiOltOLHddLFwibWF4LWhlaWdodFwiOltOLHddLFwibGluZS1oZWlnaHRcIjpbTix5XSxcInNjcm9sbC10b3BcIjpbUCx0LFwic2Nyb2xsVG9wXCJdLFwic2Nyb2xsLWxlZnRcIjpbUCx0LFwic2Nyb2xsTGVmdFwiXX0sWj17fTtHLnRyYW5zZm9ybSYmKFkudHJhbnNmb3JtPVtRXSxaPXt4Olt3LFwidHJhbnNsYXRlWFwiXSx5Olt3LFwidHJhbnNsYXRlWVwiXSxyb3RhdGU6W3hdLHJvdGF0ZVg6W3hdLHJvdGF0ZVk6W3hdLHNjYWxlOlt0XSxzY2FsZVg6W3RdLHNjYWxlWTpbdF0sc2tldzpbeF0sc2tld1g6W3hdLHNrZXdZOlt4XX0pLEcudHJhbnNmb3JtJiZHLmJhY2tmYWNlJiYoWi56PVt3LFwidHJhbnNsYXRlWlwiXSxaLnJvdGF0ZVo9W3hdLFouc2NhbGVaPVt0XSxaLnBlcnNwZWN0aXZlPVt2XSk7dmFyICQ9L21zLyxfPS9zfFxcLi87cmV0dXJuIGEudHJhbT1ifSh3aW5kb3cualF1ZXJ5KTtcbiJdLCJuYW1lcyI6WyJ3aW5kb3ciLCJ0cmFtIiwiYSIsImIiLCJjIiwiTSIsIkJhcmUiLCJpbml0IiwicmVwbGFjZSIsInRvTG93ZXJDYXNlIiwiZCIsInBhcnNlSW50Iiwic2xpY2UiLCJlIiwidG9TdHJpbmciLCJmIiwiZyIsImoiLCJoIiwiaSIsIiQiLCJ0ZXN0IiwiXyIsInBhcnNlRmxvYXQiLCJVIiwiZGVidWciLCJjb25zb2xlIiwid2FybiIsImsiLCJsZW5ndGgiLCJwdXNoIiwibCIsImFwcGx5IiwiYXJndW1lbnRzIiwiT2JqZWN0IiwibSIsIm4iLCJjb25zdHJ1Y3RvciIsIm1peGluIiwib3BlbiIsImNhbGwiLCJoYXNPd25Qcm9wZXJ0eSIsImVhc2UiLCJsaW5lYXIiLCJNYXRoIiwiY29zIiwiUEkiLCJzaW4iLCJwb3ciLCJzcXJ0IiwibyIsImRvY3VtZW50IiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJBIiwiQiIsIkMiLCJjcmVhdGVFbGVtZW50IiwiRCIsIkUiLCJGIiwic3R5bGUiLCJkb20iLCJjc3MiLCJzcGxpdCIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwiRyIsInN1cHBvcnQiLCJiaW5kIiwiRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2l0aW9uIiwiYmFja2ZhY2UiLCJ0aW1pbmciLCJIIiwiSSIsIkoiLCJmcmFtZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm1velJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtc1JlcXVlc3RBbmltYXRpb25GcmFtZSIsInNldFRpbWVvdXQiLCJLIiwibm93IiwicGVyZm9ybWFuY2UiLCJ3ZWJraXROb3ciLCJtc05vdyIsIm1vek5vdyIsIkRhdGUiLCJMIiwiWSIsIndlYWsiLCJwcm9wcyIsIiRlbCIsInRpbWVyIiwiZGVzdHJveSIsInF1ZXVlIiwiYWN0aXZlIiwiUyIsImR1cmF0aW9uIiwiY29udGV4dCIsImNvbXBsZXRlIiwic3BhbiIsInN0b3AiLCJhbmltYXRlIiwid2FpdCIsIm5hbWUiLCJuZXh0U3R5bGUiLCJvcHRpb25zIiwiYXJncyIsInNoaWZ0IiwiZWwiLCJkaXNwbGF5Iiwib2Zmc2V0SGVpZ2h0IiwicmVtb3ZlRGF0YSIsInVwc3RyZWFtIiwic3RyaW5nIiwiam9pbiIsIloiLCJzZXQiLCJjaGlsZHJlbiIsImtlZXBJbmhlcml0ZWQiLCJmYWxsYmFjayIsIlciLCJoaWRlQmFja2ZhY2UiLCJWIiwiZGF0YSIsInN0YXJ0IiwiZWFjaCIsIk4iLCJnZXQiLCJ1cGRhdGUiLCJleGVjIiwiZGVsYXkiLCJYIiwidHlwZSIsImF1dG8iLCJ1bml0IiwiZGVmYXVsdFVuaXQiLCJhbmdsZSIsImRlZmF1bHRBbmdsZSIsImNvbnZlcnQiLCJyZWRyYXciLCJ0d2VlbiIsIlIiLCJmcm9tIiwidG8iLCJvcmlnaW5hbCIsIk8iLCJQIiwiUSIsImN1cnJlbnQiLCJwZXJzcGVjdGl2ZSIsInZhbHVlcyIsIlQiLCJpbmRleE9mIiwicmVuZGVyIiwiaW5BcnJheSIsImNvbmNhdCIsInJvdW5kIiwiYmVnaW4iLCJjaGFuZ2UiLCJmb3JtYXQiLCJ2YWx1ZSIsImF1dG9wbGF5IiwicGxheSIsInN0YXJ0UkdCIiwiZW5kUkdCIiwiZW5kSGV4IiwidHdlZW5zIiwiY29uZmlnIiwiYWdlbnRUZXN0cyIsIlJlZ0V4cCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZuIiwiY29sb3IiLCJiYWNrZ3JvdW5kIiwibWFyZ2luIiwicGFkZGluZyIsIm9wYWNpdHkiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJ3aWR0aCIsImhlaWdodCIsInJvdGF0ZSIsInJvdGF0ZVgiLCJyb3RhdGVZIiwic2NhbGUiLCJzY2FsZVgiLCJzY2FsZVkiLCJza2V3Iiwic2tld1giLCJza2V3WSIsInJvdGF0ZVoiLCJzY2FsZVoiLCJqUXVlcnkiXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RCxHQUN2RCxrQkFBa0IsR0FDbEI7Ozs7O0NBS0MsR0FDRCxtQkFBbUI7QUFDbkJBLE9BQU9DLElBQUksR0FBQyxTQUFTQyxDQUFDO0lBQUUsU0FBU0MsRUFBRUQsQ0FBQyxFQUFDQyxDQUFDO1FBQUUsSUFBSUMsSUFBRSxJQUFJQyxFQUFFQyxJQUFJO1FBQUMsT0FBT0YsRUFBRUcsSUFBSSxDQUFDTCxHQUFFQztJQUFFO0lBQUMsU0FBU0MsRUFBRUYsQ0FBQztRQUFFLE9BQU9BLEVBQUVNLE9BQU8sQ0FBQyxVQUFTLFNBQVNOLENBQUM7WUFBRSxPQUFNLE1BQUlBLEVBQUVPLFdBQVc7UUFBRTtJQUFHO0lBQUMsU0FBU0MsRUFBRVIsQ0FBQztRQUFFLElBQUlDLElBQUVRLFNBQVNULEVBQUVVLEtBQUssQ0FBQyxJQUFHLEtBQUlSLElBQUVELEtBQUcsS0FBRyxLQUFJTyxJQUFFUCxLQUFHLElBQUUsS0FBSVUsSUFBRSxNQUFJVjtRQUFFLE9BQU07WUFBQ0M7WUFBRU07WUFBRUc7U0FBRTtJQUFBO0lBQUMsU0FBU0EsRUFBRVgsQ0FBQyxFQUFDQyxDQUFDLEVBQUNDLENBQUM7UUFBRSxPQUFNLE1BQUksQUFBQyxDQUFBLEtBQUcsS0FBR0YsS0FBRyxLQUFHQyxLQUFHLElBQUVDLENBQUFBLEVBQUdVLFFBQVEsQ0FBQyxJQUFJRixLQUFLLENBQUM7SUFBRTtJQUFDLFNBQVNHLEtBQUk7SUFBQyxTQUFTQyxFQUFFZCxDQUFDLEVBQUNDLENBQUM7UUFBRWMsRUFBRSw4QkFBNEJmLElBQUUsYUFBVyxPQUFPQyxJQUFFLE9B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 }), 5756: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; // Include tram for frame-throttling /* globals window */ var $ = window.$; var tram = __webpack_require__(5487) && $.tram; /*! * Webflow._ (aka) Underscore.js 1.6.0 (custom build) * * http://underscorejs.org * (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors * Underscore may be freely distributed under the MIT license. * @license MIT */ /** * Webflow custom build of Underscore.js 1.6.0 * https://github.com/jashkenas/underscore/tree/1.6.0 * * _.each * _.map * _.find * _.filter * _.any * _.contains * _.delay * _.defer * _.throttle (webflow) * _.debounce * _.keys * _.has * _.now * _.template (webflow: upgraded to 1.13.6) */ module.exports = function() { var _ = {}; // Current version. _.VERSION = '1.6.0-Webflow'; // Establish the object that gets returned to break out of a loop iteration. var breaker = {}; // Save bytes in the minified (but not gzipped) version: /* eslint-disable one-var */ var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; /* eslint-enable one-var */ // Create quick reference variables for speed access to core prototypes. /* eslint-disable one-var, unused-imports/no-unused-vars */ var push = ArrayProto.push, slice = ArrayProto.slice, concat = ArrayProto.concat, toString = ObjProto.toString, hasOwnProperty = ObjProto.hasOwnProperty; /* eslint-enable one-var, unused-imports/no-unused-vars */ // All **ECMAScript 5** native function implementations that we hope to use // are declared here. /* eslint-disable one-var, unused-imports/no-unused-vars */ var nativeForEach = ArrayProto.forEach, nativeMap = ArrayProto.map, nativeReduce = ArrayProto.reduce, nativeReduceRight = ArrayProto.reduceRight, nativeFilter = ArrayProto.filter, nativeEvery = ArrayProto.every, nativeSome = ArrayProto.some, nativeIndexOf = ArrayProto.indexOf, nativeLastIndexOf = ArrayProto.lastIndexOf, nativeIsArray = Array.isArray, nativeKeys = Object.keys, nativeBind = FuncProto.bind; /* eslint-enable one-var, unused-imports/no-unused-vars */ // Collection Functions // -------------------- // The cornerstone, an `each` implementation, aka `forEach`. // Handles objects with the built-in `forEach`, arrays, and raw objects. // Delegates to **ECMAScript 5**'s native `forEach` if available. var each = _.each = _.forEach = function(obj, iterator, context) { /* jshint shadow:true */ if (obj == null) return obj; if (nativeForEach && obj.forEach === nativeForEach) { obj.forEach(iterator, context); // eslint-disable-next-line no-implicit-coercion } else if (obj.length === +obj.length) { for(var i = 0, length = obj.length; i < length; i++){ if (iterator.call(context, obj[i], i, obj) === breaker) return; } } else { var keys = _.keys(obj); // eslint-disable-next-line no-redeclare for(var i = 0, length = keys.length; i < length; i++){ if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return; } } return obj; }; // Return the results of applying the iterator to each element. // Delegates to **ECMAScript 5**'s native `map` if available. _.map = _.collect = function(obj, iterator, context) { var results = []; if (obj == null) return results; if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); each(obj, function(value, index, list) { results.push(iterator.call(context, value, index, list)); }); return results; }; // Return the first value which passes a truth test. Aliased as `detect`. _.find = _.detect = function(obj, predicate, context) { var result; any(obj, function(value, index, list) { if (predicate.call(context, value, index, list)) { result = value; return true; } }); return result; }; // Return all the elements that pass a truth test. // Delegates to **ECMAScript 5**'s native `filter` if available. // Aliased as `select`. _.filter = _.select = function(obj, predicate, context) { var results = []; if (obj == null) return results; if (nativeFilter && obj.filter === nativeFilter) return obj.filter(predicate, context); each(obj, function(value, index, list) { if (predicate.call(context, value, index, list)) results.push(value); }); return results; }; // Determine if at least one element in the object matches a truth test. // Delegates to **ECMAScript 5**'s native `some` if available. // Aliased as `any`. var any = _.some = _.any = function(obj, predicate, context) { predicate || (predicate = _.identity); var result = false; if (obj == null) return result; if (nativeSome && obj.some === nativeSome) return obj.some(predicate, context); each(obj, function(value, index, list) { if (result || (result = predicate.call(context, value, index, list))) return breaker; }); return !!result; // eslint-disable-line no-implicit-coercion }; // Determine if the array or object contains a given value (using `===`). // Aliased as `include`. _.contains = _.include = function(obj, target) { if (obj == null) return false; if (nativeIndexOf && obj.indexOf === nativeIndexOf) // eslint-disable-next-line eqeqeq return obj.indexOf(target) != -1; return any(obj, function(value) { return value === target; }); }; // Function (ahem) Functions // -------------------- // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. _.delay = function(func, wait) { var args = slice.call(arguments, 2); return setTimeout(function() { return func.apply(null, args); }, wait); }; // Defers a function, scheduling it to run after the current call stack has // cleared. _.defer = function(func) { return _.delay.apply(_, [ func, 1 ].concat(slice.call(arguments, 1))); }; // Returns a function, that, when invoked, will only be triggered once every // browser animation frame - using tram's requestAnimationFrame polyfill. _.throttle = function(func) { // eslint-disable-next-line one-var var wait, args, context; return function() { if (wait) return; wait = true; args = arguments; context = this; tram.frame(function() { wait = false; func.apply(context, args); }); }; }; // Returns a function, that, as long as it continues to be invoked, will not // be triggered. The function will be called after it stops being called for // N milliseconds. If `immediate` is passed, trigger the function on the // leading edge, instead of the trailing. _.debounce = function(func, wait, immediate) { // eslint-disable-next-line one-var var timeout, args, context, timestamp, result; var later = function() { var last = _.now() - timestamp; if (last < wait) { timeout = setTimeout(later, wait - last); } else { timeout = null; if (!immediate) { result = func.apply(context, args); context = args = null; } } }; return function() { context = this; args = arguments; timestamp = _.now(); var callNow = immediate && !timeout; if (!timeout) { timeout = setTimeout(later, wait); } if (callNow) { result = func.apply(context, args); context = args = null; } return result; }; }; // Object Functions // ---------------- // Fill in a given object with default properties. _.defaults = function(obj) { if (!_.isObject(obj)) return obj; for(var i = 1, length = arguments.length; i < length; i++){ var source = arguments[i]; for(var prop in source){ // eslint-disable-next-line no-void if (obj[prop] === void 0) obj[prop] = source[prop]; } } return obj; }; // Retrieve the names of an object's properties. // Delegates to **ECMAScript 5**'s native `Object.keys` _.keys = function(obj) { if (!_.isObject(obj)) return []; if (nativeKeys) return nativeKeys(obj); var keys = []; for(var key in obj)if (_.has(obj, key)) keys.push(key); return keys; }; // Shortcut function for checking if an object has a given property directly // on itself (in other words, not on a prototype). _.has = function(obj, key) { return hasOwnProperty.call(obj, key); }; // Is a given variable an object? _.isObject = function(obj) { return obj === Object(obj); }; // Utility Functions // ----------------- // A (possibly faster) way to get the current timestamp as an integer. _.now = Date.now || function() { return new Date().getTime(); }; // By default, Underscore uses ERB-style template delimiters, change the // following template settings to use alternative delimiters. _.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g }; // When customizing `templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is // guaranteed not to match. var noMatch = /(.)^/; // Certain characters need to be escaped so that they can be put into a // string literal. var escapes = { "'": "'", '\\': '\\', '\r': 'r', '\n': 'n', '\u2028': 'u2028', '\u2029': 'u2029' }; var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g; var escapeChar = function(match) { return '\\' + escapes[match]; }; // In order to prevent third-party code injection through // `_.templateSettings.variable`, we test it against the following regular // expression. It is intentionally a bit more liberal than just matching valid // identifiers, but still prevents possible loopholes through defaults or // destructuring assignment. var bareIdentifier = /^\s*(\w|\$)+\s*$/; // JavaScript micro-templating, similar to John Resig's implementation. // Underscore templating handles arbitrary delimiters, preserves whitespace, // and correctly escapes quotes within interpolated code. // NB: `oldSettings` only exists for backwards compatibility. _.template = function(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; settings = _.defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ (settings.escape || noMatch).source, (settings.interpolate || noMatch).source, (settings.evaluate || noMatch).source ].join('|') + '|$', 'g'); // Compile the template source, escaping string literals appropriately. var index = 0; var source = "__p+='"; text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { source += text.slice(index, offset).replace(escapeRegExp, escapeChar); index = offset + match.length; if (escape) { source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; } else if (interpolate) { source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; } else if (evaluate) { source += "';\n" + evaluate + "\n__p+='"; } // Adobe VMs need the match returned to produce the correct offset. return match; }); source += "';\n"; var argument = settings.variable; if (argument) { // Insure against third-party code injection. (CVE-2021-23358) if (!bareIdentifier.test(argument)) throw new Error('variable is not a bare identifier: ' + argument); } else { // If a variable is not specified, place data values in local scope. source = 'with(obj||{}){\n' + source + '}\n'; argument = 'obj'; } source = "var __t,__p='',__j=Array.prototype.join," + "print=function(){__p+=__j.call(arguments,'');};\n" + source + 'return __p;\n'; var render; try { // eslint-disable-next-line no-new-func render = new Function(settings.variable || 'obj', '_', source); } catch (e) { e.source = source; throw e; } var template = function(data) { return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. template.source = 'function(' + argument + '){\n' + source + '}'; return template; }; // Export underscore return _; }(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NoYXJlZC9yZW5kZXIvcGx1Z2lucy9CYXNlU2l0ZU1vZHVsZXMvdW5kZXJzY29yZS1jdXN0b20uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW5jbHVkZSB0cmFtIGZvciBmcmFtZS10aHJvdHRsaW5nXG4vKiBnbG9iYWxzIHdpbmRvdyAqL1xuXG52YXIgJCA9IHdpbmRvdy4kO1xudmFyIHRyYW0gPSByZXF1aXJlKCcuL3RyYW0tbWluJykgJiYgJC50cmFtO1xuXG4vKiFcbiAqIFdlYmZsb3cuXyAoYWthKSBVbmRlcnNjb3JlLmpzIDEuNi4wIChjdXN0b20gYnVpbGQpXG4gKlxuICogaHR0cDovL3VuZGVyc2NvcmVqcy5vcmdcbiAqIChjKSAyMDA5LTIwMTMgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqIFVuZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuLyoqXG4gKiBXZWJmbG93IGN1c3RvbSBidWlsZCBvZiBVbmRlcnNjb3JlLmpzIDEuNi4wXG4gKiBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvdHJlZS8xLjYuMFxuICpcbiAqIF8uZWFjaFxuICogXy5tYXBcbiAqIF8uZmluZFxuICogXy5maWx0ZXJcbiAqIF8uYW55XG4gKiBfLmNvbnRhaW5zXG4gKiBfLmRlbGF5XG4gKiBfLmRlZmVyXG4gKiBfLnRocm90dGxlICh3ZWJmbG93KVxuICogXy5kZWJvdW5jZVxuICogXy5rZXlzXG4gKiBfLmhhc1xuICogXy5ub3dcbiAqIF8udGVtcGxhdGUgKHdlYmZsb3c6IHVwZ3JhZGVkIHRvIDEuMTMuNilcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgXyA9IHt9O1xuXG4gIC8vIEN1cnJlbnQgdmVyc2lvbi5cbiAgXy5WRVJTSU9OID0gJzEuNi4wLVdlYmZsb3cnO1xuXG4gIC8vIEVzdGFibGlzaCB0aGUgb2JqZWN0IHRoYXQgZ2V0cyByZXR1cm5lZCB0byBicmVhayBvdXQgb2YgYSBsb29wIGl0ZXJhdGlvbi5cbiAgdmFyIGJyZWFrZXIgPSB7fTtcblxuICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOlxuICAvKiBlc2xpbnQtZGlzYWJsZSBvbmUtdmFyICovXG4gIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLFxuICAgIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICBGdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4gIC8qIGVzbGludC1lbmFibGUgb25lLXZhciAqL1xuXG4gIC8vIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxuICAvKiBlc2xpbnQtZGlzYWJsZSBvbmUtdmFyLCB1bnVzZWQtaW1wb3J0cy9uby11bnVzZWQtdmFycyAqL1xuICB2YXIgcHVzaCA9IEFycmF5UHJvdG8ucHVzaCxcbiAgICBzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgY29uY2F0ID0gQXJyYXlQcm90by5jb25jYXQsXG4gICAgdG9TdHJpbmcgPSBPYmpQcm90by50b1N0cmluZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSA9IE9ialByb3RvLmhhc093blByb3BlcnR5O1xuICAvKiBlc2xpbnQtZW5hYmxlIG9uZS12YXIsIHVudXNlZC1pbXBvcnRzL25vLXVudXNlZC12YXJzICovXG5cbiAgLy8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8vIGFyZSBkZWNsYXJlZCBoZXJlLlxuICAvKiBlc2xpbnQtZGlzYWJsZSBvbmUtdmFyLCB1bnVzZWQtaW1wb3J0cy9uby11bnVzZWQtdmFycyAqL1xuICB2YXIgbmF0aXZlRm9yRWFjaCA9IEFycmF5UHJvdG8uZm9yRWFjaCxcbiAgICBuYXRpdmVNYXAgPSBBcnJheVByb3RvLm1hcCxcbiAgICBuYXRpdmVSZWR1Y2UgPSBBcnJheVByb3RvLnJlZHVjZSxcbiAgICBuYXRpdmVSZWR1Y2VSaWdodCA9IEFycmF5UHJvdG8ucmVkdWNlUmlnaHQsXG4gICAgbmF0aXZlRmlsdGVyID0gQXJyYXlQcm90by5maWx0ZXIsXG4gICAgbmF0aXZlRXZlcnkgPSBBcnJheVByb3RvLmV2ZXJ5LFxuICAgIG5hdGl2ZVNvbWUgPSBBcnJheVByb3RvLnNvbWUsXG4gICAgbmF0aXZlSW5kZXhPZiA9IEFycmF5UHJvdG8uaW5kZXhPZixcbiAgICBuYXRpdmVMYXN0SW5kZXhPZiA9IEFycmF5UHJvdG8ubGFzdEluZGV4T2YsXG4gICAgbmF0aXZlSXNBcnJheSA9IEFycmF5LmlzQXJyYXksXG4gICAgbmF0aXZlS2V5cyA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUJpbmQgPSBGdW5jUHJvdG8uYmluZDtcbiAgLyogZXNsaW50LWVuYWJsZSBvbmUtdmFyLCB1bnVzZWQtaW1wb3J0cy9uby11bnVzZWQtdmFycyAqL1xuXG4gIC8vIENvbGxlY3Rpb24gRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gVGhlIGNvcm5lcnN0b25lLCBhbiBgZWFjaGAgaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuXG4gIC8vIEhhbmRsZXMgb2JqZWN0cyB3aXRoIHRoZSBidWlsdC1pbiBgZm9yRWFjaGAsIGFycmF5cywgYW5kIHJhdyBvYmplY3RzLlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgZm9yRWFjaGAgaWYgYXZhaWxhYmxlLlxuICB2YXIgZWFjaCA9XG4gICAgKF8uZWFjaCA9XG4gICAgXy5mb3JFYWNoID1cbiAgICAgIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgICAgIC8qIGpzaGludCBzaGFkb3c6dHJ1ZSAqL1xuICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgICAgIGlmIChuYXRpdmVGb3JFYWNoICYmIG9iai5mb3JFYWNoID09PSBuYXRpdmVGb3JFYWNoKSB7XG4gICAgICAgICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxuICAgICAgICB9IGVsc2UgaWYgKG9iai5sZW5ndGggPT09ICtvYmoubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopID09PSBicmVha2VyKSByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaikgPT09IGJyZWFrZXIpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0pO1xuXG4gIC8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0b3IgdG8gZWFjaCBlbGVtZW50LlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgbWFwYCBpZiBhdmFpbGFibGUuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdHM7XG4gICAgaWYgKG5hdGl2ZU1hcCAmJiBvYmoubWFwID09PSBuYXRpdmVNYXApIHJldHVybiBvYmoubWFwKGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgcmVzdWx0cy5wdXNoKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRlY3RgLlxuICBfLmZpbmQgPSBfLmRldGVjdCA9IGZ1bmN0aW9uIChvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQ7XG4gICAgYW55KG9iaiwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZS5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkpIHtcbiAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYGZpbHRlcmAgaWYgYXZhaWxhYmxlLlxuICAvLyBBbGlhc2VkIGFzIGBzZWxlY3RgLlxuICBfLmZpbHRlciA9IF8uc2VsZWN0ID0gZnVuY3Rpb24gKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHRzO1xuICAgIGlmIChuYXRpdmVGaWx0ZXIgJiYgb2JqLmZpbHRlciA9PT0gbmF0aXZlRmlsdGVyKVxuICAgICAgcmV0dXJuIG9iai5maWx0ZXIocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZS5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBvYmplY3QgbWF0Y2hlcyBhIHRydXRoIHRlc3QuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBzb21lYCBpZiBhdmFpbGFibGUuXG4gIC8vIEFsaWFzZWQgYXMgYGFueWAuXG4gIHZhciBhbnkgPVxuICAgIChfLnNvbWUgPVxuICAgIF8uYW55ID1cbiAgICAgIGZ1bmN0aW9uIChvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IF8uaWRlbnRpdHkpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgaWYgKG5hdGl2ZVNvbWUgJiYgb2JqLnNvbWUgPT09IG5hdGl2ZVNvbWUpXG4gICAgICAgICAgcmV0dXJuIG9iai5zb21lKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgICAgIGVhY2gob2JqLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCB8fCAocmVzdWx0ID0gcHJlZGljYXRlLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSkpXG4gICAgICAgICAgICByZXR1cm4gYnJlYWtlcjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAhIXJlc3VsdDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxuICAgICAgfSk7XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiB2YWx1ZSAodXNpbmcgYD09PWApLlxuICAvLyBBbGlhc2VkIGFzIGBpbmNsdWRlYC5cbiAgXy5jb250YWlucyA9IF8uaW5jbHVkZSA9IGZ1bmN0aW9uIChvYmosIHRhcmdldCkge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChuYXRpdmVJbmRleE9mICYmIG9iai5pbmRleE9mID09PSBuYXRpdmVJbmRleE9mKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgcmV0dXJuIG9iai5pbmRleE9mKHRhcmdldCkgIT0gLTE7XG4gICAgcmV0dXJuIGFueShvYmosIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSB0YXJnZXQ7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gRnVuY3Rpb24gKGFoZW0pIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gZnVuY3Rpb24gKGZ1bmMsIHdhaXQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbiAgLy8gY2xlYXJlZC5cbiAgXy5kZWZlciA9IGZ1bmN0aW9uIChmdW5jKSB7XG4gICAgcmV0dXJuIF8uZGVsYXkuYXBwbHkoXywgW2Z1bmMsIDFdLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBvbmNlIGV2ZXJ5XG4gIC8vIGJyb3dzZXIgYW5pbWF0aW9uIGZyYW1lIC0gdXNpbmcgdHJhbSdzIHJlcXVlc3RBbmltYXRpb25GcmFtZSBwb2x5ZmlsbC5cbiAgXy50aHJvdHRsZSA9IGZ1bmN0aW9uIChmdW5jKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9uZS12YXJcbiAgICB2YXIgd2FpdCwgYXJncywgY29udGV4dDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHdhaXQpIHJldHVybjtcbiAgICAgIHdhaXQgPSB0cnVlO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgdHJhbS5mcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhaXQgPSBmYWxzZTtcbiAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24gKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvbmUtdmFyXG4gICAgdmFyIHRpbWVvdXQsIGFyZ3MsIGNvbnRleHQsIHRpbWVzdGFtcCwgcmVzdWx0O1xuXG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGxhc3QgPSBfLm5vdygpIC0gdGltZXN0YW1wO1xuICAgICAgaWYgKGxhc3QgPCB3YWl0KSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgdGltZXN0YW1wID0gXy5ub3coKTtcbiAgICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgIH1cbiAgICAgIGlmIChjYWxsTm93KSB7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIE9iamVjdCBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG4gIF8uZGVmYXVsdHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gICAgZm9yICh2YXIgaSA9IDEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICAgIGlmIChvYmpbcHJvcF0gPT09IHZvaWQgMCkgb2JqW3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNgXG4gIF8ua2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseVxuICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLlxuICBfLmhhcyA9IGZ1bmN0aW9uIChvYmosIGtleSkge1xuICAgIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBPYmplY3Qob2JqKTtcbiAgfTtcblxuICAvLyBVdGlsaXR5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPVxuICAgIERhdGUubm93IHx8XG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH07XG5cbiAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlXG4gIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAgXy50ZW1wbGF0ZVNldHRpbmdzID0ge1xuICAgIGV2YWx1YXRlOiAvPCUoW1xcc1xcU10rPyklPi9nLFxuICAgIGludGVycG9sYXRlOiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgICBlc2NhcGU6IC88JS0oW1xcc1xcU10rPyklPi9nLFxuICB9O1xuXG4gIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbiAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFcbiAgLy8gc3RyaW5nIGxpdGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wiOiBcIidcIixcbiAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICAnXFxyJzogJ3InLFxuICAgICdcXG4nOiAnbicsXG4gICAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5JyxcbiAgfTtcblxuICB2YXIgZXNjYXBlUmVnRXhwID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVDaGFyID0gZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xuICB9O1xuXG4gIC8vIEluIG9yZGVyIHRvIHByZXZlbnQgdGhpcmQtcGFydHkgY29kZSBpbmplY3Rpb24gdGhyb3VnaFxuICAvLyBgXy50ZW1wbGF0ZVNldHRpbmdzLnZhcmlhYmxlYCwgd2UgdGVzdCBpdCBhZ2FpbnN0IHRoZSBmb2xsb3dpbmcgcmVndWxhclxuICAvLyBleHByZXNzaW9uLiBJdCBpcyBpbnRlbnRpb25hbGx5IGEgYml0IG1vcmUgbGliZXJhbCB0aGFuIGp1c3QgbWF0Y2hpbmcgdmFsaWRcbiAgLy8gaWRlbnRpZmllcnMsIGJ1dCBzdGlsbCBwcmV2ZW50cyBwb3NzaWJsZSBsb29waG9sZXMgdGhyb3VnaCBkZWZhdWx0cyBvclxuICAvLyBkZXN0cnVjdHVyaW5nIGFzc2lnbm1lbnQuXG4gIHZhciBiYXJlSWRlbnRpZmllciA9IC9eXFxzKihcXHd8XFwkKStcXHMqJC87XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24gKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICAgIGlmICghc2V0dGluZ3MgJiYgb2xkU2V0dGluZ3MpIHNldHRpbmdzID0gb2xkU2V0dGluZ3M7XG4gICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtcblxuICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLlxuICAgIHZhciBtYXRjaGVyID0gUmVnRXhwKFxuICAgICAgW1xuICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIF0uam9pbignfCcpICsgJ3wkJyxcbiAgICAgICdnJ1xuICAgICk7XG5cbiAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7XG4gICAgdGV4dC5yZXBsYWNlKFxuICAgICAgbWF0Y2hlcixcbiAgICAgIGZ1bmN0aW9uIChtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xuICAgICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2FwZVJlZ0V4cCwgZXNjYXBlQ2hhcik7XG4gICAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICAgIGlmIChlc2NhcGUpIHtcbiAgICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXFxuJ1wiO1xuICAgICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUpIHtcbiAgICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVkIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb2Zmc2V0LlxuICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICB9XG4gICAgKTtcbiAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gICAgdmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGU7XG4gICAgaWYgKGFyZ3VtZW50KSB7XG4gICAgICAvLyBJbnN1cmUgYWdhaW5zdCB0aGlyZC1wYXJ0eSBjb2RlIGluamVjdGlvbi4gKENWRS0yMDIxLTIzMzU4KVxuICAgICAgaWYgKCFiYXJlSWRlbnRpZmllci50ZXN0KGFyZ3VtZW50KSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YXJpYWJsZSBpcyBub3QgYSBiYXJlIGlkZW50aWZpZXI6ICcgKyBhcmd1bWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgICBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xuICAgICAgYXJndW1lbnQgPSAnb2JqJztcbiAgICB9XG5cbiAgICBzb3VyY2UgPVxuICAgICAgXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sXCIgK1xuICAgICAgXCJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xcblwiICtcbiAgICAgIHNvdXJjZSArXG4gICAgICAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdmFyIHJlbmRlcjtcbiAgICB0cnkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICByZW5kZXIgPSBuZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291cmNlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEV4cG9ydCB1bmRlcnNjb3JlXG4gIHJldHVybiBfO1xufSkoKTtcbiJdLCJuYW1lcyI6WyIkIiwid2luZG93IiwidHJhbSIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiXyIsIlZFUlNJT04iLCJicmVha2VyIiwiQXJyYXlQcm90byIsIkFycmF5IiwicHJvdG90eXBlIiwiT2JqUHJvdG8iLCJPYmplY3QiLCJGdW5jUHJvdG8iLCJGdW5jdGlvbiIsInB1c2giLCJzbGljZSIsImNvbmNhdCIsInRvU3RyaW5nIiwiaGFzT3duUHJvcGVydHkiLCJuYXRpdmVGb3JFYWNoIiwiZm9yRWFjaCIsIm5hdGl2ZU1hcCIsIm1hcCIsIm5hdGl2ZVJlZHVjZSIsInJlZHVjZSIsIm5hdGl2ZVJlZHVjZVJpZ2h0IiwicmVkdWNlUmlnaHQiLCJuYXRpdmVGaWx0ZXIiLCJmaWx0ZXIiLCJuYXRpdmVFdmVyeSIsImV2ZXJ5IiwibmF0aXZlU29tZSIsInNvbWUiLCJuYXRpdmVJbmRleE9mIiwiaW5kZXhPZiIsIm5hdGl2ZUxhc3RJbmRleE9mIiwibGFzdEluZGV4T2YiLCJuYXRpdmVJc0FycmF5IiwiaXNBcnJheSIsIm5hdGl2ZUtleXMiLCJrZXlzIiwibmF0aXZlQmluZCIsImJpbmQiLCJlYWNoIiwib2JqIiwiaXRlcmF0b3IiLCJjb250ZXh0IiwibGVuZ3RoIiwiaSIsImNhbGwiLCJjb2xsZWN0IiwicmVzdWx0cyIsInZhbHVlIiwiaW5kZXgiLCJsaXN0IiwiZmluZCIsImRldGVjdCIsInByZWRpY2F0ZSIsInJlc3VsdCIsImFueSIsInNlbGVjdCIsImlkZW50aXR5IiwiY29udGFpbnMiLCJpbmNsdWRlIiwidGFyZ2V0IiwiZGVsYXkiLCJmdW5jIiwid2FpdCIsImFyZ3MiLCJhcmd1bWVudHMiLCJzZXRUaW1lb3V0IiwiYXBwbHkiLCJkZWZlciIsInRocm90dGxlIiwiZnJhbWUiLCJkZWJvdW5jZSIsImltbWVkaWF0ZSIsInRpbWVvdXQiLCJ0aW1lc3RhbXAiLCJsYXRlciIsImxhc3QiLCJub3ciLCJjYWxsTm93IiwiZGVmYXVsdHMiLCJpc09iamVjdCIsInNvdXJjZSIsInByb3AiLCJrZXkiLCJoYXMiLCJEYXRlIiwiZ2V0VGltZSIsInRlbXBsYXRlU2V0dGluZ3MiLCJldmFsdWF0ZSIsImludGVycG9sYXRlIiwiZXNjYXBlIiwibm9NYXRjaCIsImVzY2FwZXMiLCJlc2NhcGVSZWdFeHAiLCJlc2NhcGVDaGFyIiwibWF0Y2giLCJiYXJlSWRlbnRpZmllciIsInRlbXBsYXRlIiwidGV4dCIsInNldHRpbmdzIiwib2xkU2V0dGluZ3MiLCJtYXRjaGVyIiwiUmVnRXhwIiwiam9pbiIsInJlcGxhY2UiLCJvZmZzZXQiLCJhcmd1bWVudCIsInZhcmlhYmxlIiwidGVzdCIsIkVycm9yIiwicmVuZGVyIiwiZSIsImRhdGEiXSwibWFwcGluZ3MiOiJBQUFBLG9DQUFvQztBQUNwQyxrQkFBa0I7QUFFbEIsSUFBSUEsSUFBSUMsT0FBT0QsQ0FBQztBQUNoQixJQUFJRSxPQUFPQyxRQUFRLGlCQUFpQkgsRUFBRUUsSUFBSTtBQUUxQzs7Ozs7OztDQU9DLEdBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtCQyxHQUNERSxPQUFPQyxPQUFPLEdBQUcsQUFBQztJQUNoQixJQUFJQyxJQUFJLENBQUM7SUFFVCxtQkFBbUI7SUFDbkJBLEVBQUVDLE9BQU8sR0FBRztJQUVaLDRFQUE0RTtJQUM1RSxJQUFJQyxVQUFVLENBQUM7SUFFZix3REFBd0Q7SUFDeEQsMEJBQTBCLEdBQzFCLElBQUlDLGFBQWFDLE1BQU1DLFNBQVMsRUFDOUJDLFdBQVdDLE9BQU9GLFNBQVMsRUFDM0JHLFlBQVlDLFNBQVNKLFNBQVM7SUFDaEMseUJBQXlCLEdBRXpCLHdFQUF3RTtJQUN4RSx5REFBeUQsR0FDekQsSUFBSUssT0FBT1AsV0FBV08sSUFBSSxFQUN4QkMsUUFBUVIsV0FBV1EsS0FBSyxFQUN4QkMsU0FBU1QsV0FBV1MsTUFBTSxFQUMxQkMsV0FBV1AsU0FBU08sUUFBUSxFQUM1QkMsaUJBQWlCUixTQUFTUSxjQUFjO0lBQzFDLHdEQUF3RCxHQUV4RCwyRUFBMkU7SUFDM0UscUJBQXFCO0lBQ3JCLHlEQUF5RCxHQUN6RCxJQUFJQyxnQkFBZ0JaLFdBQVdhLE9BQU8sRUFDcENDLFlBQVlkLFdBQVdlLEdBQUcsRUFDMUJDLGVBQWVoQixXQUFXaUIsTUFBTSxFQUNoQ0Msb0JBQW9CbEIsV0FBV21CLFdBQVcsRUFDMUNDLGVBQWVwQixXQUFXcUIsTUFBTSxFQUNoQ0MsY0FBY3RCLFdBQVd1QixLQUFLLEVBQzlCQyxhQUFheEIsV0FBV3lCLElBQUksRUFDNUJDLGdCQUFnQjFCLFdBQVcyQixPQUFPLEVBQ2xDQyxvQkFBb0I1QixXQUFXNkIsV0FBVyxFQUMxQ0MsZ0JBQWdCN0IsTUFBTThCLE9BQU8sRUFDN0JDLGFBQWE1QixPQUFPNkIsSUFBSSxFQUN4QkMsYUFBYTdCLFVBQVU4QixJQUFJO0lBQzdCLHdEQUF3RCxHQUV4RCx1QkFBdUI7SUFDdkIsdUJBQXVCO0lBRXZCLDREQUE0RDtJQUM1RCx3RUFBd0U7SUFDeEUsaUVBQWlFO0lBQ2pFLElBQUlDLE9BQ0R2QyxFQUFFdUMsSUFBSSxHQUNQdkMsRUFBRWdCLE9BQU8sR0FDUCxTQUFVd0IsR0FBRyxFQUFFQyxRQUFRLEVBQUVDLE9BQU87UUFDOUIsc0JBQXNCLEdBQ3RCLElBQUlGLE9BQU8sTUFBTSxPQUFPQTtRQUN4QixJQUFJekIsaUJBQWlCeUIsSUFBSXhCLE9BQU8sS0FBS0QsZUFBZTtZQUNsRHlCLElBQUl4QixPQUFPLENBQUN5QixVQUFVQztRQUN0QixnREFBZ0Q7UUFDbEQsT0FBTyxJQUFJRixJQUFJRyxNQUFNLEtBQUssQ0FBQ0gsSUFBSUcsTUFBTSxFQUFFO1lBQ3JDLElBQUssSUFBSUMsSUFBSSxHQUFHRCxTQUFTSCxJQUFJRyxNQUFNLEVBQUVDLElBQUlELFFBQVFDLElBQUs7Z0JBQ3BELElBQUlILFNBQVNJLElBQUksQ0FBQ0gsU0FBU0YsR0FBRyxDQUFDSSxFQUFFLEVBQUVBLEdBQUdKLFNBQVN0QyxTQUFTO1lBQzFEO1FBQ0YsT0FBTztZQUNMLElBQUlrQyxPQUFPcEMsRUFBRW9DLElBQUksQ0FBQ0k7WUFDbEIsd0NBQXdDO1lBQ3hDLElBQUssSUFBSUksSUFBSSxHQUFHRCxTQUFTUCxLQUFLTyxNQUFNLEVBQUVDLElBQUlELFFBQVFDLElBQUs7Z0JBQ3JELElBQUlILFNBQVNJLElBQUksQ0FBQ0gsU0FBU0YsR0FBRyxDQUFDSixJQUFJLENBQUNRLEVBQUUsQ0FBQyxFQUFFUixJQUFJLENBQUNRLEVBQUUsRUFBRUosU0FBU3RDLFNBQ3pEO1lBQ0o7UUFDRjtRQUNBLE9BQU9zQztJQUNUO0lBRUosK0RBQStEO0lBQy9ELDZEQUE2RDtJQUM3RHhDLEVBQUVrQixHQUFHLEdBQUdsQixFQUFFOEMsT0FBTyxHQUFHLFNBQVVOLEdBQUcsRUFBRUMsUUFBUSxFQUFFQyxPQUFPO1FBQ2xELElBQUlLLFVBQVUsRUFBRTtRQUNoQixJQUFJUCxPQUFPLE1BQU0sT0FBT087UUFDeEIsSUFBSTlCLGFBQWF1QixJQUFJdEIsR0FBRyxLQUFLRCxXQUFXLE9BQU91QixJQUFJdEIsR0FBRyxDQUFDdUIsVUFBVUM7UUFDakVILEtBQUtDLEtBQUssU0FBVVEsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLElBQUk7WUFDcENILFFBQVFyQyxJQUFJLENBQUMrQixTQUFTSSxJQUFJLENBQUNILFNBQVNNLE9BQU9DLE9BQU9DO1FBQ3BEO1FBQ0EsT0FBT0g7SUFDVDtJQUVBLHlFQUF5RTtJQUN6RS9DLEVBQUVtRCxJQUFJLEdBQUduRCxFQUFFb0QsTUFBTSxHQUFHLFNBQVVaLEdBQUcsRUFBRWEsU0FBUyxFQUFFWCxPQUFPO1FBQ25ELElBQUlZO1FBQ0pDLElBQUlmLEtBQUssU0FBVVEsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLElBQUk7WUFDbkMsSUFBSUcsVUFBVVIsSUFBSSxDQUFDSCxTQUFTTSxPQUFPQyxPQUFPQyxPQUFPO2dCQUMvQ0ksU0FBU047Z0JBQ1QsT0FBTztZQUNUO1FBQ0Y7UUFDQSxPQUFPTTtJQUNUO0lBRUEsa0RBQWtEO0lBQ2xELGdFQUFnRTtJQUNoRSx1QkFBdUI7SUFDdkJ0RCxFQUFFd0IsTUFBTSxHQUFHeEIsRUFBRXdELE1BQU0sR0FBRyxTQUFVaEIsR0FBRyxFQUFFYSxTQUFTLEVBQUVYLE9BQU87UUFDckQsSUFBSUssVUFBVSxFQUFFO1FBQ2hCLElBQUlQLE9BQU8sTUFBTSxPQUFPTztRQUN4QixJQUFJeEIsZ0JBQWdCaUIsSUFBSWhCLE1BQU0sS0FBS0QsY0FDakMsT0FBT2lCLElBQUloQixNQUFNLENBQUM2QixXQUFXWDtRQUMvQkgsS0FBS0MsS0FBSyxTQUFVUSxLQUFLLEVBQUVDLEtBQUssRUFBRUMsSUFBSTtZQUNwQyxJQUFJRyxVQUFVUixJQUFJLENBQUNILFNBQVNNLE9BQU9DLE9BQU9DLE9BQU9ILFFBQVFyQyxJQUFJLENBQUNzQztRQUNoRTtRQUNBLE9BQU9EO0lBQ1Q7SUFFQSx3RUFBd0U7SUFDeEUsOERBQThEO0lBQzlELG9CQUFvQjtJQUNwQixJQUFJUSxNQUNEdkQsRUFBRTRCLElBQUksR0FDUDVCLEVBQUV1RCxHQUFHLEdBQ0gsU0FBVWYsR0FBRyxFQUFFYSxTQUFTLEVBQUVYLE9BQU87UUFDL0JXLGFBQWNBLENBQUFBLFlBQVlyRCxFQUFFeUQsUUFBUSxBQUFEO1FBQ25DLElBQUlILFNBQVM7UUFDYixJQUFJZCxPQUFPLE1BQU0sT0FBT2M7UUFDeEIsSUFBSTNCLGNBQWNhLElBQUlaLElBQUksS0FBS0QsWUFDN0IsT0FBT2EsSUFBSVosSUFBSSxDQUFDeUIsV0FBV1g7UUFDN0JILEtBQUtDLEtBQUssU0FBVVEsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLElBQUk7WUFDcEMsSUFBSUksVUFBV0EsQ0FBQUEsU0FBU0QsVUFBVVIsSUFBSSxDQUFDSCxTQUFTTSxPQUFPQyxPQUFPQyxLQUFJLEdBQ2hFLE9BQU9oRDtRQUNYO1FBQ0EsT0FBTyxDQUFDLENBQUNvRCxRQUFRLDJDQUEyQztJQUM5RDtJQUVKLHlFQUF5RTtJQUN6RSx3QkFBd0I7SUFDeEJ0RCxFQUFFMEQsUUFBUSxHQUFHMUQsRUFBRTJELE9BQU8sR0FBRyxTQUFVbkIsR0FBRyxFQUFFb0IsTUFBTTtRQUM1QyxJQUFJcEIsT0FBTyxNQUFNLE9BQU87UUFDeEIsSUFBSVgsaUJBQWlCVyxJQUFJVixPQUFPLEtBQUtELGVBQ25DLGtDQUFrQztRQUNsQyxPQUFPVyxJQUFJVixPQUFPLENBQUM4QixXQUFXLENBQUM7UUFDakMsT0FBT0wsSUFBSWYsS0FBSyxTQUFVUSxLQUFLO1lBQzdCLE9BQU9BLFVBQVVZO1FBQ25CO0lBQ0Y7SUFFQSw0QkFBNEI7SUFDNUIsdUJBQXVCO0lBRXZCLHlFQUF5RTtJQUN6RSxrQ0FBa0M7SUFDbEM1RCxFQUFFNkQsS0FBSyxHQUFHLFNBQVVDLElBQUksRUFBRUMsSUFBSTtRQUM1QixJQUFJQyxPQUFPckQsTUFBTWtDLElBQUksQ0FBQ29CLFdBQVc7UUFDakMsT0FBT0MsV0FBVztZQUNoQixPQUFPSixLQUFLSyxLQUFLLENBQUMsTUFBTUg7UUFDMUIsR0FBR0Q7SUFDTDtJQUVBLDJFQUEyRTtJQUMzRSxXQUFXO0lBQ1gvRCxFQUFFb0UsS0FBSyxHQUFHLFNBQVVOLElBQUk7UUFDdEIsT0FBTzlELEVBQUU2RCxLQUFLLENBQUNNLEtBQUssQ0FBQ25FLEdBQUc7WUFBQzhEO1lBQU07U0FBRSxDQUFDbEQsTUFBTSxDQUFDRCxNQUFNa0MsSUFBSSxDQUFDb0IsV0FBVztJQUNqRTtJQUVBLDRFQUE0RTtJQUM1RSx5RUFBeUU7SUFDekVqRSxFQUFFcUUsUUFBUSxHQUFHLFNBQVVQLElBQUk7UUFDekIsbUNBQW1DO1FBQ25DLElBQUlDLE1BQU1DLE1BQU10QjtRQUNoQixPQUFPO1lBQ0wsSUFBSXFCLE1BQU07WUFDVkEsT0FBTztZQUNQQyxPQUFPQztZQUNQdkIsVUFBVSxJQUFJO1lBQ2Q5QyxLQUFLMEUsS0FBSyxDQUFDO2dCQUNUUCxPQUFPO2dCQUNQRCxLQUFLSyxLQUFLLENBQUN6QixTQUFTc0I7WUFDdEI7UUFDRjtJQUNGO0lBRUEsNEVBQTRFO0lBQzVFLDRFQUE0RTtJQUM1RSx3RUFBd0U7SUFDeEUseUNBQXlDO0lBQ3pDaEUsRUFBRXVFLFFBQVEsR0FBRyxTQUFVVCxJQUFJLEVBQUVDLElBQUksRUFBRVMsU0FBUztRQUMxQyxtQ0FBbUM7UUFDbkMsSUFBSUMsU0FBU1QsTUFBTXRCLFNBQVNnQyxXQUFXcEI7UUFFdkMsSUFBSXFCLFFBQVE7WUFDVixJQUFJQyxPQUFPNUUsRUFBRTZFLEdBQUcsS0FBS0g7WUFDckIsSUFBSUUsT0FBT2IsTUFBTTtnQkFDZlUsVUFBVVAsV0FBV1MsT0FBT1osT0FBT2E7WUFDckMsT0FBTztnQkFDTEgsVUFBVTtnQkFDVixJQUFJLENBQUNELFdBQVc7b0JBQ2RsQixTQUFTUSxLQUFLSyxLQUFLLENBQUN6QixTQUFTc0I7b0JBQzdCdEIsVUFBVXNCLE9BQU87Z0JBQ25CO1lBQ0Y7UUFDRjtRQUVBLE9BQU87WUFDTHRCLFVBQVUsSUFBSTtZQUNkc0IsT0FBT0M7WUFDUFMsWUFBWTFFLEVBQUU2RSxHQUFHO1lBQ2pCLElBQUlDLFVBQVVOLGFBQWEsQ0FBQ0M7WUFDNUIsSUFBSSxDQUFDQSxTQUFTO2dCQUNaQSxVQUFVUCxXQUFXUyxPQUFPWjtZQUM5QjtZQUNBLElBQUllLFNBQVM7Z0JBQ1h4QixTQUFTUSxLQUFLSyxLQUFLLENBQUN6QixTQUFTc0I7Z0JBQzdCdEIsVUFBVXNCLE9BQU87WUFDbkI7WUFFQSxPQUFPVjtRQUNUO0lBQ0Y7SUFFQSxtQkFBbUI7SUFDbkIsbUJBQW1CO0lBRW5CLGtEQUFrRDtJQUNsRHRELEVBQUUrRSxRQUFRLEdBQUcsU0FBVXZDLEdBQUc7UUFDeEIsSUFBSSxDQUFDeEMsRUFBRWdGLFFBQVEsQ0FBQ3hDLE1BQU0sT0FBT0E7UUFDN0IsSUFBSyxJQUFJSSxJQUFJLEdBQUdELFNBQVNzQixVQUFVdEIsTUFBTSxFQUFFQyxJQUFJRCxRQUFRQyxJQUFLO1lBQzFELElBQUlxQyxTQUFTaEIsU0FBUyxDQUFDckIsRUFBRTtZQUN6QixJQUFLLElBQUlzQyxRQUFRRCxPQUFRO2dCQUN2QixtQ0FBbUM7Z0JBQ25DLElBQUl6QyxHQUFHLENBQUMwQyxLQUFLLEtBQUssS0FBSyxHQUFHMUMsR0FBRyxDQUFDMEMsS0FBSyxHQUFHRCxNQUFNLENBQUNDLEtBQUs7WUFDcEQ7UUFDRjtRQUNBLE9BQU8xQztJQUNUO0lBRUEsZ0RBQWdEO0lBQ2hELHVEQUF1RDtJQUN2RHhDLEVBQUVvQyxJQUFJLEdBQUcsU0FBVUksR0FBRztRQUNwQixJQUFJLENBQUN4QyxFQUFFZ0YsUUFBUSxDQUFDeEMsTUFBTSxPQUFPLEVBQUU7UUFDL0IsSUFBSUwsWUFBWSxPQUFPQSxXQUFXSztRQUNsQyxJQUFJSixPQUFPLEVBQUU7UUFDYixJQUFLLElBQUkrQyxPQUFPM0MsSUFBSyxJQUFJeEMsRUFBRW9GLEdBQUcsQ0FBQzVDLEtBQUsyQyxNQUFNL0MsS0FBSzFCLElBQUksQ0FBQ3lFO1FBQ3BELE9BQU8vQztJQUNUO0lBRUEsNEVBQTRFO0lBQzVFLGtEQUFrRDtJQUNsRHBDLEVBQUVvRixHQUFHLEdBQUcsU0FBVTVDLEdBQUcsRUFBRTJDLEdBQUc7UUFDeEIsT0FBT3JFLGVBQWUrQixJQUFJLENBQUNMLEtBQUsyQztJQUNsQztJQUVBLGlDQUFpQztJQUNqQ25GLEVBQUVnRixRQUFRLEdBQUcsU0FBVXhDLEdBQUc7UUFDeEIsT0FBT0EsUUFBUWpDLE9BQU9pQztJQUN4QjtJQUVBLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFFcEIsc0VBQXNFO0lBQ3RFeEMsRUFBRTZFLEdBQUcsR0FDSFEsS0FBS1IsR0FBRyxJQUNSO1FBQ0UsT0FBTyxJQUFJUSxPQUFPQyxPQUFPO0lBQzNCO0lBRUYsd0VBQXdFO0lBQ3hFLDZEQUE2RDtJQUM3RHRGLEVBQUV1RixnQkFBZ0IsR0FBRztRQUNuQkMsVUFBVTtRQUNWQyxhQUFhO1FBQ2JDLFFBQVE7SUFDVjtJQUVBLHNFQUFzRTtJQUN0RSxtRUFBbUU7SUFDbkUsMkJBQTJCO0lBQzNCLElBQUlDLFVBQVU7SUFFZCx1RUFBdUU7SUFDdkUsa0JBQWtCO0lBQ2xCLElBQUlDLFVBQVU7UUFDWixLQUFLO1FBQ0wsTUFBTTtRQUNOLE1BQU07UUFDTixNQUFNO1FBQ04sVUFBVTtRQUNWLFVBQVU7SUFDWjtJQUVBLElBQUlDLGVBQWU7SUFFbkIsSUFBSUMsYUFBYSxTQUFVQyxLQUFLO1FBQzlCLE9BQU8sT0FBT0gsT0FBTyxDQUFDRyxNQUFNO0lBQzlCO0lBRUEseURBQXlEO0lBQ3pELDBFQUEwRTtJQUMxRSw4RUFBOEU7SUFDOUUseUVBQXlFO0lBQ3pFLDRCQUE0QjtJQUM1QixJQUFJQyxpQkFBaUI7SUFFckIsdUVBQXVFO0lBQ3ZFLDRFQUE0RTtJQUM1RSx5REFBeUQ7SUFDekQsNkRBQTZEO0lBQzdEaEcsRUFBRWlHLFFBQVEsR0FBRyxTQUFVQyxJQUFJLEVBQUVDLFFBQVEsRUFBRUMsV0FBVztRQUNoRCxJQUFJLENBQUNELFlBQVlDLGFBQWFELFdBQVdDO1FBQ3pDRCxXQUFXbkcsRUFBRStFLFFBQVEsQ0FBQyxDQUFDLEdBQUdvQixVQUFVbkcsRUFBRXVGLGdCQUFnQjtRQUV0RCxrRUFBa0U7UUFDbEUsSUFBSWMsVUFBVUMsT0FDWjtZQUNHSCxDQUFBQSxTQUFTVCxNQUFNLElBQUlDLE9BQU0sRUFBR1YsTUFBTTtZQUNsQ2tCLENBQUFBLFNBQVNWLFdBQVcsSUFBSUUsT0FBTSxFQUFHVixNQUFNO1lBQ3ZDa0IsQ0FBQUEsU0FBU1gsUUFBUSxJQUFJRyxPQUFNLEVBQUdWLE1BQU07U0FDdEMsQ0FBQ3NCLElBQUksQ0FBQyxPQUFPLE1BQ2Q7UUFHRix1RUFBdUU7UUFDdkUsSUFBSXRELFFBQVE7UUFDWixJQUFJZ0MsU0FBUztRQUNiaUIsS0FBS00sT0FBTyxDQUNWSCxTQUNBLFNBQVVOLEtBQUssRUFBRUwsTUFBTSxFQUFFRCxXQUFXLEVBQUVELFFBQVEsRUFBRWlCLE1BQU07WUFDcER4QixVQUFVaUIsS0FBS3ZGLEtBQUssQ0FBQ3NDLE9BQU93RCxRQUFRRCxPQUFPLENBQUNYLGNBQWNDO1lBQzFEN0MsUUFBUXdELFNBQVNWLE1BQU1wRCxNQUFNO1lBRTdCLElBQUkrQyxRQUFRO2dCQUNWVCxVQUFVLGdCQUFnQlMsU0FBUztZQUNyQyxPQUFPLElBQUlELGFBQWE7Z0JBQ3RCUixVQUFVLGdCQUFnQlEsY0FBYztZQUMxQyxPQUFPLElBQUlELFVBQVU7Z0JBQ25CUCxVQUFVLFNBQVNPLFdBQVc7WUFDaEM7WUFFQSxtRUFBbUU7WUFDbkUsT0FBT087UUFDVDtRQUVGZCxVQUFVO1FBRVYsSUFBSXlCLFdBQVdQLFNBQVNRLFFBQVE7UUFDaEMsSUFBSUQsVUFBVTtZQUNaLDhEQUE4RDtZQUM5RCxJQUFJLENBQUNWLGVBQWVZLElBQUksQ0FBQ0YsV0FDdkIsTUFBTSxJQUFJRyxNQUFNLHdDQUF3Q0g7UUFDNUQsT0FBTztZQUNMLG9FQUFvRTtZQUNwRXpCLFNBQVMscUJBQXFCQSxTQUFTO1lBQ3ZDeUIsV0FBVztRQUNiO1FBRUF6QixTQUNFLDZDQUNBLHNEQUNBQSxTQUNBO1FBRUYsSUFBSTZCO1FBQ0osSUFBSTtZQUNGLHVDQUF1QztZQUN2Q0EsU0FBUyxJQUFJckcsU0FBUzBGLFNBQVNRLFFBQVEsSUFBSSxPQUFPLEtBQUsxQjtRQUN6RCxFQUFFLE9BQU84QixHQUFHO1lBQ1ZBLEVBQUU5QixNQUFNLEdBQUdBO1lBQ1gsTUFBTThCO1FBQ1I7UUFFQSxJQUFJZCxXQUFXLFNBQVVlLElBQUk7WUFDM0IsT0FBT0YsT0FBT2pFLElBQUksQ0FBQyxJQUFJLEVBQUVtRSxNQUFNaEg7UUFDakM7UUFFQSxtRUFBbUU7UUFDbkVpRyxTQUFTaEIsTUFBTSxHQUFHLGNBQWN5QixXQUFXLFNBQVN6QixTQUFTO1FBRTdELE9BQU9nQjtJQUNUO0lBRUEsb0JBQW9CO0lBQ3BCLE9BQU9qRztBQUNUIn0= }), 9461: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals document, window, navigator */ /** * Webflow: Brand pages on the subdomain */ var Webflow = __webpack_require__(3949); Webflow.define('brand', module.exports = function($) { var api = {}; var doc = document; var $html = $('html'); var $body = $('body'); var namespace = '.w-webflow-badge'; var location = window.location; var isPhantom = /PhantomJS/i.test(navigator.userAgent); var fullScreenEvents = 'fullscreenchange webkitfullscreenchange mozfullscreenchange msfullscreenchange'; var brandElement; // ----------------------------------- // Module methods api.ready = function() { var shouldBrand = $html.attr('data-wf-status'); var publishedDomain = $html.attr('data-wf-domain') || ''; if (/\.webflow\.io$/i.test(publishedDomain) && location.hostname !== publishedDomain) { shouldBrand = true; } if (shouldBrand && !isPhantom) { brandElement = brandElement || createBadge(); ensureBrand(); setTimeout(ensureBrand, 500); $(doc).off(fullScreenEvents, onFullScreenChange).on(fullScreenEvents, onFullScreenChange); } }; function onFullScreenChange() { var fullScreen = doc.fullScreen || doc.mozFullScreen || doc.webkitIsFullScreen || doc.msFullscreenElement || Boolean(doc.webkitFullscreenElement); $(brandElement).attr('style', fullScreen ? 'display: none !important;' : ''); } function createBadge() { var $brand = $('').attr('href', 'https://webflow.com?utm_campaign=brandjs'); var $logoArt = $('').attr('src', 'https://d3e54v103j8qbb.cloudfront.net/img/webflow-badge-icon-d2.89e12c322e.svg').attr('alt', '').css({ marginRight: '4px', width: '26px' }); var $logoText = $('').attr('src', 'https://d3e54v103j8qbb.cloudfront.net/img/webflow-badge-text-d2.c82cec3b78.svg').attr('alt', 'Made in Webflow'); $brand.append($logoArt, $logoText); return $brand[0]; } function ensureBrand() { var found = $body.children(namespace); var match = found.length && found.get(0) === brandElement; var inEditor = Webflow.env('editor'); if (match) { // Remove brand when Editor is active if (inEditor) { found.remove(); } // Exit early, brand is in place return; } // Remove any invalid brand elements if (found.length) { found.remove(); } // Append the brand (unless Editor is active) if (!inEditor) { $body.append(brandElement); } } // Export module return api; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NoYXJlZC9yZW5kZXIvcGx1Z2lucy9CYXNlU2l0ZU1vZHVsZXMvd2ViZmxvdy1icmFuZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIGRvY3VtZW50LCB3aW5kb3csIG5hdmlnYXRvciAqL1xuXG4vKipcbiAqIFdlYmZsb3c6IEJyYW5kIHBhZ2VzIG9uIHRoZSBzdWJkb21haW5cbiAqL1xuXG52YXIgV2ViZmxvdyA9IHJlcXVpcmUoJy4vd2ViZmxvdy1saWInKTtcblxuV2ViZmxvdy5kZWZpbmUoXG4gICdicmFuZCcsXG4gIChtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkKSB7XG4gICAgdmFyIGFwaSA9IHt9O1xuICAgIHZhciBkb2MgPSBkb2N1bWVudDtcbiAgICB2YXIgJGh0bWwgPSAkKCdodG1sJyk7XG4gICAgdmFyICRib2R5ID0gJCgnYm9keScpO1xuICAgIHZhciBuYW1lc3BhY2UgPSAnLnctd2ViZmxvdy1iYWRnZSc7XG4gICAgdmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuICAgIHZhciBpc1BoYW50b20gPSAvUGhhbnRvbUpTL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICB2YXIgZnVsbFNjcmVlbkV2ZW50cyA9XG4gICAgICAnZnVsbHNjcmVlbmNoYW5nZSB3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIG1vemZ1bGxzY3JlZW5jaGFuZ2UgbXNmdWxsc2NyZWVuY2hhbmdlJztcbiAgICB2YXIgYnJhbmRFbGVtZW50O1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBNb2R1bGUgbWV0aG9kc1xuXG4gICAgYXBpLnJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHNob3VsZEJyYW5kID0gJGh0bWwuYXR0cignZGF0YS13Zi1zdGF0dXMnKTtcbiAgICAgIHZhciBwdWJsaXNoZWREb21haW4gPSAkaHRtbC5hdHRyKCdkYXRhLXdmLWRvbWFpbicpIHx8ICcnO1xuICAgICAgaWYgKFxuICAgICAgICAvXFwud2ViZmxvd1xcLmlvJC9pLnRlc3QocHVibGlzaGVkRG9tYWluKSAmJlxuICAgICAgICBsb2NhdGlvbi5ob3N0bmFtZSAhPT0gcHVibGlzaGVkRG9tYWluXG4gICAgICApIHtcbiAgICAgICAgc2hvdWxkQnJhbmQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHNob3VsZEJyYW5kICYmICFpc1BoYW50b20pIHtcbiAgICAgICAgYnJhbmRFbGVtZW50ID0gYnJhbmRFbGVtZW50IHx8IGNyZWF0ZUJhZGdlKCk7XG4gICAgICAgIGVuc3VyZUJyYW5kKCk7XG4gICAgICAgIHNldFRpbWVvdXQoZW5zdXJlQnJhbmQsIDUwMCk7XG5cbiAgICAgICAgJChkb2MpXG4gICAgICAgICAgLm9mZihmdWxsU2NyZWVuRXZlbnRzLCBvbkZ1bGxTY3JlZW5DaGFuZ2UpXG4gICAgICAgICAgLm9uKGZ1bGxTY3JlZW5FdmVudHMsIG9uRnVsbFNjcmVlbkNoYW5nZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9uRnVsbFNjcmVlbkNoYW5nZSgpIHtcbiAgICAgIHZhciBmdWxsU2NyZWVuID1cbiAgICAgICAgZG9jLmZ1bGxTY3JlZW4gfHxcbiAgICAgICAgZG9jLm1vekZ1bGxTY3JlZW4gfHxcbiAgICAgICAgZG9jLndlYmtpdElzRnVsbFNjcmVlbiB8fFxuICAgICAgICBkb2MubXNGdWxsc2NyZWVuRWxlbWVudCB8fFxuICAgICAgICBCb29sZWFuKGRvYy53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCk7XG4gICAgICAkKGJyYW5kRWxlbWVudCkuYXR0cihcbiAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgZnVsbFNjcmVlbiA/ICdkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7JyA6ICcnXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUJhZGdlKCkge1xuICAgICAgdmFyICRicmFuZCA9ICQoJzxhIGNsYXNzPVwidy13ZWJmbG93LWJhZGdlXCI+PC9hPicpLmF0dHIoXG4gICAgICAgICdocmVmJyxcbiAgICAgICAgJ2h0dHBzOi8vd2ViZmxvdy5jb20/dXRtX2NhbXBhaWduPWJyYW5kanMnXG4gICAgICApO1xuXG4gICAgICB2YXIgJGxvZ29BcnQgPSAkKCc8aW1nPicpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICdzcmMnLFxuICAgICAgICAgICdodHRwczovL2QzZTU0djEwM2o4cWJiLmNsb3VkZnJvbnQubmV0L2ltZy93ZWJmbG93LWJhZGdlLWljb24tZDIuODllMTJjMzIyZS5zdmcnXG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoJ2FsdCcsICcnKVxuICAgICAgICAuY3NzKHtcbiAgICAgICAgICBtYXJnaW5SaWdodDogJzRweCcsXG4gICAgICAgICAgd2lkdGg6ICcyNnB4JyxcbiAgICAgICAgfSk7XG5cbiAgICAgIHZhciAkbG9nb1RleHQgPSAkKCc8aW1nPicpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICdzcmMnLFxuICAgICAgICAgICdodHRwczovL2QzZTU0djEwM2o4cWJiLmNsb3VkZnJvbnQubmV0L2ltZy93ZWJmbG93LWJhZGdlLXRleHQtZDIuYzgyY2VjM2I3OC5zdmcnXG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoJ2FsdCcsICdNYWRlIGluIFdlYmZsb3cnKTtcblxuICAgICAgJGJyYW5kLmFwcGVuZCgkbG9nb0FydCwgJGxvZ29UZXh0KTtcbiAgICAgIHJldHVybiAkYnJhbmRbMF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5zdXJlQnJhbmQoKSB7XG4gICAgICB2YXIgZm91bmQgPSAkYm9keS5jaGlsZHJlbihuYW1lc3BhY2UpO1xuICAgICAgdmFyIG1hdGNoID0gZm91bmQubGVuZ3RoICYmIGZvdW5kLmdldCgwKSA9PT0gYnJhbmRFbGVtZW50O1xuICAgICAgdmFyIGluRWRpdG9yID0gV2ViZmxvdy5lbnYoJ2VkaXRvcicpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIC8vIFJlbW92ZSBicmFuZCB3aGVuIEVkaXRvciBpcyBhY3RpdmVcbiAgICAgICAgaWYgKGluRWRpdG9yKSB7XG4gICAgICAgICAgZm91bmQucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRXhpdCBlYXJseSwgYnJhbmQgaXMgaW4gcGxhY2VcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUmVtb3ZlIGFueSBpbnZhbGlkIGJyYW5kIGVsZW1lbnRzXG4gICAgICBpZiAoZm91bmQubGVuZ3RoKSB7XG4gICAgICAgIGZvdW5kLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgLy8gQXBwZW5kIHRoZSBicmFuZCAodW5sZXNzIEVkaXRvciBpcyBhY3RpdmUpXG4gICAgICBpZiAoIWluRWRpdG9yKSB7XG4gICAgICAgICRib2R5LmFwcGVuZChicmFuZEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4cG9ydCBtb2R1bGVcbiAgICByZXR1cm4gYXBpO1xuICB9KVxuKTtcbiJdLCJuYW1lcyI6WyJXZWJmbG93IiwicmVxdWlyZSIsImRlZmluZSIsIm1vZHVsZSIsImV4cG9ydHMiLCIkIiwiYXBpIiwiZG9jIiwiZG9jdW1lbnQiLCIkaHRtbCIsIiRib2R5IiwibmFtZXNwYWNlIiwibG9jYXRpb24iLCJ3aW5kb3ciLCJpc1BoYW50b20iLCJ0ZXN0IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiZnVsbFNjcmVlbkV2ZW50cyIsImJyYW5kRWxlbWVudCIsInJlYWR5Iiwic2hvdWxkQnJhbmQiLCJhdHRyIiwicHVibGlzaGVkRG9tYWluIiwiaG9zdG5hbWUiLCJjcmVhdGVCYWRnZSIsImVuc3VyZUJyYW5kIiwic2V0VGltZW91dCIsIm9mZiIsIm9uRnVsbFNjcmVlbkNoYW5nZSIsIm9uIiwiZnVsbFNjcmVlbiIsIm1vekZ1bGxTY3JlZW4iLCJ3ZWJraXRJc0Z1bGxTY3JlZW4iLCJtc0Z1bGxzY3JlZW5FbGVtZW50IiwiQm9vbGVhbiIsIndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50IiwiJGJyYW5kIiwiJGxvZ29BcnQiLCJjc3MiLCJtYXJnaW5SaWdodCIsIndpZHRoIiwiJGxvZ29UZXh0IiwiYXBwZW5kIiwiZm91bmQiLCJjaGlsZHJlbiIsIm1hdGNoIiwibGVuZ3RoIiwiZ2V0IiwiaW5FZGl0b3IiLCJlbnYiLCJyZW1vdmUiXSwibWFwcGluZ3MiOiJBQUFBLHVDQUF1QyxHQUV2Qzs7Q0FFQztBQUVELElBQUlBLFVBQVVDLFFBQVE7QUFFdEJELFFBQVFFLE1BQU0sQ0FDWixTQUNDQyxPQUFPQyxPQUFPLEdBQUcsU0FBVUMsQ0FBQztJQUMzQixJQUFJQyxNQUFNLENBQUM7SUFDWCxJQUFJQyxNQUFNQztJQUNWLElBQUlDLFFBQVFKLEVBQUU7SUFDZCxJQUFJSyxRQUFRTCxFQUFFO0lBQ2QsSUFBSU0sWUFBWTtJQUNoQixJQUFJQyxXQUFXQyxPQUFPRCxRQUFRO0lBQzlCLElBQUlFLFlBQVksYUFBYUMsSUFBSSxDQUFDQyxVQUFVQyxTQUFTO0lBQ3JELElBQUlDLG1CQUNGO0lBQ0YsSUFBSUM7SUFFSixzQ0FBc0M7SUFDdEMsaUJBQWlCO0lBRWpCYixJQUFJYyxLQUFLLEdBQUc7UUFDVixJQUFJQyxjQUFjWixNQUFNYSxJQUFJLENBQUM7UUFDN0IsSUFBSUMsa0JBQWtCZCxNQUFNYSxJQUFJLENBQUMscUJBQXFCO1FBQ3RELElBQ0Usa0JBQWtCUCxJQUFJLENBQUNRLG9CQUN2QlgsU0FBU1ksUUFBUSxLQUFLRCxpQkFDdEI7WUFDQUYsY0FBYztRQUNoQjtRQUNBLElBQUlBLGVBQWUsQ0FBQ1AsV0FBVztZQUM3QkssZUFBZUEsZ0JBQWdCTTtZQUMvQkM7WUFDQUMsV0FBV0QsYUFBYTtZQUV4QnJCLEVBQUVFLEtBQ0NxQixHQUFHLENBQUNWLGtCQUFrQlcsb0JBQ3RCQyxFQUFFLENBQUNaLGtCQUFrQlc7UUFDMUI7SUFDRjtJQUVBLFNBQVNBO1FBQ1AsSUFBSUUsYUFDRnhCLElBQUl3QixVQUFVLElBQ2R4QixJQUFJeUIsYUFBYSxJQUNqQnpCLElBQUkwQixrQkFBa0IsSUFDdEIxQixJQUFJMkIsbUJBQW1CLElBQ3ZCQyxRQUFRNUIsSUFBSTZCLHVCQUF1QjtRQUNyQy9CLEVBQUVjLGNBQWNHLElBQUksQ0FDbEIsU0FDQVMsYUFBYSw4QkFBOEI7SUFFL0M7SUFFQSxTQUFTTjtRQUNQLElBQUlZLFNBQVNoQyxFQUFFLG1DQUFtQ2lCLElBQUksQ0FDcEQsUUFDQTtRQUdGLElBQUlnQixXQUFXakMsRUFBRSxTQUNkaUIsSUFBSSxDQUNILE9BQ0Esa0ZBRURBLElBQUksQ0FBQyxPQUFPLElBQ1ppQixHQUFHLENBQUM7WUFDSEMsYUFBYTtZQUNiQyxPQUFPO1FBQ1Q7UUFFRixJQUFJQyxZQUFZckMsRUFBRSxTQUNmaUIsSUFBSSxDQUNILE9BQ0Esa0ZBRURBLElBQUksQ0FBQyxPQUFPO1FBRWZlLE9BQU9NLE1BQU0sQ0FBQ0wsVUFBVUk7UUFDeEIsT0FBT0wsTUFBTSxDQUFDLEVBQUU7SUFDbEI7SUFFQSxTQUFTWDtRQUNQLElBQUlrQixRQUFRbEMsTUFBTW1DLFFBQVEsQ0FBQ2xDO1FBQzNCLElBQUltQyxRQUFRRixNQUFNRyxNQUFNLElBQUlILE1BQU1JLEdBQUcsQ0FBQyxPQUFPN0I7UUFDN0MsSUFBSThCLFdBQVdqRCxRQUFRa0QsR0FBRyxDQUFDO1FBQzNCLElBQUlKLE9BQU87WUFDVCxxQ0FBcUM7WUFDckMsSUFBSUcsVUFBVTtnQkFDWkwsTUFBTU8sTUFBTTtZQUNkO1lBQ0EsZ0NBQWdDO1lBQ2hDO1FBQ0Y7UUFDQSxvQ0FBb0M7UUFDcEMsSUFBSVAsTUFBTUcsTUFBTSxFQUFFO1lBQ2hCSCxNQUFNTyxNQUFNO1FBQ2Q7UUFDQSw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDRixVQUFVO1lBQ2J2QyxNQUFNaUMsTUFBTSxDQUFDeEI7UUFDZjtJQUNGO0lBRUEsZ0JBQWdCO0lBQ2hCLE9BQU9iO0FBQ1QifQ== }), 2338: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals window, document */ /** * Webflow: focus-visible */ var Webflow = __webpack_require__(3949); /* * This polyfill comes from https://github.com/WICG/focus-visible */ Webflow.define('focus-visible', module.exports = function() { /** * Applies the :focus-visible polyfill at the given scope. * A scope in this case is either the top-level Document or a Shadow Root. * * @param {(Document|ShadowRoot)} scope * @see https://github.com/WICG/focus-visible */ function applyFocusVisiblePolyfill(scope) { var hadKeyboardEvent = true; var hadFocusVisibleRecently = false; var hadFocusVisibleRecentlyTimeout = null; var inputTypesAllowlist = { text: true, search: true, url: true, tel: true, email: true, password: true, number: true, date: true, month: true, week: true, time: true, datetime: true, 'datetime-local': true }; /** * Helper function for legacy browsers and iframes which sometimes focus * elements like document, body, and non-interactive SVG. * @param {Element} el */ function isValidFocusTarget(el) { if (el && el !== document && el.nodeName !== 'HTML' && el.nodeName !== 'BODY' && 'classList' in el && 'contains' in el.classList) { return true; } return false; } /** * Computes whether the given element should automatically trigger the * `focus-visible` class being added, i.e. whether it should always match * `:focus-visible` when focused. * @param {Element} el * @return {boolean} */ function focusTriggersKeyboardModality(el) { var type = el.type; var tagName = el.tagName; if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) { return true; } if (tagName === 'TEXTAREA' && !el.readOnly) { return true; } if (el.isContentEditable) { return true; } return false; } function addFocusVisibleAttribute(el) { if (el.getAttribute('data-wf-focus-visible')) { return; } el.setAttribute('data-wf-focus-visible', 'true'); } function removeFocusVisibleAttribute(el) { if (!el.getAttribute('data-wf-focus-visible')) { return; } el.removeAttribute('data-wf-focus-visible'); } /** * If the most recent user interaction was via the keyboard; * and the key press did not include a meta, alt/option, or control key; * then the modality is keyboard. Otherwise, the modality is not keyboard. * Apply `focus-visible` to any current active element and keep track * of our keyboard modality state with `hadKeyboardEvent`. * @param {KeyboardEvent} e */ function onKeyDown(e) { if (e.metaKey || e.altKey || e.ctrlKey) { return; } if (isValidFocusTarget(scope.activeElement)) { addFocusVisibleAttribute(scope.activeElement); } hadKeyboardEvent = true; } /** * If at any point a user clicks with a pointing device, ensure that we change * the modality away from keyboard. * This avoids the situation where a user presses a key on an already focused * element, and then clicks on a different element, focusing it with a * pointing device, while we still think we're in keyboard modality. * @param {Event} e */ function onPointerDown() { hadKeyboardEvent = false; } /** * On `focus`, add the `focus-visible` class to the target if: * - the target received focus as a result of keyboard navigation, or * - the event target is an element that will likely require interaction * via the keyboard (e.g. a text box) * @param {Event} e */ function onFocus(e) { // Prevent IE from focusing the document or HTML element. if (!isValidFocusTarget(e.target)) { return; } if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) { addFocusVisibleAttribute(e.target); } } /** * On `blur`, remove the `focus-visible` class from the target. * @param {Event} e */ function onBlur(e) { if (!isValidFocusTarget(e.target)) { return; } if (e.target.hasAttribute('data-wf-focus-visible')) { // To detect a tab/window switch, we look for a blur event followed // rapidly by a visibility change. // If we don't see a visibility change within 100ms, it's probably a // regular focus change. hadFocusVisibleRecently = true; window.clearTimeout(hadFocusVisibleRecentlyTimeout); hadFocusVisibleRecentlyTimeout = window.setTimeout(function() { hadFocusVisibleRecently = false; }, 100); removeFocusVisibleAttribute(e.target); } } /** * If the user changes tabs, keep track of whether or not the previously * focused element had .focus-visible. * @param {Event} e */ function onVisibilityChange() { if (document.visibilityState === 'hidden') { // If the tab becomes active again, the browser will handle calling focus // on the element (Safari actually calls it twice). // If this tab change caused a blur on an element with focus-visible, // re-apply the class when the user switches back to the tab. if (hadFocusVisibleRecently) { hadKeyboardEvent = true; } addInitialPointerMoveListeners(); } } /** * Add a group of listeners to detect usage of any pointing devices. * These listeners will be added when the polyfill first loads, and anytime * the window is blurred, so that they are active when the window regains * focus. */ function addInitialPointerMoveListeners() { document.addEventListener('mousemove', onInitialPointerMove); document.addEventListener('mousedown', onInitialPointerMove); document.addEventListener('mouseup', onInitialPointerMove); document.addEventListener('pointermove', onInitialPointerMove); document.addEventListener('pointerdown', onInitialPointerMove); document.addEventListener('pointerup', onInitialPointerMove); document.addEventListener('touchmove', onInitialPointerMove); document.addEventListener('touchstart', onInitialPointerMove); document.addEventListener('touchend', onInitialPointerMove); } function removeInitialPointerMoveListeners() { document.removeEventListener('mousemove', onInitialPointerMove); document.removeEventListener('mousedown', onInitialPointerMove); document.removeEventListener('mouseup', onInitialPointerMove); document.removeEventListener('pointermove', onInitialPointerMove); document.removeEventListener('pointerdown', onInitialPointerMove); document.removeEventListener('pointerup', onInitialPointerMove); document.removeEventListener('touchmove', onInitialPointerMove); document.removeEventListener('touchstart', onInitialPointerMove); document.removeEventListener('touchend', onInitialPointerMove); } /** * When the polfyill first loads, assume the user is in keyboard modality. * If any event is received from a pointing device (e.g. mouse, pointer, * touch), turn off keyboard modality. * This accounts for situations where focus enters the page from the URL bar. * @param {Event} e */ function onInitialPointerMove(e) { // Work around a Safari quirk that fires a mousemove on whenever the // window blurs, even if you're tabbing out of the page. ¯\_(ツ)_/¯ if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') { return; } hadKeyboardEvent = false; removeInitialPointerMoveListeners(); } // For some kinds of state, we are interested in changes at the global scope // only. For example, global pointer input, global key presses and global // visibility change should affect the state at every scope: document.addEventListener('keydown', onKeyDown, true); document.addEventListener('mousedown', onPointerDown, true); document.addEventListener('pointerdown', onPointerDown, true); document.addEventListener('touchstart', onPointerDown, true); document.addEventListener('visibilitychange', onVisibilityChange, true); addInitialPointerMoveListeners(); // For focus and blur, we specifically care about state changes in the local // scope. This is because focus / blur events that originate from within a // shadow root are not re-dispatched from the host element if it was already // the active element in its own scope: scope.addEventListener('focus', onFocus, true); scope.addEventListener('blur', onBlur, true); } function ready() { if (typeof document !== 'undefined') { try { // check for native support; this will throw if the selector is not considered valid document.querySelector(':focus-visible'); } catch (e) { // :focus-visible pseudo-selector is not supported natively applyFocusVisiblePolyfill(document); } } } // Export module return { ready }; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NoYXJlZC9yZW5kZXIvcGx1Z2lucy9CYXNlU2l0ZU1vZHVsZXMvd2ViZmxvdy1mb2N1cy12aXNpYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbHMgd2luZG93LCBkb2N1bWVudCAqL1xuXG4vKipcbiAqIFdlYmZsb3c6IGZvY3VzLXZpc2libGVcbiAqL1xuXG52YXIgV2ViZmxvdyA9IHJlcXVpcmUoJy4vd2ViZmxvdy1saWInKTtcblxuLypcbiAqIFRoaXMgcG9seWZpbGwgY29tZXMgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlXG4gKi9cbldlYmZsb3cuZGVmaW5lKFxuICAnZm9jdXMtdmlzaWJsZScsXG4gIChtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSA6Zm9jdXMtdmlzaWJsZSBwb2x5ZmlsbCBhdCB0aGUgZ2l2ZW4gc2NvcGUuXG4gICAgICogQSBzY29wZSBpbiB0aGlzIGNhc2UgaXMgZWl0aGVyIHRoZSB0b3AtbGV2ZWwgRG9jdW1lbnQgb3IgYSBTaGFkb3cgUm9vdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7KERvY3VtZW50fFNoYWRvd1Jvb3QpfSBzY29wZVxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFwcGx5Rm9jdXNWaXNpYmxlUG9seWZpbGwoc2NvcGUpIHtcbiAgICAgIHZhciBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbiAgICAgIHZhciBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IGZhbHNlO1xuICAgICAgdmFyIGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5VGltZW91dCA9IG51bGw7XG5cbiAgICAgIHZhciBpbnB1dFR5cGVzQWxsb3dsaXN0ID0ge1xuICAgICAgICB0ZXh0OiB0cnVlLFxuICAgICAgICBzZWFyY2g6IHRydWUsXG4gICAgICAgIHVybDogdHJ1ZSxcbiAgICAgICAgdGVsOiB0cnVlLFxuICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgcGFzc3dvcmQ6IHRydWUsXG4gICAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgbW9udGg6IHRydWUsXG4gICAgICAgIHdlZWs6IHRydWUsXG4gICAgICAgIHRpbWU6IHRydWUsXG4gICAgICAgIGRhdGV0aW1lOiB0cnVlLFxuICAgICAgICAnZGF0ZXRpbWUtbG9jYWwnOiB0cnVlLFxuICAgICAgfTtcblxuICAgICAgLyoqXG4gICAgICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGxlZ2FjeSBicm93c2VycyBhbmQgaWZyYW1lcyB3aGljaCBzb21ldGltZXMgZm9jdXNcbiAgICAgICAqIGVsZW1lbnRzIGxpa2UgZG9jdW1lbnQsIGJvZHksIGFuZCBub24taW50ZXJhY3RpdmUgU1ZHLlxuICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBpc1ZhbGlkRm9jdXNUYXJnZXQoZWwpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGVsICYmXG4gICAgICAgICAgZWwgIT09IGRvY3VtZW50ICYmXG4gICAgICAgICAgZWwubm9kZU5hbWUgIT09ICdIVE1MJyAmJlxuICAgICAgICAgIGVsLm5vZGVOYW1lICE9PSAnQk9EWScgJiZcbiAgICAgICAgICAnY2xhc3NMaXN0JyBpbiBlbCAmJlxuICAgICAgICAgICdjb250YWlucycgaW4gZWwuY2xhc3NMaXN0XG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBDb21wdXRlcyB3aGV0aGVyIHRoZSBnaXZlbiBlbGVtZW50IHNob3VsZCBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgdGhlXG4gICAgICAgKiBgZm9jdXMtdmlzaWJsZWAgY2xhc3MgYmVpbmcgYWRkZWQsIGkuZS4gd2hldGhlciBpdCBzaG91bGQgYWx3YXlzIG1hdGNoXG4gICAgICAgKiBgOmZvY3VzLXZpc2libGVgIHdoZW4gZm9jdXNlZC5cbiAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIGZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5KGVsKSB7XG4gICAgICAgIHZhciB0eXBlID0gZWwudHlwZTtcbiAgICAgICAgdmFyIHRhZ05hbWUgPSBlbC50YWdOYW1lO1xuXG4gICAgICAgIGlmICh0YWdOYW1lID09PSAnSU5QVVQnICYmIGlucHV0VHlwZXNBbGxvd2xpc3RbdHlwZV0gJiYgIWVsLnJlYWRPbmx5KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyAmJiAhZWwucmVhZE9ubHkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbC5pc0NvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBhZGRGb2N1c1Zpc2libGVBdHRyaWJ1dGUoZWwpIHtcbiAgICAgICAgaWYgKGVsLmdldEF0dHJpYnV0ZSgnZGF0YS13Zi1mb2N1cy12aXNpYmxlJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLXdmLWZvY3VzLXZpc2libGUnLCAndHJ1ZScpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZW1vdmVGb2N1c1Zpc2libGVBdHRyaWJ1dGUoZWwpIHtcbiAgICAgICAgaWYgKCFlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtd2YtZm9jdXMtdmlzaWJsZScpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS13Zi1mb2N1cy12aXNpYmxlJyk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogSWYgdGhlIG1vc3QgcmVjZW50IHVzZXIgaW50ZXJhY3Rpb24gd2FzIHZpYSB0aGUga2V5Ym9hcmQ7XG4gICAgICAgKiBhbmQgdGhlIGtleSBwcmVzcyBkaWQgbm90IGluY2x1ZGUgYSBtZXRhLCBhbHQvb3B0aW9uLCBvciBjb250cm9sIGtleTtcbiAgICAgICAqIHRoZW4gdGhlIG1vZGFsaXR5IGlzIGtleWJvYXJkLiBPdGhlcndpc2UsIHRoZSBtb2RhbGl0eSBpcyBub3Qga2V5Ym9hcmQuXG4gICAgICAgKiBBcHBseSBgZm9jdXMtdmlzaWJsZWAgdG8gYW55IGN1cnJlbnQgYWN0aXZlIGVsZW1lbnQgYW5kIGtlZXAgdHJhY2tcbiAgICAgICAqIG9mIG91ciBrZXlib2FyZCBtb2RhbGl0eSBzdGF0ZSB3aXRoIGBoYWRLZXlib2FyZEV2ZW50YC5cbiAgICAgICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZVxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBvbktleURvd24oZSkge1xuICAgICAgICBpZiAoZS5tZXRhS2V5IHx8IGUuYWx0S2V5IHx8IGUuY3RybEtleSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1ZhbGlkRm9jdXNUYXJnZXQoc2NvcGUuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICBhZGRGb2N1c1Zpc2libGVBdHRyaWJ1dGUoc2NvcGUuYWN0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBJZiBhdCBhbnkgcG9pbnQgYSB1c2VyIGNsaWNrcyB3aXRoIGEgcG9pbnRpbmcgZGV2aWNlLCBlbnN1cmUgdGhhdCB3ZSBjaGFuZ2VcbiAgICAgICAqIHRoZSBtb2RhbGl0eSBhd2F5IGZyb20ga2V5Ym9hcmQuXG4gICAgICAgKiBUaGlzIGF2b2lkcyB0aGUgc2l0dWF0aW9uIHdoZXJlIGEgdXNlciBwcmVzc2VzIGEga2V5IG9uIGFuIGFscmVhZHkgZm9jdXNlZFxuICAgICAgICogZWxlbWVudCwgYW5kIHRoZW4gY2xpY2tzIG9uIGEgZGlmZmVyZW50IGVsZW1lbnQsIGZvY3VzaW5nIGl0IHdpdGggYVxuICAgICAgICogcG9pbnRpbmcgZGV2aWNlLCB3aGlsZSB3ZSBzdGlsbCB0aGluayB3ZSdyZSBpbiBrZXlib2FyZCBtb2RhbGl0eS5cbiAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gb25Qb2ludGVyRG93bigpIHtcbiAgICAgICAgaGFkS2V5Ym9hcmRFdmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIE9uIGBmb2N1c2AsIGFkZCB0aGUgYGZvY3VzLXZpc2libGVgIGNsYXNzIHRvIHRoZSB0YXJnZXQgaWY6XG4gICAgICAgKiAtIHRoZSB0YXJnZXQgcmVjZWl2ZWQgZm9jdXMgYXMgYSByZXN1bHQgb2Yga2V5Ym9hcmQgbmF2aWdhdGlvbiwgb3JcbiAgICAgICAqIC0gdGhlIGV2ZW50IHRhcmdldCBpcyBhbiBlbGVtZW50IHRoYXQgd2lsbCBsaWtlbHkgcmVxdWlyZSBpbnRlcmFjdGlvblxuICAgICAgICogICB2aWEgdGhlIGtleWJvYXJkIChlLmcuIGEgdGV4dCBib3gpXG4gICAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIG9uRm9jdXMoZSkge1xuICAgICAgICAvLyBQcmV2ZW50IElFIGZyb20gZm9jdXNpbmcgdGhlIGRvY3VtZW50IG9yIEhUTUwgZWxlbWVudC5cbiAgICAgICAgaWYgKCFpc1ZhbGlkRm9jdXNUYXJnZXQoZS50YXJnZXQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhZEtleWJvYXJkRXZlbnQgfHwgZm9jdXNUcmlnZ2Vyc0tleWJvYXJkTW9kYWxpdHkoZS50YXJnZXQpKSB7XG4gICAgICAgICAgYWRkRm9jdXNWaXNpYmxlQXR0cmlidXRlKGUudGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIE9uIGBibHVyYCwgcmVtb3ZlIHRoZSBgZm9jdXMtdmlzaWJsZWAgY2xhc3MgZnJvbSB0aGUgdGFyZ2V0LlxuICAgICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBvbkJsdXIoZSkge1xuICAgICAgICBpZiAoIWlzVmFsaWRGb2N1c1RhcmdldChlLnRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZS50YXJnZXQuaGFzQXR0cmlidXRlKCdkYXRhLXdmLWZvY3VzLXZpc2libGUnKSkge1xuICAgICAgICAgIC8vIFRvIGRldGVjdCBhIHRhYi93aW5kb3cgc3dpdGNoLCB3ZSBsb29rIGZvciBhIGJsdXIgZXZlbnQgZm9sbG93ZWRcbiAgICAgICAgICAvLyByYXBpZGx5IGJ5IGEgdmlzaWJpbGl0eSBjaGFuZ2UuXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3Qgc2VlIGEgdmlzaWJpbGl0eSBjaGFuZ2Ugd2l0aGluIDEwMG1zLCBpdCdzIHByb2JhYmx5IGFcbiAgICAgICAgICAvLyByZWd1bGFyIGZvY3VzIGNoYW5nZS5cbiAgICAgICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IHRydWU7XG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQpO1xuICAgICAgICAgIGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5ID0gZmFsc2U7XG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICByZW1vdmVGb2N1c1Zpc2libGVBdHRyaWJ1dGUoZS50YXJnZXQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogSWYgdGhlIHVzZXIgY2hhbmdlcyB0YWJzLCBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHRoZSBwcmV2aW91c2x5XG4gICAgICAgKiBmb2N1c2VkIGVsZW1lbnQgaGFkIC5mb2N1cy12aXNpYmxlLlxuICAgICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBvblZpc2liaWxpdHlDaGFuZ2UoKSB7XG4gICAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHRhYiBiZWNvbWVzIGFjdGl2ZSBhZ2FpbiwgdGhlIGJyb3dzZXIgd2lsbCBoYW5kbGUgY2FsbGluZyBmb2N1c1xuICAgICAgICAgIC8vIG9uIHRoZSBlbGVtZW50IChTYWZhcmkgYWN0dWFsbHkgY2FsbHMgaXQgdHdpY2UpLlxuICAgICAgICAgIC8vIElmIHRoaXMgdGFiIGNoYW5nZSBjYXVzZWQgYSBibHVyIG9uIGFuIGVsZW1lbnQgd2l0aCBmb2N1cy12aXNpYmxlLFxuICAgICAgICAgIC8vIHJlLWFwcGx5IHRoZSBjbGFzcyB3aGVuIHRoZSB1c2VyIHN3aXRjaGVzIGJhY2sgdG8gdGhlIHRhYi5cbiAgICAgICAgICBpZiAoaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkpIHtcbiAgICAgICAgICAgIGhhZEtleWJvYXJkRXZlbnQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZGRJbml0aWFsUG9pbnRlck1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIEFkZCBhIGdyb3VwIG9mIGxpc3RlbmVycyB0byBkZXRlY3QgdXNhZ2Ugb2YgYW55IHBvaW50aW5nIGRldmljZXMuXG4gICAgICAgKiBUaGVzZSBsaXN0ZW5lcnMgd2lsbCBiZSBhZGRlZCB3aGVuIHRoZSBwb2x5ZmlsbCBmaXJzdCBsb2FkcywgYW5kIGFueXRpbWVcbiAgICAgICAqIHRoZSB3aW5kb3cgaXMgYmx1cnJlZCwgc28gdGhhdCB0aGV5IGFyZSBhY3RpdmUgd2hlbiB0aGUgd2luZG93IHJlZ2FpbnNcbiAgICAgICAqIGZvY3VzLlxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBhZGRJbml0aWFsUG9pbnRlck1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcmVtb3ZlSW5pdGlhbFBvaW50ZXJNb3ZlTGlzdGVuZXJzKCkge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgb25Jbml0aWFsUG9pbnRlck1vdmUpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvbkluaXRpYWxQb2ludGVyTW92ZSk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogV2hlbiB0aGUgcG9sZnlpbGwgZmlyc3QgbG9hZHMsIGFzc3VtZSB0aGUgdXNlciBpcyBpbiBrZXlib2FyZCBtb2RhbGl0eS5cbiAgICAgICAqIElmIGFueSBldmVudCBpcyByZWNlaXZlZCBmcm9tIGEgcG9pbnRpbmcgZGV2aWNlIChlLmcuIG1vdXNlLCBwb2ludGVyLFxuICAgICAgICogdG91Y2gpLCB0dXJuIG9mZiBrZXlib2FyZCBtb2RhbGl0eS5cbiAgICAgICAqIFRoaXMgYWNjb3VudHMgZm9yIHNpdHVhdGlvbnMgd2hlcmUgZm9jdXMgZW50ZXJzIHRoZSBwYWdlIGZyb20gdGhlIFVSTCBiYXIuXG4gICAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIG9uSW5pdGlhbFBvaW50ZXJNb3ZlKGUpIHtcbiAgICAgICAgLy8gV29yayBhcm91bmQgYSBTYWZhcmkgcXVpcmsgdGhhdCBmaXJlcyBhIG1vdXNlbW92ZSBvbiA8aHRtbD4gd2hlbmV2ZXIgdGhlXG4gICAgICAgIC8vIHdpbmRvdyBibHVycywgZXZlbiBpZiB5b3UncmUgdGFiYmluZyBvdXQgb2YgdGhlIHBhZ2UuIMKvXFxfKOODhClfL8KvXG4gICAgICAgIGlmIChlLnRhcmdldC5ub2RlTmFtZSAmJiBlLnRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaHRtbCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBoYWRLZXlib2FyZEV2ZW50ID0gZmFsc2U7XG4gICAgICAgIHJlbW92ZUluaXRpYWxQb2ludGVyTW92ZUxpc3RlbmVycygpO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3Igc29tZSBraW5kcyBvZiBzdGF0ZSwgd2UgYXJlIGludGVyZXN0ZWQgaW4gY2hhbmdlcyBhdCB0aGUgZ2xvYmFsIHNjb3BlXG4gICAgICAvLyBvbmx5LiBGb3IgZXhhbXBsZSwgZ2xvYmFsIHBvaW50ZXIgaW5wdXQsIGdsb2JhbCBrZXkgcHJlc3NlcyBhbmQgZ2xvYmFsXG4gICAgICAvLyB2aXNpYmlsaXR5IGNoYW5nZSBzaG91bGQgYWZmZWN0IHRoZSBzdGF0ZSBhdCBldmVyeSBzY29wZTpcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24sIHRydWUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Qb2ludGVyRG93biwgdHJ1ZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIG9uUG9pbnRlckRvd24sIHRydWUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uUG9pbnRlckRvd24sIHRydWUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJpbGl0eUNoYW5nZSwgdHJ1ZSk7XG5cbiAgICAgIGFkZEluaXRpYWxQb2ludGVyTW92ZUxpc3RlbmVycygpO1xuXG4gICAgICAvLyBGb3IgZm9jdXMgYW5kIGJsdXIsIHdlIHNwZWNpZmljYWxseSBjYXJlIGFib3V0IHN0YXRlIGNoYW5nZXMgaW4gdGhlIGxvY2FsXG4gICAgICAvLyBzY29wZS4gVGhpcyBpcyBiZWNhdXNlIGZvY3VzIC8gYmx1ciBldmVudHMgdGhhdCBvcmlnaW5hdGUgZnJvbSB3aXRoaW4gYVxuICAgICAgLy8gc2hhZG93IHJvb3QgYXJlIG5vdCByZS1kaXNwYXRjaGVkIGZyb20gdGhlIGhvc3QgZWxlbWVudCBpZiBpdCB3YXMgYWxyZWFkeVxuICAgICAgLy8gdGhlIGFjdGl2ZSBlbGVtZW50IGluIGl0cyBvd24gc2NvcGU6XG4gICAgICBzY29wZS5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIG9uRm9jdXMsIHRydWUpO1xuICAgICAgc2NvcGUuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uQmx1ciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhZHkoKSB7XG4gICAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIGNoZWNrIGZvciBuYXRpdmUgc3VwcG9ydDsgdGhpcyB3aWxsIHRocm93IGlmIHRoZSBzZWxlY3RvciBpcyBub3QgY29uc2lkZXJlZCB2YWxpZFxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJzpmb2N1cy12aXNpYmxlJyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyA6Zm9jdXMtdmlzaWJsZSBwc2V1ZG8tc2VsZWN0b3IgaXMgbm90IHN1cHBvcnRlZCBuYXRpdmVseVxuICAgICAgICAgIGFwcGx5Rm9jdXNWaXNpYmxlUG9seWZpbGwoZG9jdW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhwb3J0IG1vZHVsZVxuICAgIHJldHVybiB7cmVhZHl9O1xuICB9KVxuKTtcbiJdLCJuYW1lcyI6WyJXZWJmbG93IiwicmVxdWlyZSIsImRlZmluZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcHBseUZvY3VzVmlzaWJsZVBvbHlmaWxsIiwic2NvcGUiLCJoYWRLZXlib2FyZEV2ZW50IiwiaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkiLCJoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQiLCJpbnB1dFR5cGVzQWxsb3dsaXN0IiwidGV4dCIsInNlYXJjaCIsInVybCIsInRlbCIsImVtYWlsIiwicGFzc3dvcmQiLCJudW1iZXIiLCJkYXRlIiwibW9udGgiLCJ3ZWVrIiwidGltZSIsImRhdGV0aW1lIiwiaXNWYWxpZEZvY3VzVGFyZ2V0IiwiZWwiLCJkb2N1bWVudCIsIm5vZGVOYW1lIiwiY2xhc3NMaXN0IiwiZm9jdXNUcmlnZ2Vyc0tleWJvYXJkTW9kYWxpdHkiLCJ0eXBlIiwidGFnTmFtZSIsInJlYWRPbmx5IiwiaXNDb250ZW50RWRpdGFibGUiLCJhZGRGb2N1c1Zpc2libGVBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVGb2N1c1Zpc2libGVBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJvbktleURvd24iLCJlIiwibWV0YUtleSIsImFsdEtleSIsImN0cmxLZXkiLCJhY3RpdmVFbGVtZW50Iiwib25Qb2ludGVyRG93biIsIm9uRm9jdXMiLCJ0YXJnZXQiLCJvbkJsdXIiLCJoYXNBdHRyaWJ1dGUiLCJ3aW5kb3ciLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwib25WaXNpYmlsaXR5Q2hhbmdlIiwidmlzaWJpbGl0eVN0YXRlIiwiYWRkSW5pdGlhbFBvaW50ZXJNb3ZlTGlzdGVuZXJzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uSW5pdGlhbFBvaW50ZXJNb3ZlIiwicmVtb3ZlSW5pdGlhbFBvaW50ZXJNb3ZlTGlzdGVuZXJzIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInRvTG93ZXJDYXNlIiwicmVhZHkiLCJxdWVyeVNlbGVjdG9yIl0sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEIsR0FFNUI7O0NBRUM7QUFFRCxJQUFJQSxVQUFVQyxRQUFRO0FBRXRCOztDQUVDLEdBQ0RELFFBQVFFLE1BQU0sQ0FDWixpQkFDQ0MsT0FBT0MsT0FBTyxHQUFHO0lBQ2hCOzs7Ozs7S0FNQyxHQUNELFNBQVNDLDBCQUEwQkMsS0FBSztRQUN0QyxJQUFJQyxtQkFBbUI7UUFDdkIsSUFBSUMsMEJBQTBCO1FBQzlCLElBQUlDLGlDQUFpQztRQUVyQyxJQUFJQyxzQkFBc0I7WUFDeEJDLE1BQU07WUFDTkMsUUFBUTtZQUNSQyxLQUFLO1lBQ0xDLEtBQUs7WUFDTEMsT0FBTztZQUNQQyxVQUFVO1lBQ1ZDLFFBQVE7WUFDUkMsTUFBTTtZQUNOQyxPQUFPO1lBQ1BDLE1BQU07WUFDTkMsTUFBTTtZQUNOQyxVQUFVO1lBQ1Ysa0JBQWtCO1FBQ3BCO1FBRUE7Ozs7T0FJQyxHQUNELFNBQVNDLG1CQUFtQkMsRUFBRTtZQUM1QixJQUNFQSxNQUNBQSxPQUFPQyxZQUNQRCxHQUFHRSxRQUFRLEtBQUssVUFDaEJGLEdBQUdFLFFBQVEsS0FBSyxVQUNoQixlQUFlRixNQUNmLGNBQWNBLEdBQUdHLFNBQVMsRUFDMUI7Z0JBQ0EsT0FBTztZQUNUO1lBQ0EsT0FB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 }), 8334: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals document, MouseEvent */ /** * Webflow: focus */ var Webflow = __webpack_require__(3949); /* * Safari has a weird bug where it doesn't support :focus for links with hrefs, * buttons, and input[type=button|submit], so we listen for mousedown events * instead and force the element to emit a focus event in those cases. * See these webkit bugs for reference: * https://bugs.webkit.org/show_bug.cgi?id=22261 * https://bugs.webkit.org/show_bug.cgi?id=229895 */ Webflow.define('focus', module.exports = function() { var capturedEvents = []; var capturing = false; function captureEvent(e) { if (capturing) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); capturedEvents.unshift(e); } } /* * The only mousedown events we care about here are ones emanating from * (A) anchor links with href attribute, * (B) non-disabled buttons, * (C) non-disabled textarea, * (D) non-disabled inputs of type "button", "reset", "checkbox", "radio", "submit" * (E) non-interactive elements (button, a, input, textarea, select) that have a tabindex with a numeric value * (F) audio elements * (G) video elements with controls attribute */ function isPolyfilledFocusEvent(e) { var el = e.target; var tag = el.tagName; return /^a$/i.test(tag) && el.href != null || // (A) /^(button|textarea)$/i.test(tag) && el.disabled !== true || // (B) (C) /^input$/i.test(tag) && /^(button|reset|submit|radio|checkbox)$/i.test(el.type) && !el.disabled || // (D) !/^(button|input|textarea|select|a)$/i.test(tag) && !Number.isNaN(Number.parseFloat(el.tabIndex)) || // (E) /^audio$/i.test(tag) || // (F) /^video$/i.test(tag) && el.controls === true // (G) ; } function handler(e) { if (isPolyfilledFocusEvent(e)) { // start capturing possible out-of-order mouse events capturing = true; /* * enqueue the focus event _after_ the current batch of events, which * includes any blur events. The correct order of events is: * * [this element] MOUSEDOWN <-- this event * [previously active element] BLUR * [previously active element] FOCUSOUT * [this element] FOCUS <-- forced event * [this element] FOCUSIN <-- forced event * [this element] MOUSEUP <-- possibly captured event (it may have fired _before_ the FOCUS event) * [this element] CLICK <-- possibly captured event (it may have fired _before_ the FOCUS event) */ setTimeout(()=>{ // stop capturing possible out-of-order mouse events capturing = false; // trigger focus event e.target.focus(); // re-dispatch captured mouse events in order while(capturedEvents.length > 0){ var event = capturedEvents.pop(); event.target.dispatchEvent(new MouseEvent(event.type, event)); } }, 0); } } function ready() { if (typeof document !== 'undefined' && document.body.hasAttribute('data-wf-focus-within') && Webflow.env.safari) { document.addEventListener('mousedown', handler, true); document.addEventListener('mouseup', captureEvent, true); document.addEventListener('click', captureEvent, true); } } // Export module return { ready }; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NoYXJlZC9yZW5kZXIvcGx1Z2lucy9CYXNlU2l0ZU1vZHVsZXMvd2ViZmxvdy1mb2N1cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIGRvY3VtZW50LCBNb3VzZUV2ZW50ICovXG5cbi8qKlxuICogV2ViZmxvdzogZm9jdXNcbiAqL1xuXG52YXIgV2ViZmxvdyA9IHJlcXVpcmUoJy4vd2ViZmxvdy1saWInKTtcblxuLypcbiAqIFNhZmFyaSBoYXMgYSB3ZWlyZCBidWcgd2hlcmUgaXQgZG9lc24ndCBzdXBwb3J0IDpmb2N1cyBmb3IgbGlua3Mgd2l0aCBocmVmcyxcbiAqIGJ1dHRvbnMsIGFuZCBpbnB1dFt0eXBlPWJ1dHRvbnxzdWJtaXRdLCBzbyB3ZSBsaXN0ZW4gZm9yIG1vdXNlZG93biBldmVudHNcbiAqIGluc3RlYWQgYW5kIGZvcmNlIHRoZSBlbGVtZW50IHRvIGVtaXQgYSBmb2N1cyBldmVudCBpbiB0aG9zZSBjYXNlcy5cblxuICogU2VlIHRoZXNlIHdlYmtpdCBidWdzIGZvciByZWZlcmVuY2U6XG4gKiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyNjFcbiAqIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk4OTVcbiAqL1xuV2ViZmxvdy5kZWZpbmUoXG4gICdmb2N1cycsXG4gIChtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2FwdHVyZWRFdmVudHMgPSBbXTtcbiAgICB2YXIgY2FwdHVyaW5nID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBjYXB0dXJlRXZlbnQoZSkge1xuICAgICAgaWYgKGNhcHR1cmluZykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNhcHR1cmVkRXZlbnRzLnVuc2hpZnQoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBUaGUgb25seSBtb3VzZWRvd24gZXZlbnRzIHdlIGNhcmUgYWJvdXQgaGVyZSBhcmUgb25lcyBlbWFuYXRpbmcgZnJvbVxuICAgICAqIChBKSBhbmNob3IgbGlua3Mgd2l0aCBocmVmIGF0dHJpYnV0ZSxcbiAgICAgKiAoQikgbm9uLWRpc2FibGVkIGJ1dHRvbnMsXG4gICAgICogKEMpIG5vbi1kaXNhYmxlZCB0ZXh0YXJlYSxcbiAgICAgKiAoRCkgbm9uLWRpc2FibGVkIGlucHV0cyBvZiB0eXBlIFwiYnV0dG9uXCIsIFwicmVzZXRcIiwgXCJjaGVja2JveFwiLCBcInJhZGlvXCIsIFwic3VibWl0XCJcbiAgICAgKiAoRSkgbm9uLWludGVyYWN0aXZlIGVsZW1lbnRzIChidXR0b24sIGEsIGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0KSB0aGF0IGhhdmUgYSB0YWJpbmRleCB3aXRoIGEgbnVtZXJpYyB2YWx1ZVxuICAgICAqIChGKSBhdWRpbyBlbGVtZW50c1xuICAgICAqIChHKSB2aWRlbyBlbGVtZW50cyB3aXRoIGNvbnRyb2xzIGF0dHJpYnV0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzUG9seWZpbGxlZEZvY3VzRXZlbnQoZSkge1xuICAgICAgdmFyIGVsID0gZS50YXJnZXQ7XG4gICAgICB2YXIgdGFnID0gZWwudGFnTmFtZTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICgvXmEkL2kudGVzdCh0YWcpICYmIGVsLmhyZWYgIT0gbnVsbCkgfHwgLy8gKEEpXG4gICAgICAgICgvXihidXR0b258dGV4dGFyZWEpJC9pLnRlc3QodGFnKSAmJiBlbC5kaXNhYmxlZCAhPT0gdHJ1ZSkgfHwgLy8gKEIpIChDKVxuICAgICAgICAoL15pbnB1dCQvaS50ZXN0KHRhZykgJiZcbiAgICAgICAgICAvXihidXR0b258cmVzZXR8c3VibWl0fHJhZGlvfGNoZWNrYm94KSQvaS50ZXN0KGVsLnR5cGUpICYmXG4gICAgICAgICAgIWVsLmRpc2FibGVkKSB8fCAvLyAoRClcbiAgICAgICAgKCEvXihidXR0b258aW5wdXR8dGV4dGFyZWF8c2VsZWN0fGEpJC9pLnRlc3QodGFnKSAmJlxuICAgICAgICAgICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlRmxvYXQoZWwudGFiSW5kZXgpKSkgfHwgLy8gKEUpXG4gICAgICAgIC9eYXVkaW8kL2kudGVzdCh0YWcpIHx8IC8vIChGKVxuICAgICAgICAoL152aWRlbyQvaS50ZXN0KHRhZykgJiYgZWwuY29udHJvbHMgPT09IHRydWUpIC8vIChHKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVyKGUpIHtcbiAgICAgIGlmIChpc1BvbHlmaWxsZWRGb2N1c0V2ZW50KGUpKSB7XG4gICAgICAgIC8vIHN0YXJ0IGNhcHR1cmluZyBwb3NzaWJsZSBvdXQtb2Ytb3JkZXIgbW91c2UgZXZlbnRzXG4gICAgICAgIGNhcHR1cmluZyA9IHRydWU7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogZW5xdWV1ZSB0aGUgZm9jdXMgZXZlbnQgX2FmdGVyXyB0aGUgY3VycmVudCBiYXRjaCBvZiBldmVudHMsIHdoaWNoXG4gICAgICAgICAqIGluY2x1ZGVzIGFueSBibHVyIGV2ZW50cy4gVGhlIGNvcnJlY3Qgb3JkZXIgb2YgZXZlbnRzIGlzOlxuICAgICAgICAgKlxuICAgICAgICAgKiBbdGhpcyBlbGVtZW50XSBNT1VTRURPV04gICAgICAgICAgICAgICA8LS0gdGhpcyBldmVudFxuICAgICAgICAgKiBbcHJldmlvdXNseSBhY3RpdmUgZWxlbWVudF0gQkxVUlxuICAgICAgICAgKiBbcHJldmlvdXNseSBhY3RpdmUgZWxlbWVudF0gRk9DVVNPVVRcbiAgICAgICAgICogW3RoaXMgZWxlbWVudF0gRk9DVVMgICAgICAgICAgICAgICAgICAgPC0tIGZvcmNlZCBldmVudFxuICAgICAgICAgKiBbdGhpcyBlbGVtZW50XSBGT0NVU0lOICAgICAgICAgICAgICAgICA8LS0gZm9yY2VkIGV2ZW50XG4gICAgICAgICAqIFt0aGlzIGVsZW1lbnRdIE1PVVNFVVAgICAgICAgICAgICAgICAgIDwtLSBwb3NzaWJseSBjYXB0dXJlZCBldmVudCAoaXQgbWF5IGhhdmUgZmlyZWQgX2JlZm9yZV8gdGhlIEZPQ1VTIGV2ZW50KVxuICAgICAgICAgKiBbdGhpcyBlbGVtZW50XSBDTElDSyAgICAgICAgICAgICAgICAgICA8LS0gcG9zc2libHkgY2FwdHVyZWQgZXZlbnQgKGl0IG1heSBoYXZlIGZpcmVkIF9iZWZvcmVfIHRoZSBGT0NVUyBldmVudClcbiAgICAgICAgICovXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHN0b3AgY2FwdHVyaW5nIHBvc3NpYmxlIG91dC1vZi1vcmRlciBtb3VzZSBldmVudHNcbiAgICAgICAgICBjYXB0dXJpbmcgPSBmYWxzZTtcblxuICAgICAgICAgIC8vIHRyaWdnZXIgZm9jdXMgZXZlbnRcbiAgICAgICAgICBlLnRhcmdldC5mb2N1cygpO1xuXG4gICAgICAgICAgLy8gcmUtZGlzcGF0Y2ggY2FwdHVyZWQgbW91c2UgZXZlbnRzIGluIG9yZGVyXG4gICAgICAgICAgd2hpbGUgKGNhcHR1cmVkRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhciBldmVudCA9IGNhcHR1cmVkRXZlbnRzLnBvcCgpO1xuICAgICAgICAgICAgZXZlbnQudGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoZXZlbnQudHlwZSwgZXZlbnQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIGRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCdkYXRhLXdmLWZvY3VzLXdpdGhpbicpICYmXG4gICAgICAgIFdlYmZsb3cuZW52LnNhZmFyaVxuICAgICAgKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZXIsIHRydWUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgY2FwdHVyZUV2ZW50LCB0cnVlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjYXB0dXJlRXZlbnQsIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4cG9ydCBtb2R1bGVcbiAgICByZXR1cm4ge3JlYWR5fTtcbiAgfSlcbik7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsInJlcXVpcmUiLCJkZWZpbmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiY2FwdHVyZWRFdmVudHMiLCJjYXB0dXJpbmciLCJjYXB0dXJlRXZlbnQiLCJlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJ1bnNoaWZ0IiwiaXNQb2x5ZmlsbGVkRm9jdXNFdmVudCIsImVsIiwidGFyZ2V0IiwidGFnIiwidGFnTmFtZSIsInRlc3QiLCJocmVmIiwiZGlzYWJsZWQiLCJ0eXBlIiwiTnVtYmVyIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwidGFiSW5kZXgiLCJjb250cm9scyIsImhhbmRsZXIiLCJzZXRUaW1lb3V0IiwiZm9jdXMiLCJsZW5ndGgiLCJldmVudCIsInBvcCIsImRpc3BhdGNoRXZlbnQiLCJNb3VzZUV2ZW50IiwicmVhZHkiLCJkb2N1bWVudCIsImJvZHkiLCJoYXNBdHRyaWJ1dGUiLCJlbnYiLCJzYWZhcmkiLCJhZGRFdmVudExpc3RlbmVyIl0sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0MsR0FFaEM7O0NBRUM7QUFFRCxJQUFJQSxVQUFVQyxRQUFRO0FBRXRCOzs7Ozs7OztDQVFDLEdBQ0RELFFBQVFFLE1BQU0sQ0FDWixTQUNDQyxPQUFPQyxPQUFPLEdBQUc7SUFDaEIsSUFBSUMsaUJBQWlCLEVBQUU7SUFDdkIsSUFBSUMsWUFBWTtJQUVoQixTQUFTQyxhQUFhQyxDQUFDO1FBQ3JCLElBQUlGLFdBQVc7WUFDYkUsRUFBRUMsY0FBYztZQUNoQkQsRUFBRUUsZUFBZTtZQUNqQkYsRUFBRUcsd0JBQXdCO1lBQzFCTixlQUFlTyxPQUFPLENBQUNKO1FBQ3pCO0lBQ0Y7SUFFQTs7Ozs7Ozs7O0tBU0MsR0FDRCxTQUFTSyx1QkFBdUJMLENBQUM7UUFDL0IsSUFBSU0sS0FBS04sRUFBRU8sTUFBTTtRQUNqQixJQUFJQyxNQUFNRixHQUFHRyxPQUFPO1FBQ3BCLE9BQ0UsQUFBQyxPQUFPQyxJQUFJLENBQUNGLFFBQVFGLEdBQUdLLElBQUksSUFBSSxRQUFTLE1BQU07UUFDOUMsdUJBQXVCRCxJQUFJLENBQUNGLFFBQVFGLEdBQUdNLFFBQVEsS0FBSyxRQUFTLFVBQVU7UUFDdkUsV0FBV0YsSUFBSSxDQUFDRixRQUNmLDBDQUEwQ0UsSUFBSSxDQUFDSixHQUFHTyxJQUFJLEtBQ3RELENBQUNQLEdBQUdNLFFBQVEsSUFBSyxNQUFNO1FBQ3hCLENBQUMsc0NBQXNDRixJQUFJLENBQUNGLFFBQzNDLENBQUNNLE9BQU9DLEtBQUssQ0FBQ0QsT0FBT0UsVUFBVSxDQUFDVixHQUFHVyxRQUFRLE1BQU8sTUFBTTtRQUMxRCxXQUFXUCxJQUFJLENBQUNGLFFBQVEsTUFBTTtRQUM3QixXQUFXRSxJQUFJLENBQUNGLFFBQVFGLEdBQUdZLFFBQVEsS0FBSyxLQUFNLE1BQU07O0lBRXpEO0lBRUEsU0FBU0MsUUFBUW5CLENBQUM7UUFDaEIsSUFBSUssdUJBQXVCTCxJQUFJO1lBQzdCLHFEQUFxRDtZQUNyREYsWUFBWTtZQUVaOzs7Ozs7Ozs7OztTQVdDLEdBQ0RzQixXQUFXO2dCQUNULG9EQUFvRDtnQkFDcER0QixZQUFZO2dCQUVaLHNCQUFzQjtnQkFDdEJFLEVBQUVPLE1BQU0sQ0FBQ2MsS0FBSztnQkFFZCw2Q0FBNkM7Z0JBQzdDLE1BQU94QixlQUFleUIsTUFBTSxHQUFHLEVBQUc7b0JBQ2hDLElBQUlDLFFBQVExQixlQUFlMkIsR0FBRztvQkFDOUJELE1BQU1oQixNQUFNLENBQUNrQixhQUFhLENBQUMsSUFBSUMsV0FBV0gsTUFBTVYsSUFBSSxFQUFFVTtnQkFDeEQ7WUFDRixHQUFHO1FBQ0w7SUFDRjtJQUVBLFNBQVNJO1FBQ1AsSUFDRSxPQUFPQyxhQUFhLGVBQ3BCQSxTQUFTQyxJQUFJLENBQUNDLFlBQVksQ0FBQywyQkFDM0J0QyxRQUFRdUMsR0FBRyxDQUFDQyxNQUFNLEVBQ2xCO1lBQ0FKLFNBQVNLLGdCQUFnQixDQUFDLGFBQWFkLFNBQVM7WUFDaERTLFNBQVNLLGdCQUFnQixDQUFDLFdBQVdsQyxjQUFjO1lBQ25ENkIsU0FBU0ssZ0JBQWdCLENBQUMsU0FBU2xDLGNBQWM7UUFDbkQ7SUFDRjtJQUVBLGdCQUFnQjtJQUNoQixPQUFPO1FBQUM0QjtJQUFLO0FBQ2YifQ== }), 7199: (function (module) { "use strict"; /* globals window */ /** * Webflow: IX Event triggers for other modules */ var $ = window.jQuery; var api = {}; var eventQueue = []; var namespace = '.w-ix'; var eventTriggers = { reset: function(i, el) { el.__wf_intro = null; }, intro: function(i, el) { if (el.__wf_intro) { return; } el.__wf_intro = true; $(el).triggerHandler(api.types.INTRO); }, outro: function(i, el) { if (!el.__wf_intro) { return; } el.__wf_intro = null; $(el).triggerHandler(api.types.OUTRO); } }; api.triggers = {}; api.types = { INTRO: 'w-ix-intro' + namespace, OUTRO: 'w-ix-outro' + namespace }; // Trigger any events in queue + restore trigger methods api.init = function() { var count = eventQueue.length; for(var i = 0; i < count; i++){ var memo = eventQueue[i]; memo[0](0, memo[1]); } eventQueue = []; $.extend(api.triggers, eventTriggers); }; // Replace all triggers with async wrapper to queue events until init api.async = function() { for(var key in eventTriggers){ var func = eventTriggers[key]; if (!eventTriggers.hasOwnProperty(key)) { continue; } // Replace trigger method with async wrapper api.triggers[key] = function(i, el) { eventQueue.push([ func, el ]); }; } }; // Default triggers to async queue api.async(); module.exports = api; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NoYXJlZC9yZW5kZXIvcGx1Z2lucy9CYXNlU2l0ZU1vZHVsZXMvd2ViZmxvdy1peC1ldmVudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyB3aW5kb3cgKi9cblxuLyoqXG4gKiBXZWJmbG93OiBJWCBFdmVudCB0cmlnZ2VycyBmb3Igb3RoZXIgbW9kdWxlc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyICQgPSB3aW5kb3cualF1ZXJ5O1xudmFyIGFwaSA9IHt9O1xudmFyIGV2ZW50UXVldWUgPSBbXTtcbnZhciBuYW1lc3BhY2UgPSAnLnctaXgnO1xuXG52YXIgZXZlbnRUcmlnZ2VycyA9IHtcbiAgcmVzZXQ6IGZ1bmN0aW9uIChpLCBlbCkge1xuICAgIGVsLl9fd2ZfaW50cm8gPSBudWxsO1xuICB9LFxuICBpbnRybzogZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgaWYgKGVsLl9fd2ZfaW50cm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWwuX193Zl9pbnRybyA9IHRydWU7XG4gICAgJChlbCkudHJpZ2dlckhhbmRsZXIoYXBpLnR5cGVzLklOVFJPKTtcbiAgfSxcbiAgb3V0cm86IGZ1bmN0aW9uIChpLCBlbCkge1xuICAgIGlmICghZWwuX193Zl9pbnRybykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbC5fX3dmX2ludHJvID0gbnVsbDtcbiAgICAkKGVsKS50cmlnZ2VySGFuZGxlcihhcGkudHlwZXMuT1VUUk8pO1xuICB9LFxufTtcblxuYXBpLnRyaWdnZXJzID0ge307XG5cbmFwaS50eXBlcyA9IHtcbiAgSU5UUk86ICd3LWl4LWludHJvJyArIG5hbWVzcGFjZSxcbiAgT1VUUk86ICd3LWl4LW91dHJvJyArIG5hbWVzcGFjZSxcbn07XG5cbi8vIFRyaWdnZXIgYW55IGV2ZW50cyBpbiBxdWV1ZSArIHJlc3RvcmUgdHJpZ2dlciBtZXRob2RzXG5hcGkuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNvdW50ID0gZXZlbnRRdWV1ZS5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIHZhciBtZW1vID0gZXZlbnRRdWV1ZVtpXTtcbiAgICBtZW1vWzBdKDAsIG1lbW9bMV0pO1xuICB9XG4gIGV2ZW50UXVldWUgPSBbXTtcbiAgJC5leHRlbmQoYXBpLnRyaWdnZXJzLCBldmVudFRyaWdnZXJzKTtcbn07XG5cbi8vIFJlcGxhY2UgYWxsIHRyaWdnZXJzIHdpdGggYXN5bmMgd3JhcHBlciB0byBxdWV1ZSBldmVudHMgdW50aWwgaW5pdFxuYXBpLmFzeW5jID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBrZXkgaW4gZXZlbnRUcmlnZ2Vycykge1xuICAgIHZhciBmdW5jID0gZXZlbnRUcmlnZ2Vyc1trZXldO1xuICAgIGlmICghZXZlbnRUcmlnZ2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBSZXBsYWNlIHRyaWdnZXIgbWV0aG9kIHdpdGggYXN5bmMgd3JhcHBlclxuICAgIGFwaS50cmlnZ2Vyc1trZXldID0gZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICBldmVudFF1ZXVlLnB1c2goW2Z1bmMsIGVsXSk7XG4gICAgfTtcbiAgfVxufTtcblxuLy8gRGVmYXVsdCB0cmlnZ2VycyB0byBhc3luYyBxdWV1ZVxuYXBpLmFzeW5jKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXBpO1xuIl0sIm5hbWVzIjpbIiQiLCJ3aW5kb3ciLCJqUXVlcnkiLCJhcGkiLCJldmVudFF1ZXVlIiwibmFtZXNwYWNlIiwiZXZlbnRUcmlnZ2VycyIsInJlc2V0IiwiaSIsImVsIiwiX193Zl9pbnRybyIsImludHJvIiwidHJpZ2dlckhhbmRsZXIiLCJ0eXBlcyIsIklOVFJPIiwib3V0cm8iLCJPVVRSTyIsInRyaWdnZXJzIiwiaW5pdCIsImNvdW50IiwibGVuZ3RoIiwibWVtbyIsImV4dGVuZCIsImFzeW5jIiwia2V5IiwiZnVuYyIsImhhc093blByb3BlcnR5IiwicHVzaCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBLGtCQUFrQixHQUVsQjs7Q0FFQyxHQUVEO0FBRUEsSUFBSUEsSUFBSUMsT0FBT0MsTUFBTTtBQUNyQixJQUFJQyxNQUFNLENBQUM7QUFDWCxJQUFJQyxhQUFhLEVBQUU7QUFDbkIsSUFBSUMsWUFBWTtBQUVoQixJQUFJQyxnQkFBZ0I7SUFDbEJDLE9BQU8sU0FBVUMsQ0FBQyxFQUFFQyxFQUFFO1FBQ3BCQSxHQUFHQyxVQUFVLEdBQUc7SUFDbEI7SUFDQUMsT0FBTyxTQUFVSCxDQUFDLEVBQUVDLEVBQUU7UUFDcEIsSUFBSUEsR0FBR0MsVUFBVSxFQUFFO1lBQ2pCO1FBQ0Y7UUFDQUQsR0FBR0MsVUFBVSxHQUFHO1FBQ2hCVixFQUFFUyxJQUFJRyxjQUFjLENBQUNULElBQUlVLEtBQUssQ0FBQ0MsS0FBSztJQUN0QztJQUNBQyxPQUFPLFNBQVVQLENBQUMsRUFBRUMsRUFBRTtRQUNwQixJQUFJLENBQUNBLEdBQUdDLFVBQVUsRUFBRTtZQUNsQjtRQUNGO1FBQ0FELEdBQUdDLFVBQVUsR0FBRztRQUNoQlYsRUFBRVMsSUFBSUcsY0FBYyxDQUFDVCxJQUFJVSxLQUFLLENBQUNHLEtBQUs7SUFDdEM7QUFDRjtBQUVBYixJQUFJYyxRQUFRLEdBQUcsQ0FBQztBQUVoQmQsSUFBSVUsS0FBSyxHQUFHO0lBQ1ZDLE9BQU8sZUFBZVQ7SUFDdEJXLE9BQU8sZUFBZVg7QUFDeEI7QUFFQSx3REFBd0Q7QUFDeERGLElBQUllLElBQUksR0FBRztJQUNULElBQUlDLFFBQVFmLFdBQVdnQixNQUFNO0lBQzdCLElBQUssSUFBSVosSUFBSSxHQUFHQSxJQUFJVyxPQUFPWCxJQUFLO1FBQzlCLElBQUlhLE9BQU9qQixVQUFVLENBQUNJLEVBQUU7UUFDeEJhLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBR0EsSUFBSSxDQUFDLEVBQUU7SUFDcEI7SUFDQWpCLGFBQWEsRUFBRTtJQUNmSixFQUFFc0IsTUFBTSxDQUFDbkIsSUFBSWMsUUFBUSxFQUFFWDtBQUN6QjtBQUVBLHFFQUFxRTtBQUNyRUgsSUFBSW9CLEtBQUssR0FBRztJQUNWLElBQUssSUFBSUMsT0FBT2xCLGNBQWU7UUFDN0IsSUFBSW1CLE9BQU9uQixhQUFhLENBQUNrQixJQUFJO1FBQzdCLElBQUksQ0FBQ2xCLGNBQWNvQixjQUFjLENBQUNGLE1BQU07WUFDdEM7UUFDRjtRQUVBLDRDQUE0QztRQUM1Q3JCLElBQUljLFFBQVEsQ0FBQ08sSUFBSSxHQUFHLFNBQVVoQixDQUFDLEVBQUVDLEVBQUU7WUFDakNMLFdBQVd1QixJQUFJLENBQUM7Z0JBQUNGO2dCQUFNaEI7YUFBRztRQUM1QjtJQUNGO0FBQ0Y7QUFFQSxrQ0FBa0M7QUFDbENOLElBQUlvQixLQUFLO0FBRVRLLE9BQU9DLE9BQU8sR0FBRzFCIn0= }), 5134: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals window, document */ var IXEvents = __webpack_require__(7199); function dispatchCustomEvent(element, eventName, detail) { var event = document.createEvent('CustomEvent'); event.initCustomEvent(eventName, true, true, detail || null); element.dispatchEvent(event); } /** * Webflow: IX Event triggers for other modules */ var $ = window.jQuery; var api = {}; var namespace = '.w-ix'; var eventTriggers = { reset: function(i, el) { IXEvents.triggers.reset(i, el); }, intro: function(i, el) { IXEvents.triggers.intro(i, el); dispatchCustomEvent(el, 'COMPONENT_ACTIVE'); }, outro: function(i, el) { IXEvents.triggers.outro(i, el); dispatchCustomEvent(el, 'COMPONENT_INACTIVE'); } }; api.triggers = {}; api.types = { INTRO: 'w-ix-intro' + namespace, OUTRO: 'w-ix-outro' + namespace }; $.extend(api.triggers, eventTriggers); api.dispatchCustomEvent = dispatchCustomEvent; module.exports = api; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NoYXJlZC9yZW5kZXIvcGx1Z2lucy9CYXNlU2l0ZU1vZHVsZXMvd2ViZmxvdy1peDItZXZlbnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbHMgd2luZG93LCBkb2N1bWVudCAqL1xuXG4ndXNlIHN0cmljdCc7XG52YXIgSVhFdmVudHMgPSByZXF1aXJlKCcuL3dlYmZsb3ctaXgtZXZlbnRzJyk7XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ3VzdG9tRXZlbnQoZWxlbWVudCwgZXZlbnROYW1lLCBkZXRhaWwpIHtcbiAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7XG4gIGV2ZW50LmluaXRDdXN0b21FdmVudChldmVudE5hbWUsIHRydWUsIHRydWUsIGRldGFpbCB8fCBudWxsKTtcbiAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbn1cblxuLyoqXG4gKiBXZWJmbG93OiBJWCBFdmVudCB0cmlnZ2VycyBmb3Igb3RoZXIgbW9kdWxlc1xuICovXG5cbnZhciAkID0gd2luZG93LmpRdWVyeTtcbnZhciBhcGkgPSB7fTtcbnZhciBuYW1lc3BhY2UgPSAnLnctaXgnO1xuXG52YXIgZXZlbnRUcmlnZ2VycyA9IHtcbiAgcmVzZXQ6IGZ1bmN0aW9uIChpLCBlbCkge1xuICAgIElYRXZlbnRzLnRyaWdnZXJzLnJlc2V0KGksIGVsKTtcbiAgfSxcbiAgaW50cm86IGZ1bmN0aW9uIChpLCBlbCkge1xuICAgIElYRXZlbnRzLnRyaWdnZXJzLmludHJvKGksIGVsKTtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KGVsLCAnQ09NUE9ORU5UX0FDVElWRScpO1xuICB9LFxuICBvdXRybzogZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgSVhFdmVudHMudHJpZ2dlcnMub3V0cm8oaSwgZWwpO1xuICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQoZWwsICdDT01QT05FTlRfSU5BQ1RJVkUnKTtcbiAgfSxcbn07XG5cbmFwaS50cmlnZ2VycyA9IHt9O1xuXG5hcGkudHlwZXMgPSB7XG4gIElOVFJPOiAndy1peC1pbnRybycgKyBuYW1lc3BhY2UsXG4gIE9VVFJPOiAndy1peC1vdXRybycgKyBuYW1lc3BhY2UsXG59O1xuXG4kLmV4dGVuZChhcGkudHJpZ2dlcnMsIGV2ZW50VHJpZ2dlcnMpO1xuXG5hcGkuZGlzcGF0Y2hDdXN0b21FdmVudCA9IGRpc3BhdGNoQ3VzdG9tRXZlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gYXBpO1xuIl0sIm5hbWVzIjpbIklYRXZlbnRzIiwicmVxdWlyZSIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJlbGVtZW50IiwiZXZlbnROYW1lIiwiZGV0YWlsIiwiZXZlbnQiLCJkb2N1bWVudCIsImNyZWF0ZUV2ZW50IiwiaW5pdEN1c3RvbUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsIiQiLCJ3aW5kb3ciLCJqUXVlcnkiLCJhcGkiLCJuYW1lc3BhY2UiLCJldmVudFRyaWdnZXJzIiwicmVzZXQiLCJpIiwiZWwiLCJ0cmlnZ2VycyIsImludHJvIiwib3V0cm8iLCJ0eXBlcyIsIklOVFJPIiwiT1VUUk8iLCJleHRlbmQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEIsR0FFNUI7QUFDQSxJQUFJQSxXQUFXQyxRQUFRO0FBRXZCLFNBQVNDLG9CQUFvQkMsT0FBTyxFQUFFQyxTQUFTLEVBQUVDLE1BQU07SUFDckQsSUFBSUMsUUFBUUMsU0FBU0MsV0FBVyxDQUFDO0lBQ2pDRixNQUFNRyxlQUFlLENBQUNMLFdBQVcsTUFBTSxNQUFNQyxVQUFVO0lBQ3ZERixRQUFRTyxhQUFhLENBQUNKO0FBQ3hCO0FBRUE7O0NBRUMsR0FFRCxJQUFJSyxJQUFJQyxPQUFPQyxNQUFNO0FBQ3JCLElBQUlDLE1BQU0sQ0FBQztBQUNYLElBQUlDLFlBQVk7QUFFaEIsSUFBSUMsZ0JBQWdCO0lBQ2xCQyxPQUFPLFNBQVVDLENBQUMsRUFBRUMsRUFBRTtRQUNwQm5CLFNBQVNvQixRQUFRLENBQUNILEtBQUssQ0FBQ0MsR0FBR0M7SUFDN0I7SUFDQUUsT0FBTyxTQUFVSCxDQUFDLEVBQUVDLEVBQUU7UUFDcEJuQixTQUFTb0IsUUFBUSxDQUFDQyxLQUFLLENBQUNILEdBQUdDO1FBQzNCakIsb0JBQW9CaUIsSUFBSTtJQUMxQjtJQUNBRyxPQUFPLFNBQVVKLENBQUMsRUFBRUMsRUFBRTtRQUNwQm5CLFNBQVNvQixRQUFRLENBQUNFLEtBQUssQ0FBQ0osR0FBR0M7UUFDM0JqQixvQkFBb0JpQixJQUFJO0lBQzFCO0FBQ0Y7QUFFQUwsSUFBSU0sUUFBUSxHQUFHLENBQUM7QUFFaEJOLElBQUlTLEtBQUssR0FBRztJQUNWQyxPQUFPLGVBQWVUO0lBQ3RCVSxPQUFPLGVBQWVWO0FBQ3hCO0FBRUFKLEVBQUVlLE1BQU0sQ0FBQ1osSUFBSU0sUUFBUSxFQUFFSjtBQUV2QkYsSUFBSVosbUJBQW1CLEdBQUdBO0FBRTFCeUIsT0FBT0MsT0FBTyxHQUFHZCJ9 }), 941: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /** * Webflow: Interactions 2 */ var Webflow = __webpack_require__(3949); var ix2 = __webpack_require__(6011); ix2.setEnv(Webflow.env); Webflow.define('ix2', module.exports = function() { return ix2; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NoYXJlZC9yZW5kZXIvcGx1Z2lucy9CYXNlU2l0ZU1vZHVsZXMvd2ViZmxvdy1peDIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXZWJmbG93OiBJbnRlcmFjdGlvbnMgMlxuICovXG52YXIgV2ViZmxvdyA9IHJlcXVpcmUoJy4vd2ViZmxvdy1saWInKTtcbnZhciBpeDIgPSByZXF1aXJlKCdAcGFja2FnZXMvc3lzdGVtcy9peDIvZW5naW5lJyk7XG5cbml4Mi5zZXRFbnYoV2ViZmxvdy5lbnYpO1xuXG5XZWJmbG93LmRlZmluZShcbiAgJ2l4MicsXG4gIChtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaXgyO1xuICB9KVxuKTtcbiJdLCJuYW1lcyI6WyJXZWJmbG93IiwicmVxdWlyZSIsIml4MiIsInNldEVudiIsImVudiIsImRlZmluZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOztDQUVDO0FBQ0QsSUFBSUEsVUFBVUMsUUFBUTtBQUN0QixJQUFJQyxNQUFNRCxRQUFRO0FBRWxCQyxJQUFJQyxNQUFNLENBQUNILFFBQVFJLEdBQUc7QUFFdEJKLFFBQVFLLE1BQU0sQ0FDWixPQUNDQyxPQUFPQyxPQUFPLEdBQUc7SUFDaEIsT0FBT0w7QUFDVCJ9 }), 3949: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals window, document, navigator, WEBFLOW_ENV_TEST */ /** * Webflow: Core site library */ var Webflow = {}; var modules = {}; var primary = []; var secondary = window.Webflow || []; var $ = window.jQuery; var $win = $(window); var $doc = $(document); var isFunction = $.isFunction; var _ = Webflow._ = __webpack_require__(5756); var tram = Webflow.tram = __webpack_require__(5487) && $.tram; var domready = false; var destroyed = false; tram.config.hideBackface = false; tram.config.keepInherited = true; /** * Webflow.define - Define a named module * @param {string} name * @param {function} factory * @param {object} [options] * @return {object} */ Webflow.define = function(name, factory, options) { if (modules[name]) { unbindModule(modules[name]); } var instance = modules[name] = factory($, _, options) || {}; bindModule(instance); return instance; }; /** * Webflow.require - Require a named module * @param {string} name * @return {object} */ Webflow.require = function(name) { return modules[name]; }; function bindModule(module1) { // If running in Webflow app, subscribe to design/preview events if (Webflow.env()) { isFunction(module1.design) && $win.on('__wf_design', module1.design); isFunction(module1.preview) && $win.on('__wf_preview', module1.preview); } // Subscribe to front-end destroy event isFunction(module1.destroy) && $win.on('__wf_destroy', module1.destroy); // Look for ready method on module if (module1.ready && isFunction(module1.ready)) { addReady(module1); } } function addReady(module1) { // If domready has already happened, run ready method if (domready) { module1.ready(); return; } // Otherwise add ready method to the primary queue (only once) if (_.contains(primary, module1.ready)) { return; } primary.push(module1.ready); } function unbindModule(module1) { // Unsubscribe module from window events isFunction(module1.design) && $win.off('__wf_design', module1.design); isFunction(module1.preview) && $win.off('__wf_preview', module1.preview); isFunction(module1.destroy) && $win.off('__wf_destroy', module1.destroy); // Remove ready method from primary queue if (module1.ready && isFunction(module1.ready)) { removeReady(module1); } } function removeReady(module1) { primary = _.filter(primary, function(readyFn) { return readyFn !== module1.ready; }); } /** * Webflow.push - Add a ready handler into secondary queue * @param {function} ready Callback to invoke on domready */ Webflow.push = function(ready) { // If domready has already happened, invoke handler if (domready) { isFunction(ready) && ready(); return; } // Otherwise push into secondary queue secondary.push(ready); }; /** * Webflow.env - Get the state of the Webflow app * @param {string} mode [optional] * @return {boolean} */ Webflow.env = function(mode) { var designFlag = window.__wf_design; var inApp = typeof designFlag !== 'undefined'; if (!mode) { return inApp; } if (mode === 'design') { return inApp && designFlag; } if (mode === 'preview') { return inApp && !designFlag; } if (mode === 'slug') { return inApp && window.__wf_slug; } if (mode === 'editor') { return window.WebflowEditor; } if (mode === 'test') { return false || window.__wf_test; } if (mode === 'frame') { return window !== window.top; } }; // Feature detects + browser sniffs ಠ_ಠ var userAgent = navigator.userAgent.toLowerCase(); var touch = Webflow.env.touch = 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch; var chrome = Webflow.env.chrome = /chrome/.test(userAgent) && /Google/.test(navigator.vendor) && parseInt(userAgent.match(/chrome\/(\d+)\./)[1], 10); var ios = Webflow.env.ios = /(ipod|iphone|ipad)/.test(userAgent); Webflow.env.safari = /safari/.test(userAgent) && !chrome && !ios; // Maintain current touch target to prevent late clicks on touch devices var touchTarget; // Listen for both events to support touch/mouse hybrid devices touch && $doc.on('touchstart mousedown', function(evt) { touchTarget = evt.target; }); /** * Webflow.validClick - validate click target against current touch target * @param {HTMLElement} clickTarget Element being clicked * @return {Boolean} True if click target is valid (always true on non-touch) */ Webflow.validClick = touch ? function(clickTarget) { return clickTarget === touchTarget || $.contains(clickTarget, touchTarget); } : function() { return true; }; /** * Webflow.resize, Webflow.scroll - throttled event proxies */ var resizeEvents = 'resize.webflow orientationchange.webflow load.webflow'; var scrollEvents = 'scroll.webflow ' + resizeEvents; Webflow.resize = eventProxy($win, resizeEvents); Webflow.scroll = eventProxy($win, scrollEvents); Webflow.redraw = eventProxy(); // Create a proxy instance for throttled events function eventProxy(target, types) { // Set up throttled method (using custom frame-based _.throttle) var handlers = []; var proxy = {}; proxy.up = _.throttle(function(evt) { _.each(handlers, function(h) { h(evt); }); }); // Bind events to target if (target && types) { target.on(types, proxy.up); } /** * Add an event handler * @param {function} handler */ proxy.on = function(handler) { if (typeof handler !== 'function') { return; } if (_.contains(handlers, handler)) { return; } handlers.push(handler); }; /** * Remove an event handler * @param {function} handler */ proxy.off = function(handler) { // If no arguments supplied, clear all handlers if (!arguments.length) { handlers = []; return; } // Otherwise, remove handler from the list handlers = _.filter(handlers, function(h) { return h !== handler; }); }; return proxy; } // Webflow.location - Wrap window.location in api Webflow.location = function(url) { window.location = url; }; if (Webflow.env()) { // Ignore redirects inside a Webflow design/edit environment Webflow.location = function() {}; } // Webflow.ready - Call primary and secondary handlers Webflow.ready = function() { domready = true; // Restore modules after destroy if (destroyed) { restoreModules(); // Otherwise run primary ready methods } else { _.each(primary, callReady); } // Run secondary ready methods _.each(secondary, callReady); // Trigger resize Webflow.resize.up(); }; function callReady(readyFn) { isFunction(readyFn) && readyFn(); } function restoreModules() { destroyed = false; _.each(modules, bindModule); } /** * Webflow.load - Add a window load handler that will run even if load event has already happened * @param {function} handler */ var deferLoad; Webflow.load = function(handler) { deferLoad.then(handler); }; function bindLoad() { // Reject any previous deferred (to support destroy) if (deferLoad) { deferLoad.reject(); $win.off('load', deferLoad.resolve); } // Create deferred and bind window load event deferLoad = new $.Deferred(); $win.on('load', deferLoad.resolve); } // Webflow.destroy - Trigger a destroy event for all modules Webflow.destroy = function(options) { options = options || {}; destroyed = true; $win.triggerHandler('__wf_destroy'); // Allow domready reset for tests if (options.domready != null) { domready = options.domready; } // Unbind modules _.each(modules, unbindModule); // Clear any proxy event handlers Webflow.resize.off(); Webflow.scroll.off(); Webflow.redraw.off(); // Clear any queued ready methods primary = []; secondary = []; // If load event has not yet fired, replace the deferred if (deferLoad.state() === 'pending') { bindLoad(); } }; // Listen for domready $(Webflow.ready); // Listen for window.onload and resolve deferred bindLoad(); // Export commonjs module module.exports = window.Webflow = Webflow; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NoYXJlZC9yZW5kZXIvcGx1Z2lucy9CYXNlU2l0ZU1vZHVsZXMvd2ViZmxvdy1saWIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyB3aW5kb3csIGRvY3VtZW50LCBuYXZpZ2F0b3IsIFdFQkZMT1dfRU5WX1RFU1QgKi9cblxuLyoqXG4gKiBXZWJmbG93OiBDb3JlIHNpdGUgbGlicmFyeVxuICovXG52YXIgV2ViZmxvdyA9IHt9O1xudmFyIG1vZHVsZXMgPSB7fTtcbnZhciBwcmltYXJ5ID0gW107XG52YXIgc2Vjb25kYXJ5ID0gd2luZG93LldlYmZsb3cgfHwgW107XG52YXIgJCA9IHdpbmRvdy5qUXVlcnk7XG52YXIgJHdpbiA9ICQod2luZG93KTtcbnZhciAkZG9jID0gJChkb2N1bWVudCk7XG52YXIgaXNGdW5jdGlvbiA9ICQuaXNGdW5jdGlvbjtcbnZhciBfID0gKFdlYmZsb3cuXyA9IHJlcXVpcmUoJy4vdW5kZXJzY29yZS1jdXN0b20nKSk7XG52YXIgdHJhbSA9IChXZWJmbG93LnRyYW0gPSByZXF1aXJlKCcuL3RyYW0tbWluJykgJiYgJC50cmFtKTtcbnZhciBkb21yZWFkeSA9IGZhbHNlO1xudmFyIGRlc3Ryb3llZCA9IGZhbHNlO1xuXG50cmFtLmNvbmZpZy5oaWRlQmFja2ZhY2UgPSBmYWxzZTtcbnRyYW0uY29uZmlnLmtlZXBJbmhlcml0ZWQgPSB0cnVlO1xuXG4vKipcbiAqIFdlYmZsb3cuZGVmaW5lIC0gRGVmaW5lIGEgbmFtZWQgbW9kdWxlXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBmYWN0b3J5XG4gKiBAcGFyYW0gIHtvYmplY3R9IFtvcHRpb25zXVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5XZWJmbG93LmRlZmluZSA9IGZ1bmN0aW9uIChuYW1lLCBmYWN0b3J5LCBvcHRpb25zKSB7XG4gIGlmIChtb2R1bGVzW25hbWVdKSB7XG4gICAgdW5iaW5kTW9kdWxlKG1vZHVsZXNbbmFtZV0pO1xuICB9XG4gIHZhciBpbnN0YW5jZSA9IChtb2R1bGVzW25hbWVdID0gZmFjdG9yeSgkLCBfLCBvcHRpb25zKSB8fCB7fSk7XG4gIGJpbmRNb2R1bGUoaW5zdGFuY2UpO1xuICByZXR1cm4gaW5zdGFuY2U7XG59O1xuXG4vKipcbiAqIFdlYmZsb3cucmVxdWlyZSAtIFJlcXVpcmUgYSBuYW1lZCBtb2R1bGVcbiAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5XZWJmbG93LnJlcXVpcmUgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gbW9kdWxlc1tuYW1lXTtcbn07XG5cbmZ1bmN0aW9uIGJpbmRNb2R1bGUobW9kdWxlKSB7XG4gIC8vIElmIHJ1bm5pbmcgaW4gV2ViZmxvdyBhcHAsIHN1YnNjcmliZSB0byBkZXNpZ24vcHJldmlldyBldmVudHNcbiAgaWYgKFdlYmZsb3cuZW52KCkpIHtcbiAgICBpc0Z1bmN0aW9uKG1vZHVsZS5kZXNpZ24pICYmICR3aW4ub24oJ19fd2ZfZGVzaWduJywgbW9kdWxlLmRlc2lnbik7XG4gICAgaXNGdW5jdGlvbihtb2R1bGUucHJldmlldykgJiYgJHdpbi5vbignX193Zl9wcmV2aWV3JywgbW9kdWxlLnByZXZpZXcpO1xuICB9XG4gIC8vIFN1YnNjcmliZSB0byBmcm9udC1lbmQgZGVzdHJveSBldmVudFxuICBpc0Z1bmN0aW9uKG1vZHVsZS5kZXN0cm95KSAmJiAkd2luLm9uKCdfX3dmX2Rlc3Ryb3knLCBtb2R1bGUuZGVzdHJveSk7XG4gIC8vIExvb2sgZm9yIHJlYWR5IG1ldGhvZCBvbiBtb2R1bGVcbiAgaWYgKG1vZHVsZS5yZWFkeSAmJiBpc0Z1bmN0aW9uKG1vZHVsZS5yZWFkeSkpIHtcbiAgICBhZGRSZWFkeShtb2R1bGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFJlYWR5KG1vZHVsZSkge1xuICAvLyBJZiBkb21yZWFkeSBoYXMgYWxyZWFkeSBoYXBwZW5lZCwgcnVuIHJlYWR5IG1ldGhvZFxuICBpZiAoZG9tcmVhZHkpIHtcbiAgICBtb2R1bGUucmVhZHkoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gT3RoZXJ3aXNlIGFkZCByZWFkeSBtZXRob2QgdG8gdGhlIHByaW1hcnkgcXVldWUgKG9ubHkgb25jZSlcbiAgaWYgKF8uY29udGFpbnMocHJpbWFyeSwgbW9kdWxlLnJlYWR5KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBwcmltYXJ5LnB1c2gobW9kdWxlLnJlYWR5KTtcbn1cblxuZnVuY3Rpb24gdW5iaW5kTW9kdWxlKG1vZHVsZSkge1xuICAvLyBVbnN1YnNjcmliZSBtb2R1bGUgZnJvbSB3aW5kb3cgZXZlbnRzXG4gIGlzRnVuY3Rpb24obW9kdWxlLmRlc2lnbikgJiYgJHdpbi5vZmYoJ19fd2ZfZGVzaWduJywgbW9kdWxlLmRlc2lnbik7XG4gIGlzRnVuY3Rpb24obW9kdWxlLnByZXZpZXcpICYmICR3aW4ub2ZmKCdfX3dmX3ByZXZpZXcnLCBtb2R1bGUucHJldmlldyk7XG4gIGlzRnVuY3Rpb24obW9kdWxlLmRlc3Ryb3kpICYmICR3aW4ub2ZmKCdfX3dmX2Rlc3Ryb3knLCBtb2R1bGUuZGVzdHJveSk7XG4gIC8vIFJlbW92ZSByZWFkeSBtZXRob2QgZnJvbSBwcmltYXJ5IHF1ZXVlXG4gIGlmIChtb2R1bGUucmVhZHkgJiYgaXNGdW5jdGlvbihtb2R1bGUucmVhZHkpKSB7XG4gICAgcmVtb3ZlUmVhZHkobW9kdWxlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVSZWFkeShtb2R1bGUpIHtcbiAgcHJpbWFyeSA9IF8uZmlsdGVyKHByaW1hcnksIGZ1bmN0aW9uIChyZWFkeUZuKSB7XG4gICAgcmV0dXJuIHJlYWR5Rm4gIT09IG1vZHVsZS5yZWFkeTtcbiAgfSk7XG59XG5cbi8qKlxuICogV2ViZmxvdy5wdXNoIC0gQWRkIGEgcmVhZHkgaGFuZGxlciBpbnRvIHNlY29uZGFyeSBxdWV1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gcmVhZHkgIENhbGxiYWNrIHRvIGludm9rZSBvbiBkb21yZWFkeVxuICovXG5XZWJmbG93LnB1c2ggPSBmdW5jdGlvbiAocmVhZHkpIHtcbiAgLy8gSWYgZG9tcmVhZHkgaGFzIGFscmVhZHkgaGFwcGVuZWQsIGludm9rZSBoYW5kbGVyXG4gIGlmIChkb21yZWFkeSkge1xuICAgIGlzRnVuY3Rpb24ocmVhZHkpICYmIHJlYWR5KCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIE90aGVyd2lzZSBwdXNoIGludG8gc2Vjb25kYXJ5IHF1ZXVlXG4gIHNlY29uZGFyeS5wdXNoKHJlYWR5KTtcbn07XG5cbi8qKlxuICogV2ViZmxvdy5lbnYgLSBHZXQgdGhlIHN0YXRlIG9mIHRoZSBXZWJmbG93IGFwcFxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGUgW29wdGlvbmFsXVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuV2ViZmxvdy5lbnYgPSBmdW5jdGlvbiAobW9kZSkge1xuICB2YXIgZGVzaWduRmxhZyA9IHdpbmRvdy5fX3dmX2Rlc2lnbjtcbiAgdmFyIGluQXBwID0gdHlwZW9mIGRlc2lnbkZsYWcgIT09ICd1bmRlZmluZWQnO1xuICBpZiAoIW1vZGUpIHtcbiAgICByZXR1cm4gaW5BcHA7XG4gIH1cbiAgaWYgKG1vZGUgPT09ICdkZXNpZ24nKSB7XG4gICAgcmV0dXJuIGluQXBwICYmIGRlc2lnbkZsYWc7XG4gIH1cbiAgaWYgKG1vZGUgPT09ICdwcmV2aWV3Jykge1xuICAgIHJldHVybiBpbkFwcCAmJiAhZGVzaWduRmxhZztcbiAgfVxuICBpZiAobW9kZSA9PT0gJ3NsdWcnKSB7XG4gICAgcmV0dXJuIGluQXBwICYmIHdpbmRvdy5fX3dmX3NsdWc7XG4gIH1cbiAgaWYgKG1vZGUgPT09ICdlZGl0b3InKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5XZWJmbG93RWRpdG9yO1xuICB9XG4gIGlmIChtb2RlID09PSAndGVzdCcpIHtcbiAgICByZXR1cm4gV0VCRkxPV19FTlZfVEVTVCB8fCB3aW5kb3cuX193Zl90ZXN0O1xuICB9XG4gIGlmIChtb2RlID09PSAnZnJhbWUnKSB7XG4gICAgcmV0dXJuIHdpbmRvdyAhPT0gd2luZG93LnRvcDtcbiAgfVxufTtcblxuLy8gRmVhdHVyZSBkZXRlY3RzICsgYnJvd3NlciBzbmlmZnMgIOCyoF/gsqBcblxudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbnZhciB0b3VjaCA9IChXZWJmbG93LmVudi50b3VjaCA9XG4gICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdyB8fFxuICAod2luZG93LkRvY3VtZW50VG91Y2ggJiYgZG9jdW1lbnQgaW5zdGFuY2VvZiB3aW5kb3cuRG9jdW1lbnRUb3VjaCkpO1xudmFyIGNocm9tZSA9IChXZWJmbG93LmVudi5jaHJvbWUgPVxuICAvY2hyb21lLy50ZXN0KHVzZXJBZ2VudCkgJiZcbiAgL0dvb2dsZS8udGVzdChuYXZpZ2F0b3IudmVuZG9yKSAmJlxuICBwYXJzZUludCh1c2VyQWdlbnQubWF0Y2goL2Nocm9tZVxcLyhcXGQrKVxcLi8pWzFdLCAxMCkpO1xudmFyIGlvcyA9IChXZWJmbG93LmVudi5pb3MgPSAvKGlwb2R8aXBob25lfGlwYWQpLy50ZXN0KHVzZXJBZ2VudCkpO1xuV2ViZmxvdy5lbnYuc2FmYXJpID0gL3NhZmFyaS8udGVzdCh1c2VyQWdlbnQpICYmICFjaHJvbWUgJiYgIWlvcztcblxuLy8gTWFpbnRhaW4gY3VycmVudCB0b3VjaCB0YXJnZXQgdG8gcHJldmVudCBsYXRlIGNsaWNrcyBvbiB0b3VjaCBkZXZpY2VzXG52YXIgdG91Y2hUYXJnZXQ7XG4vLyBMaXN0ZW4gZm9yIGJvdGggZXZlbnRzIHRvIHN1cHBvcnQgdG91Y2gvbW91c2UgaHlicmlkIGRldmljZXNcbnRvdWNoICYmXG4gICRkb2Mub24oJ3RvdWNoc3RhcnQgbW91c2Vkb3duJywgZnVuY3Rpb24gKGV2dCkge1xuICAgIHRvdWNoVGFyZ2V0ID0gZXZ0LnRhcmdldDtcbiAgfSk7XG5cbi8qKlxuICogV2ViZmxvdy52YWxpZENsaWNrIC0gdmFsaWRhdGUgY2xpY2sgdGFyZ2V0IGFnYWluc3QgY3VycmVudCB0b3VjaCB0YXJnZXRcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBjbGlja1RhcmdldCAgRWxlbWVudCBiZWluZyBjbGlja2VkXG4gKiBAcmV0dXJuIHtCb29sZWFufSAgVHJ1ZSBpZiBjbGljayB0YXJnZXQgaXMgdmFsaWQgKGFsd2F5cyB0cnVlIG9uIG5vbi10b3VjaClcbiAqL1xuV2ViZmxvdy52YWxpZENsaWNrID0gdG91Y2hcbiAgPyBmdW5jdGlvbiAoY2xpY2tUYXJnZXQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNsaWNrVGFyZ2V0ID09PSB0b3VjaFRhcmdldCB8fCAkLmNvbnRhaW5zKGNsaWNrVGFyZ2V0LCB0b3VjaFRhcmdldClcbiAgICAgICk7XG4gICAgfVxuICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbi8qKlxuICogV2ViZmxvdy5yZXNpemUsIFdlYmZsb3cuc2Nyb2xsIC0gdGhyb3R0bGVkIGV2ZW50IHByb3hpZXNcbiAqL1xuXG52YXIgcmVzaXplRXZlbnRzID0gJ3Jlc2l6ZS53ZWJmbG93IG9yaWVudGF0aW9uY2hhbmdlLndlYmZsb3cgbG9hZC53ZWJmbG93JztcbnZhciBzY3JvbGxFdmVudHMgPSAnc2Nyb2xsLndlYmZsb3cgJyArIHJlc2l6ZUV2ZW50cztcbldlYmZsb3cucmVzaXplID0gZXZlbnRQcm94eSgkd2luLCByZXNpemVFdmVudHMpO1xuV2ViZmxvdy5zY3JvbGwgPSBldmVudFByb3h5KCR3aW4sIHNjcm9sbEV2ZW50cyk7XG5XZWJmbG93LnJlZHJhdyA9IGV2ZW50UHJveHkoKTtcblxuLy8gQ3JlYXRlIGEgcHJveHkgaW5zdGFuY2UgZm9yIHRocm90dGxlZCBldmVudHNcbmZ1bmN0aW9uIGV2ZW50UHJveHkodGFyZ2V0LCB0eXBlcykge1xuICAvLyBTZXQgdXAgdGhyb3R0bGVkIG1ldGhvZCAodXNpbmcgY3VzdG9tIGZyYW1lLWJhc2VkIF8udGhyb3R0bGUpXG5cbiAgdmFyIGhhbmRsZXJzID0gW107XG4gIHZhciBwcm94eSA9IHt9O1xuICBwcm94eS51cCA9IF8udGhyb3R0bGUoZnVuY3Rpb24gKGV2dCkge1xuICAgIF8uZWFjaChoYW5kbGVycywgZnVuY3Rpb24gKGgpIHtcbiAgICAgIGgoZXZ0KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQmluZCBldmVudHMgdG8gdGFyZ2V0XG4gIGlmICh0YXJnZXQgJiYgdHlwZXMpIHtcbiAgICB0YXJnZXQub24odHlwZXMsIHByb3h5LnVwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXZlbnQgaGFuZGxlclxuICAgKiBAcGFyYW0gIHtmdW5jdGlvbn0gaGFuZGxlclxuICAgKi9cbiAgcHJveHkub24gPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXy5jb250YWlucyhoYW5kbGVycywgaGFuZGxlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaGFuZGxlcnMucHVzaChoYW5kbGVyKTtcbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXJcbiAgICogQHBhcmFtICB7ZnVuY3Rpb259IGhhbmRsZXJcbiAgICovXG4gIHByb3h5Lm9mZiA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgLy8gSWYgbm8gYXJndW1lbnRzIHN1cHBsaWVkLCBjbGVhciBhbGwgaGFuZGxlcnNcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIGhhbmRsZXJzID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSwgcmVtb3ZlIGhhbmRsZXIgZnJvbSB0aGUgbGlzdFxuICAgIGhhbmRsZXJzID0gXy5maWx0ZXIoaGFuZGxlcnMsIGZ1bmN0aW9uIChoKSB7XG4gICAgICByZXR1cm4gaCAhPT0gaGFuZGxlcjtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gcHJveHk7XG59XG5cbi8vIFdlYmZsb3cubG9jYXRpb24gLSBXcmFwIHdpbmRvdy5sb2NhdGlvbiBpbiBhcGlcbldlYmZsb3cubG9jYXRpb24gPSBmdW5jdGlvbiAodXJsKSB7XG4gIHdpbmRvdy5sb2NhdGlvbiA9IHVybDtcbn07XG5cbmlmIChXZWJmbG93LmVudigpKSB7XG4gIC8vIElnbm9yZSByZWRpcmVjdHMgaW5zaWRlIGEgV2ViZmxvdyBkZXNpZ24vZWRpdCBlbnZpcm9ubWVudFxuICBXZWJmbG93LmxvY2F0aW9uID0gZnVuY3Rpb24gKCkge307XG59XG5cbi8vIFdlYmZsb3cucmVhZHkgLSBDYWxsIHByaW1hcnkgYW5kIHNlY29uZGFyeSBoYW5kbGVyc1xuV2ViZmxvdy5yZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgZG9tcmVhZHkgPSB0cnVlO1xuXG4gIC8vIFJlc3RvcmUgbW9kdWxlcyBhZnRlciBkZXN0cm95XG4gIGlmIChkZXN0cm95ZWQpIHtcbiAgICByZXN0b3JlTW9kdWxlcygpO1xuXG4gICAgLy8gT3RoZXJ3aXNlIHJ1biBwcmltYXJ5IHJlYWR5IG1ldGhvZHNcbiAgfSBlbHNlIHtcbiAgICBfLmVhY2gocHJpbWFyeSwgY2FsbFJlYWR5KTtcbiAgfVxuXG4gIC8vIFJ1biBzZWNvbmRhcnkgcmVhZHkgbWV0aG9kc1xuICBfLmVhY2goc2Vjb25kYXJ5LCBjYWxsUmVhZHkpO1xuXG4gIC8vIFRyaWdnZXIgcmVzaXplXG4gIFdlYmZsb3cucmVzaXplLnVwKCk7XG59O1xuXG5mdW5jdGlvbiBjYWxsUmVhZHkocmVhZHlGbikge1xuICBpc0Z1bmN0aW9uKHJlYWR5Rm4pICYmIHJlYWR5Rm4oKTtcbn1cblxuZnVuY3Rpb24gcmVzdG9yZU1vZHVsZXMoKSB7XG4gIGRlc3Ryb3llZCA9IGZhbHNlO1xuICBfLmVhY2gobW9kdWxlcywgYmluZE1vZHVsZSk7XG59XG5cbi8qKlxuICogV2ViZmxvdy5sb2FkIC0gQWRkIGEgd2luZG93IGxvYWQgaGFuZGxlciB0aGF0IHdpbGwgcnVuIGV2ZW4gaWYgbG9hZCBldmVudCBoYXMgYWxyZWFkeSBoYXBwZW5lZFxuICogQHBhcmFtICB7ZnVuY3Rpb259IGhhbmRsZXJcbiAqL1xudmFyIGRlZmVyTG9hZDtcbldlYmZsb3cubG9hZCA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gIGRlZmVyTG9hZC50aGVuKGhhbmRsZXIpO1xufTtcblxuZnVuY3Rpb24gYmluZExvYWQoKSB7XG4gIC8vIFJlamVjdCBhbnkgcHJldmlvdXMgZGVmZXJyZWQgKHRvIHN1cHBvcnQgZGVzdHJveSlcbiAgaWYgKGRlZmVyTG9hZCkge1xuICAgIGRlZmVyTG9hZC5yZWplY3QoKTtcbiAgICAkd2luLm9mZignbG9hZCcsIGRlZmVyTG9hZC5yZXNvbHZlKTtcbiAgfVxuICAvLyBDcmVhdGUgZGVmZXJyZWQgYW5kIGJpbmQgd2luZG93IGxvYWQgZXZlbnRcbiAgZGVmZXJMb2FkID0gbmV3ICQuRGVmZXJyZWQoKTtcbiAgJHdpbi5vbignbG9hZCcsIGRlZmVyTG9hZC5yZXNvbHZlKTtcbn1cblxuLy8gV2ViZmxvdy5kZXN0cm95IC0gVHJpZ2dlciBhIGRlc3Ryb3kgZXZlbnQgZm9yIGFsbCBtb2R1bGVzXG5XZWJmbG93LmRlc3Ryb3kgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZGVzdHJveWVkID0gdHJ1ZTtcbiAgJHdpbi50cmlnZ2VySGFuZGxlcignX193Zl9kZXN0cm95Jyk7XG5cbiAgLy8gQWxsb3cgZG9tcmVhZHkgcmVzZXQgZm9yIHRlc3RzXG4gIGlmIChvcHRpb25zLmRvbXJlYWR5ICE9IG51bGwpIHtcbiAgICBkb21yZWFkeSA9IG9wdGlvbnMuZG9tcmVhZHk7XG4gIH1cblxuICAvLyBVbmJpbmQgbW9kdWxlc1xuICBfLmVhY2gobW9kdWxlcywgdW5iaW5kTW9kdWxlKTtcblxuICAvLyBDbGVhciBhbnkgcHJveHkgZXZlbnQgaGFuZGxlcnNcbiAgV2ViZmxvdy5yZXNpemUub2ZmKCk7XG4gIFdlYmZsb3cuc2Nyb2xsLm9mZigpO1xuICBXZWJmbG93LnJlZHJhdy5vZmYoKTtcblxuICAvLyBDbGVhciBhbnkgcXVldWVkIHJlYWR5IG1ldGhvZHNcbiAgcHJpbWFyeSA9IFtdO1xuICBzZWNvbmRhcnkgPSBbXTtcblxuICAvLyBJZiBsb2FkIGV2ZW50IGhhcyBub3QgeWV0IGZpcmVkLCByZXBsYWNlIHRoZSBkZWZlcnJlZFxuICBpZiAoZGVmZXJMb2FkLnN0YXRlKCkgPT09ICdwZW5kaW5nJykge1xuICAgIGJpbmRMb2FkKCk7XG4gIH1cbn07XG5cbi8vIExpc3RlbiBmb3IgZG9tcmVhZHlcbiQoV2ViZmxvdy5yZWFkeSk7XG5cbi8vIExpc3RlbiBmb3Igd2luZG93Lm9ubG9hZCBhbmQgcmVzb2x2ZSBkZWZlcnJlZFxuYmluZExvYWQoKTtcblxuLy8gRXhwb3J0IGNvbW1vbmpzIG1vZHVsZVxubW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuV2ViZmxvdyA9IFdlYmZsb3c7XG4iXSwibmFtZXMiOlsiV2ViZmxvdyIsIm1vZHVsZXMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5Iiwid2luZG93IiwiJCIsImpRdWVyeSIsIiR3aW4iLCIkZG9jIiwiZG9jdW1lbnQiLCJpc0Z1bmN0aW9uIiwiXyIsInJlcXVpcmUiLCJ0cmFtIiwiZG9tcmVhZHkiLCJkZXN0cm95ZWQiLCJjb25maWciLCJoaWRlQmFja2ZhY2UiLCJrZWVwSW5oZXJpdGVkIiwiZGVmaW5lIiwibmFtZSIsImZhY3RvcnkiLCJvcHRpb25zIiwidW5iaW5kTW9kdWxlIiwiaW5zdGFuY2UiLCJiaW5kTW9kdWxlIiwibW9kdWxlIiwiZW52IiwiZGVzaWduIiwib24iLCJwcmV2aWV3IiwiZGVzdHJveSIsInJlYWR5IiwiYWRkUmVhZHkiLCJjb250YWlucyIsInB1c2giLCJvZmYiLCJyZW1vdmVSZWFkeSIsImZpbHRlciIsInJlYWR5Rm4iLCJtb2RlIiwiZGVzaWduRmxhZyIsIl9fd2ZfZGVzaWduIiwiaW5BcHAiLCJfX3dmX3NsdWciLCJXZWJmbG93RWRpdG9yIiwiV0VCRkxPV19FTlZfVEVTVCIsIl9fd2ZfdGVzdCIsInRvcCIsInVzZXJBZ2VudCIsIm5hdmlnYXRvciIsInRvTG93ZXJDYXNlIiwidG91Y2giLCJEb2N1bWVudFRvdWNoIiwiY2hyb21lIiwidGVzdCIsInZlbmRvciIsInBhcnNlSW50IiwibWF0Y2giLCJpb3MiLCJzYWZhcmkiLCJ0b3VjaFRhcmdldCIsImV2dCIsInRhcmdldCIsInZhbGlkQ2xpY2siLCJjbGlja1RhcmdldCIsInJlc2l6ZUV2ZW50cyIsInNjcm9sbEV2ZW50cyIsInJlc2l6ZSIsImV2ZW50UHJveHkiLCJzY3JvbGwiLCJyZWRyYXciLCJ0eXBlcyIsImhhbmRsZXJzIiwicHJveHkiLCJ1cCIsInRocm90dGxlIiwiZWFjaCIsImgiLCJoYW5kbGVyIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwibG9jYXRpb24iLCJ1cmwiLCJyZXN0b3JlTW9kdWxlcyIsImNhbGxSZWFkeSIsImRlZmVyTG9hZCIsImxvYWQiLCJ0aGVuIiwiYmluZExvYWQiLCJyZWplY3QiLCJyZXNvbHZlIiwiRGVmZXJyZWQiLCJ0cmlnZ2VySGFuZGxlciIsInN0YXRlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlELEdBRXpEOztDQUVDO0FBQ0QsSUFBSUEsVUFBVSxDQUFDO0FBQ2YsSUFBSUMsVUFBVSxDQUFDO0FBQ2YsSUFBSUMsVUFBVSxFQUFFO0FBQ2hCLElBQUlDLFlBQVlDLE9BQU9KLE9BQU8sSUFBSSxFQUFFO0FBQ3BDLElBQUlLLElBQUlELE9BQU9FLE1BQU07QUFDckIsSUFBSUMsT0FBT0YsRUFBRUQ7QUFDYixJQUFJSSxPQUFPSCxFQUFFSTtBQUNiLElBQUlDLGFBQWFMLEVBQUVLLFVBQVU7QUFDN0IsSUFBSUMsSUFBS1gsUUFBUVcsQ0FBQyxHQUFHQyxRQUFRO0FBQzdCLElBQUlDLE9BQVFiLFFBQVFhLElBQUksR0FBR0QsUUFBUSxpQkFBaUJQLEVBQUVRLElBQUk7QUFDMUQsSUFB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 }), 7624: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals window, document */ /** * Webflow: Auto-select links to current page or section */ var Webflow = __webpack_require__(3949); Webflow.define('links', module.exports = function($, _) { var api = {}; var $win = $(window); var designer; var inApp = Webflow.env(); var location = window.location; var tempLink = document.createElement('a'); var linkCurrent = 'w--current'; var indexPage = /index\.(html|php)$/; var dirList = /\/$/; var anchors; var slug; // ----------------------------------- // Module methods api.ready = api.design = api.preview = init; // ----------------------------------- // Private methods function init() { designer = inApp && Webflow.env('design'); slug = Webflow.env('slug') || location.pathname || ''; // Reset scroll listener, init anchors Webflow.scroll.off(scroll); anchors = []; // Test all links for a selectable href var links = document.links; for(var i = 0; i < links.length; ++i){ select(links[i]); } // Listen for scroll if any anchors exist if (anchors.length) { Webflow.scroll.on(scroll); scroll(); } } function select(link) { // Ignore localized links if (link.getAttribute('hreflang')) { return; } var href = designer && link.getAttribute('href-disabled') || link.getAttribute('href'); tempLink.href = href; // Ignore any hrefs with a colon to safely avoid all uri schemes if (href.indexOf(':') >= 0) { return; } var $link = $(link); // Check for all links with hash (eg (this-host)(/this-path)#section) to this page if (tempLink.hash.length > 1 && tempLink.host + tempLink.pathname === location.host + location.pathname) { // Ignore any hrefs with Google Translate type hash // Example: jQuery can't parse $('#googtrans(en|es)') // https://forum.webflow.com/t/dropdown-menus-not-working-on-site/87140 if (!/^#[a-zA-Z0-9\-\_]+$/.test(tempLink.hash)) { return; } var $section = $(tempLink.hash); $section.length && anchors.push({ link: $link, sec: $section, active: false }); return; } // Ignore empty # links if (href === '#' || href === '') { return; } // Determine whether the link should be selected var match = !inApp && tempLink.href === location.href || href === slug || indexPage.test(href) && dirList.test(slug); setClass($link, linkCurrent, match); } function scroll() { var viewTop = $win.scrollTop(); var viewHeight = $win.height(); // Check each anchor for a section in view _.each(anchors, function(anchor) { // Ignore localized links if (anchor.link.attr('hreflang')) { return; } var $link = anchor.link; var $section = anchor.sec; var top = $section.offset().top; var height = $section.outerHeight(); var offset = viewHeight * 0.5; var active = $section.is(':visible') && top + height - offset >= viewTop && top + offset <= viewTop + viewHeight; if (anchor.active === active) { return; } anchor.active = active; setClass($link, linkCurrent, active); }); } function setClass($elem, className, add) { var exists = $elem.hasClass(className); if (add && exists) { return; } if (!add && !exists) { return; } add ? $elem.addClass(className) : $elem.removeClass(className); } // Export module return api; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NoYXJlZC9yZW5kZXIvcGx1Z2lucy9CYXNlU2l0ZU1vZHVsZXMvd2ViZmxvdy1saW5rcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIHdpbmRvdywgZG9jdW1lbnQgKi9cblxuLyoqXG4gKiBXZWJmbG93OiBBdXRvLXNlbGVjdCBsaW5rcyB0byBjdXJyZW50IHBhZ2Ugb3Igc2VjdGlvblxuICovXG5cbnZhciBXZWJmbG93ID0gcmVxdWlyZSgnLi93ZWJmbG93LWxpYicpO1xuXG5XZWJmbG93LmRlZmluZShcbiAgJ2xpbmtzJyxcbiAgKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCQsIF8pIHtcbiAgICB2YXIgYXBpID0ge307XG4gICAgdmFyICR3aW4gPSAkKHdpbmRvdyk7XG4gICAgdmFyIGRlc2lnbmVyO1xuICAgIHZhciBpbkFwcCA9IFdlYmZsb3cuZW52KCk7XG4gICAgdmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuICAgIHZhciB0ZW1wTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB2YXIgbGlua0N1cnJlbnQgPSAndy0tY3VycmVudCc7XG4gICAgdmFyIGluZGV4UGFnZSA9IC9pbmRleFxcLihodG1sfHBocCkkLztcbiAgICB2YXIgZGlyTGlzdCA9IC9cXC8kLztcbiAgICB2YXIgYW5jaG9ycztcbiAgICB2YXIgc2x1ZztcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gTW9kdWxlIG1ldGhvZHNcblxuICAgIGFwaS5yZWFkeSA9IGFwaS5kZXNpZ24gPSBhcGkucHJldmlldyA9IGluaXQ7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFByaXZhdGUgbWV0aG9kc1xuXG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIGRlc2lnbmVyID0gaW5BcHAgJiYgV2ViZmxvdy5lbnYoJ2Rlc2lnbicpO1xuICAgICAgc2x1ZyA9IFdlYmZsb3cuZW52KCdzbHVnJykgfHwgbG9jYXRpb24ucGF0aG5hbWUgfHwgJyc7XG5cbiAgICAgIC8vIFJlc2V0IHNjcm9sbCBsaXN0ZW5lciwgaW5pdCBhbmNob3JzXG4gICAgICBXZWJmbG93LnNjcm9sbC5vZmYoc2Nyb2xsKTtcbiAgICAgIGFuY2hvcnMgPSBbXTtcblxuICAgICAgLy8gVGVzdCBhbGwgbGlua3MgZm9yIGEgc2VsZWN0YWJsZSBocmVmXG4gICAgICB2YXIgbGlua3MgPSBkb2N1bWVudC5saW5rcztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgc2VsZWN0KGxpbmtzW2ldKTtcbiAgICAgIH1cblxuICAgICAgLy8gTGlzdGVuIGZvciBzY3JvbGwgaWYgYW55IGFuY2hvcnMgZXhpc3RcbiAgICAgIGlmIChhbmNob3JzLmxlbmd0aCkge1xuICAgICAgICBXZWJmbG93LnNjcm9sbC5vbihzY3JvbGwpO1xuICAgICAgICBzY3JvbGwoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZWxlY3QobGluaykge1xuICAgICAgLy8gSWdub3JlIGxvY2FsaXplZCBsaW5rc1xuICAgICAgaWYgKGxpbmsuZ2V0QXR0cmlidXRlKCdocmVmbGFuZycpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGhyZWYgPVxuICAgICAgICAoZGVzaWduZXIgJiYgbGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYtZGlzYWJsZWQnKSkgfHxcbiAgICAgICAgbGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgIHRlbXBMaW5rLmhyZWYgPSBocmVmO1xuXG4gICAgICAvLyBJZ25vcmUgYW55IGhyZWZzIHdpdGggYSBjb2xvbiB0byBzYWZlbHkgYXZvaWQgYWxsIHVyaSBzY2hlbWVzXG4gICAgICBpZiAoaHJlZi5pbmRleE9mKCc6JykgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciAkbGluayA9ICQobGluayk7XG5cbiAgICAgIC8vIENoZWNrIGZvciBhbGwgbGlua3Mgd2l0aCBoYXNoIChlZyAodGhpcy1ob3N0KSgvdGhpcy1wYXRoKSNzZWN0aW9uKSB0byB0aGlzIHBhZ2VcbiAgICAgIGlmIChcbiAgICAgICAgdGVtcExpbmsuaGFzaC5sZW5ndGggPiAxICYmXG4gICAgICAgIHRlbXBMaW5rLmhvc3QgKyB0ZW1wTGluay5wYXRobmFtZSA9PT0gbG9jYXRpb24uaG9zdCArIGxvY2F0aW9uLnBhdGhuYW1lXG4gICAgICApIHtcbiAgICAgICAgLy8gSWdub3JlIGFueSBocmVmcyB3aXRoIEdvb2dsZSBUcmFuc2xhdGUgdHlwZSBoYXNoXG4gICAgICAgIC8vIEV4YW1wbGU6IGpRdWVyeSBjYW4ndCBwYXJzZSAkKCcjZ29vZ3RyYW5zKGVufGVzKScpXG4gICAgICAgIC8vIGh0dHBzOi8vZm9ydW0ud2ViZmxvdy5jb20vdC9kcm9wZG93bi1tZW51cy1ub3Qtd29ya2luZy1vbi1zaXRlLzg3MTQwXG4gICAgICAgIGlmICghL14jW2EtekEtWjAtOVxcLVxcX10rJC8udGVzdCh0ZW1wTGluay5oYXNoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciAkc2VjdGlvbiA9ICQodGVtcExpbmsuaGFzaCk7XG4gICAgICAgICRzZWN0aW9uLmxlbmd0aCAmJlxuICAgICAgICAgIGFuY2hvcnMucHVzaCh7XG4gICAgICAgICAgICBsaW5rOiAkbGluayxcbiAgICAgICAgICAgIHNlYzogJHNlY3Rpb24sXG4gICAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIElnbm9yZSBlbXB0eSAjIGxpbmtzXG4gICAgICBpZiAoaHJlZiA9PT0gJyMnIHx8IGhyZWYgPT09ICcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGxpbmsgc2hvdWxkIGJlIHNlbGVjdGVkXG4gICAgICB2YXIgbWF0Y2ggPVxuICAgICAgICAoIWluQXBwICYmIHRlbXBMaW5rLmhyZWYgPT09IGxvY2F0aW9uLmhyZWYpIHx8XG4gICAgICAgIGhyZWYgPT09IHNsdWcgfHxcbiAgICAgICAgKGluZGV4UGFnZS50ZXN0KGhyZWYpICYmIGRpckxpc3QudGVzdChzbHVnKSk7XG4gICAgICBzZXRDbGFzcygkbGluaywgbGlua0N1cnJlbnQsIG1hdGNoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY3JvbGwoKSB7XG4gICAgICB2YXIgdmlld1RvcCA9ICR3aW4uc2Nyb2xsVG9wKCk7XG4gICAgICB2YXIgdmlld0hlaWdodCA9ICR3aW4uaGVpZ2h0KCk7XG5cbiAgICAgIC8vIENoZWNrIGVhY2ggYW5jaG9yIGZvciBhIHNlY3Rpb24gaW4gdmlld1xuICAgICAgXy5lYWNoKGFuY2hvcnMsIGZ1bmN0aW9uIChhbmNob3IpIHtcbiAgICAgICAgLy8gSWdub3JlIGxvY2FsaXplZCBsaW5rc1xuICAgICAgICBpZiAoYW5jaG9yLmxpbmsuYXR0cignaHJlZmxhbmcnKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciAkbGluayA9IGFuY2hvci5saW5rO1xuICAgICAgICB2YXIgJHNlY3Rpb24gPSBhbmNob3Iuc2VjO1xuICAgICAgICB2YXIgdG9wID0gJHNlY3Rpb24ub2Zmc2V0KCkudG9wO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gJHNlY3Rpb24ub3V0ZXJIZWlnaHQoKTtcbiAgICAgICAgdmFyIG9mZnNldCA9IHZpZXdIZWlnaHQgKiAwLjU7XG4gICAgICAgIHZhciBhY3RpdmUgPVxuICAgICAgICAgICRzZWN0aW9uLmlzKCc6dmlzaWJsZScpICYmXG4gICAgICAgICAgdG9wICsgaGVpZ2h0IC0gb2Zmc2V0ID49IHZpZXdUb3AgJiZcbiAgICAgICAgICB0b3AgKyBvZmZzZXQgPD0gdmlld1RvcCArIHZpZXdIZWlnaHQ7XG4gICAgICAgIGlmIChhbmNob3IuYWN0aXZlID09PSBhY3RpdmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYW5jaG9yLmFjdGl2ZSA9IGFjdGl2ZTtcbiAgICAgICAgc2V0Q2xhc3MoJGxpbmssIGxpbmtDdXJyZW50LCBhY3RpdmUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0Q2xhc3MoJGVsZW0sIGNsYXNzTmFtZSwgYWRkKSB7XG4gICAgICB2YXIgZXhpc3RzID0gJGVsZW0uaGFzQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICAgIGlmIChhZGQgJiYgZXhpc3RzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghYWRkICYmICFleGlzdHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYWRkID8gJGVsZW0uYWRkQ2xhc3MoY2xhc3NOYW1lKSA6ICRlbGVtLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgLy8gRXhwb3J0IG1vZHVsZVxuICAgIHJldHVybiBhcGk7XG4gIH0pXG4pO1xuIl0sIm5hbWVzIjpbIldlYmZsb3ciLCJyZXF1aXJlIiwiZGVmaW5lIiwibW9kdWxlIiwiZXhwb3J0cyIsIiQiLCJfIiwiYXBpIiwiJHdpbiIsIndpbmRvdyIsImRlc2lnbmVyIiwiaW5BcHAiLCJlbnYiLCJsb2NhdGlvbiIsInRlbXBMaW5rIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwibGlua0N1cnJlbnQiLCJpbmRleFBhZ2UiLCJkaXJMaXN0IiwiYW5jaG9ycyIsInNsdWciLCJyZWFkeSIsImRlc2lnbiIsInByZXZpZXciLCJpbml0IiwicGF0aG5hbWUiLCJzY3JvbGwiLCJvZmYiLCJsaW5rcyIsImkiLCJsZW5ndGgiLCJzZWxlY3QiLCJvbiIsImxpbmsiLCJnZXRBdHRyaWJ1dGUiLCJocmVmIiwiaW5kZXhPZiIsIiRsaW5rIiwiaGFzaCIsImhvc3QiLCJ0ZXN0IiwiJHNlY3Rpb24iLCJwdXNoIiwic2VjIiwiYWN0aXZlIiwibWF0Y2giLCJzZXRDbGFzcyIsInZpZXdUb3AiLCJzY3JvbGxUb3AiLCJ2aWV3SGVpZ2h0IiwiaGVpZ2h0IiwiZWFjaCIsImFuY2hvciIsImF0dHIiLCJ0b3AiLCJvZmZzZXQiLCJvdXRlckhlaWdodCIsImlzIiwiJGVsZW0iLCJjbGFzc05hbWUiLCJhZGQiLCJleGlzdHMiLCJoYXNDbGFzcyIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QixHQUU1Qjs7Q0FFQztBQUVELElBQUlBLFVBQVVDLFFBQVE7QUFFdEJELFFBQVFFLE1BQU0sQ0FDWixTQUNDQyxPQUFPQyxPQUFPLEdBQUcsU0FBVUMsQ0FBQyxFQUFFQyxDQUFDO0lBQzlCLElBQUlDLE1BQU0sQ0FBQztJQUNYLElBQUlDLE9BQU9ILEVBQUVJO0lBQ2IsSUFBSUM7SUFDSixJQUFJQyxRQUFRWCxRQUFRWSxHQUFHO0lBQ3ZCLElBQUlDLFdBQVdKLE9BQU9JLFFBQVE7SUFDOUIsSUFBSUMsV0FBV0MsU0FBU0MsYUFBYSxDQUFDO0lBQ3RDLElBQUlDLGNBQWM7SUFDbEIsSUFBSUMsWUFBWTtJQUNoQixJQUFJQyxVQUFVO0lBQ2QsSUFBSUM7SUFDSixJQUFJQztJQUVKLHNDQUFzQztJQUN0QyxpQkFBaUI7SUFFakJkLElBQUllLEtBQUssR0FBR2YsSUFBSWdCLE1BQU0sR0FBR2hCLElBQUlpQixPQUFPLEdBQUdDO0lBRXZDLHNDQUFzQztJQUN0QyxrQkFBa0I7SUFFbEIsU0FBU0E7UUFDUGYsV0FBV0MsU0FBU1gsUUFBUVksR0FBRyxDQUFDO1FBQ2hDUyxPQUFPckIsUUFBUVksR0FBRyxDQUFDLFdBQVdDLFNBQVNhLFFBQVEsSUFBSTtRQUVuRCxzQ0FBc0M7UUFDdEMxQixRQUFRMkIsTUFBTSxDQUFDQyxHQUFHLENBQUNEO1FBQ25CUCxVQUFVLEVBQUU7UUFFWix1Q0FBdUM7UUFDdkMsSUFB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 }), 286: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals window, document */ /** * Webflow: Smooth scroll */ var Webflow = __webpack_require__(3949); Webflow.define('scroll', module.exports = function($) { /** * A collection of namespaced events found in this module. * Namespaced events encapsulate our code, and make it safer and easier * for designers to apply custom code overrides. * @see https://api.jquery.com/on/#event-names * @typedef {Object.} NamespacedEventsCollection */ var NS_EVENTS = { WF_CLICK_EMPTY: 'click.wf-empty-link', WF_CLICK_SCROLL: 'click.wf-scroll' }; var loc = window.location; var history = inIframe() ? null : window.history; var $win = $(window); var $doc = $(document); var $body = $(document.body); var animate = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function(fn) { window.setTimeout(fn, 15); }; var rootTag = Webflow.env('editor') ? '.w-editor-body' : 'body'; var headerSelector = 'header, ' + rootTag + ' > .header, ' + rootTag + ' > .w-nav:not([data-no-scroll])'; var emptyHrefSelector = 'a[href="#"]'; /** * Select only links whose href: * - contains a # * - is not one of our namespaced TabLink elements * - is not _only_ a # */ var localHrefSelector = 'a[href*="#"]:not(.w-tab-link):not(' + emptyHrefSelector + ')'; var scrollTargetOutlineCSS = '.wf-force-outline-none[tabindex="-1"]:focus{outline:none;}'; var focusStylesEl = document.createElement('style'); focusStylesEl.appendChild(document.createTextNode(scrollTargetOutlineCSS)); function inIframe() { try { return Boolean(window.frameElement); } catch (e) { return true; } } var validHash = /^#[a-zA-Z0-9][\w:.-]*$/; /** * Determine if link navigates to current page * @param {HTMLAnchorElement} link */ function linksToCurrentPage(link) { return validHash.test(link.hash) && link.host + link.pathname === loc.host + loc.pathname; } /** * Check if the designer has indicated that this page should * have no scroll animation, or if the end user has set * prefers-reduced-motion in their OS */ const reducedMotionMediaQuery = typeof window.matchMedia === 'function' && window.matchMedia('(prefers-reduced-motion: reduce)'); function reducedMotionEnabled() { return document.body.getAttribute('data-wf-scroll-motion') === 'none' || reducedMotionMediaQuery.matches; } function setFocusable($el, action) { var initialTabindex; switch(action){ case 'add': initialTabindex = $el.attr('tabindex'); if (initialTabindex) { $el.attr('data-wf-tabindex-swap', initialTabindex); } else { $el.attr('tabindex', '-1'); } break; case 'remove': initialTabindex = $el.attr('data-wf-tabindex-swap'); if (initialTabindex) { $el.attr('tabindex', initialTabindex); $el.removeAttr('data-wf-tabindex-swap'); } else { $el.removeAttr('tabindex'); } break; } $el.toggleClass('wf-force-outline-none', action === 'add'); } /** * Determine if we should execute custom scroll */ function validateScroll(evt) { var target = evt.currentTarget; if (// Bail if in Designer Webflow.env('design') || // Ignore links being used by jQuery mobile window.$.mobile && /(?:^|\s)ui-link(?:$|\s)/.test(target.className)) { return; } var hash = linksToCurrentPage(target) ? target.hash : ''; if (hash === '') return; var $el = $(hash); if (!$el.length) { return; } if (evt) { evt.preventDefault(); evt.stopPropagation(); } updateHistory(hash, evt); window.setTimeout(function() { scroll($el, function setFocus() { setFocusable($el, 'add'); $el.get(0).focus({ preventScroll: true }); setFocusable($el, 'remove'); }); }, evt ? 0 : 300); } function updateHistory(hash) { // Push new history state if (loc.hash !== hash && history && history.pushState && // Navigation breaks Chrome when the protocol is `file:`. !(Webflow.env.chrome && loc.protocol === 'file:')) { var oldHash = history.state && history.state.hash; if (oldHash !== hash) { history.pushState({ hash }, '', hash); } } } function scroll($targetEl, cb) { var start = $win.scrollTop(); var end = calculateScrollEndPosition($targetEl); if (start === end) return; var duration = calculateScrollDuration($targetEl, start, end); var clock = Date.now(); var step = function() { var elapsed = Date.now() - clock; window.scroll(0, getY(start, end, elapsed, duration)); if (elapsed <= duration) { animate(step); } else if (typeof cb === 'function') { cb(); } }; animate(step); } function calculateScrollEndPosition($targetEl) { // If a fixed header exists, offset for the height var $header = $(headerSelector); var offsetY = $header.css('position') === 'fixed' ? $header.outerHeight() : 0; var end = $targetEl.offset().top - offsetY; // If specified, scroll so that the element ends up in the middle of the viewport if ($targetEl.data('scroll') === 'mid') { var available = $win.height() - offsetY; var elHeight = $targetEl.outerHeight(); if (elHeight < available) { end -= Math.round((available - elHeight) / 2); } } return end; } function calculateScrollDuration($targetEl, start, end) { if (reducedMotionEnabled()) return 0; var mult = 1; // Check for custom time multiplier on the body and the scroll target $body.add($targetEl).each(function(_, el) { var time = parseFloat(el.getAttribute('data-scroll-time')); if (!isNaN(time) && time >= 0) { mult = time; } }); return (472.143 * Math.log(Math.abs(start - end) + 125) - 2000) * mult; } function getY(start, end, elapsed, duration) { if (elapsed > duration) { return end; } return start + (end - start) * ease(elapsed / duration); } function ease(t) { return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1; } function ready() { var { WF_CLICK_EMPTY, WF_CLICK_SCROLL } = NS_EVENTS; $doc.on(WF_CLICK_SCROLL, localHrefSelector, validateScroll); /** * Prevent empty hash links from triggering scroll. * Legacy feature to preserve: use the default "#" link * to trigger an interaction, and do not want the page * to scroll to the top. */ $doc.on(WF_CLICK_EMPTY, emptyHrefSelector, function(e) { e.preventDefault(); }); document.head.insertBefore(focusStylesEl, document.head.firstChild); } // Export module return { ready }; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NoYXJlZC9yZW5kZXIvcGx1Z2lucy9CYXNlU2l0ZU1vZHVsZXMvd2ViZmxvdy1zY3JvbGwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyB3aW5kb3csIGRvY3VtZW50ICovXG5cbi8qKlxuICogV2ViZmxvdzogU21vb3RoIHNjcm9sbFxuICovXG5cbnZhciBXZWJmbG93ID0gcmVxdWlyZSgnLi93ZWJmbG93LWxpYicpO1xuXG5XZWJmbG93LmRlZmluZShcbiAgJ3Njcm9sbCcsXG4gIChtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkKSB7XG4gICAgLyoqXG4gICAgICogQSBjb2xsZWN0aW9uIG9mIG5hbWVzcGFjZWQgZXZlbnRzIGZvdW5kIGluIHRoaXMgbW9kdWxlLlxuICAgICAqIE5hbWVzcGFjZWQgZXZlbnRzIGVuY2Fwc3VsYXRlIG91ciBjb2RlLCBhbmQgbWFrZSBpdCBzYWZlciBhbmQgZWFzaWVyXG4gICAgICogZm9yIGRlc2lnbmVycyB0byBhcHBseSBjdXN0b20gY29kZSBvdmVycmlkZXMuXG4gICAgICogQHNlZSBodHRwczovL2FwaS5qcXVlcnkuY29tL29uLyNldmVudC1uYW1lc1xuICAgICAqIEB0eXBlZGVmIHtPYmplY3QuPHN0cmluZz59IE5hbWVzcGFjZWRFdmVudHNDb2xsZWN0aW9uXG4gICAgICovXG4gICAgdmFyIE5TX0VWRU5UUyA9IHtcbiAgICAgIFdGX0NMSUNLX0VNUFRZOiAnY2xpY2sud2YtZW1wdHktbGluaycsXG4gICAgICBXRl9DTElDS19TQ1JPTEw6ICdjbGljay53Zi1zY3JvbGwnLFxuICAgIH07XG5cbiAgICB2YXIgbG9jID0gd2luZG93LmxvY2F0aW9uO1xuICAgIHZhciBoaXN0b3J5ID0gaW5JZnJhbWUoKSA/IG51bGwgOiB3aW5kb3cuaGlzdG9yeTtcbiAgICB2YXIgJHdpbiA9ICQod2luZG93KTtcbiAgICB2YXIgJGRvYyA9ICQoZG9jdW1lbnQpO1xuICAgIHZhciAkYm9keSA9ICQoZG9jdW1lbnQuYm9keSk7XG5cbiAgICB2YXIgYW5pbWF0ZSA9XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgICB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgICB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgICBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZm4sIDE1KTtcbiAgICAgIH07XG4gICAgdmFyIHJvb3RUYWcgPSBXZWJmbG93LmVudignZWRpdG9yJykgPyAnLnctZWRpdG9yLWJvZHknIDogJ2JvZHknO1xuICAgIHZhciBoZWFkZXJTZWxlY3RvciA9XG4gICAgICAnaGVhZGVyLCAnICtcbiAgICAgIHJvb3RUYWcgK1xuICAgICAgJyA+IC5oZWFkZXIsICcgK1xuICAgICAgcm9vdFRhZyArXG4gICAgICAnID4gLnctbmF2Om5vdChbZGF0YS1uby1zY3JvbGxdKSc7XG5cbiAgICB2YXIgZW1wdHlIcmVmU2VsZWN0b3IgPSAnYVtocmVmPVwiI1wiXSc7XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3Qgb25seSBsaW5rcyB3aG9zZSBocmVmOlxuICAgICAqIC0gY29udGFpbnMgYSAjXG4gICAgICogLSBpcyBub3Qgb25lIG9mIG91ciBuYW1lc3BhY2VkIFRhYkxpbmsgZWxlbWVudHNcbiAgICAgKiAtIGlzIG5vdCBfb25seV8gYSAjXG4gICAgICovXG4gICAgdmFyIGxvY2FsSHJlZlNlbGVjdG9yID1cbiAgICAgICdhW2hyZWYqPVwiI1wiXTpub3QoLnctdGFiLWxpbmspOm5vdCgnICsgZW1wdHlIcmVmU2VsZWN0b3IgKyAnKSc7XG5cbiAgICB2YXIgc2Nyb2xsVGFyZ2V0T3V0bGluZUNTUyA9XG4gICAgICAnLndmLWZvcmNlLW91dGxpbmUtbm9uZVt0YWJpbmRleD1cIi0xXCJdOmZvY3Vze291dGxpbmU6bm9uZTt9JztcblxuICAgIHZhciBmb2N1c1N0eWxlc0VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBmb2N1c1N0eWxlc0VsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHNjcm9sbFRhcmdldE91dGxpbmVDU1MpKTtcblxuICAgIGZ1bmN0aW9uIGluSWZyYW1lKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4od2luZG93LmZyYW1lRWxlbWVudCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB2YWxpZEhhc2ggPSAvXiNbYS16QS1aMC05XVtcXHc6Li1dKiQvO1xuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIGlmIGxpbmsgbmF2aWdhdGVzIHRvIGN1cnJlbnQgcGFnZVxuICAgICAqIEBwYXJhbSB7SFRNTEFuY2hvckVsZW1lbnR9IGxpbmtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaW5rc1RvQ3VycmVudFBhZ2UobGluaykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdmFsaWRIYXNoLnRlc3QobGluay5oYXNoKSAmJlxuICAgICAgICBsaW5rLmhvc3QgKyBsaW5rLnBhdGhuYW1lID09PSBsb2MuaG9zdCArIGxvYy5wYXRobmFtZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgZGVzaWduZXIgaGFzIGluZGljYXRlZCB0aGF0IHRoaXMgcGFnZSBzaG91bGRcbiAgICAgKiBoYXZlIG5vIHNjcm9sbCBhbmltYXRpb24sIG9yIGlmIHRoZSBlbmQgdXNlciBoYXMgc2V0XG4gICAgICogcHJlZmVycy1yZWR1Y2VkLW1vdGlvbiBpbiB0aGVpciBPU1xuICAgICAqL1xuICAgIGNvbnN0IHJlZHVjZWRNb3Rpb25NZWRpYVF1ZXJ5ID1cbiAgICAgIHR5cGVvZiB3aW5kb3cubWF0Y2hNZWRpYSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJyk7XG4gICAgZnVuY3Rpb24gcmVkdWNlZE1vdGlvbkVuYWJsZWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS13Zi1zY3JvbGwtbW90aW9uJykgPT09ICdub25lJyB8fFxuICAgICAgICByZWR1Y2VkTW90aW9uTWVkaWFRdWVyeS5tYXRjaGVzXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldEZvY3VzYWJsZSgkZWwsIGFjdGlvbikge1xuICAgICAgdmFyIGluaXRpYWxUYWJpbmRleDtcblxuICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnYWRkJzpcbiAgICAgICAgICBpbml0aWFsVGFiaW5kZXggPSAkZWwuYXR0cigndGFiaW5kZXgnKTtcblxuICAgICAgICAgIGlmIChpbml0aWFsVGFiaW5kZXgpIHtcbiAgICAgICAgICAgICRlbC5hdHRyKCdkYXRhLXdmLXRhYmluZGV4LXN3YXAnLCBpbml0aWFsVGFiaW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkZWwuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncmVtb3ZlJzpcbiAgICAgICAgICBpbml0aWFsVGFiaW5kZXggPSAkZWwuYXR0cignZGF0YS13Zi10YWJpbmRleC1zd2FwJyk7XG4gICAgICAgICAgaWYgKGluaXRpYWxUYWJpbmRleCkge1xuICAgICAgICAgICAgJGVsLmF0dHIoJ3RhYmluZGV4JywgaW5pdGlhbFRhYmluZGV4KTtcbiAgICAgICAgICAgICRlbC5yZW1vdmVBdHRyKCdkYXRhLXdmLXRhYmluZGV4LXN3YXAnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGVsLnJlbW92ZUF0dHIoJ3RhYmluZGV4Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAkZWwudG9nZ2xlQ2xhc3MoJ3dmLWZvcmNlLW91dGxpbmUtbm9uZScsIGFjdGlvbiA9PT0gJ2FkZCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBpZiB3ZSBzaG91bGQgZXhlY3V0ZSBjdXN0b20gc2Nyb2xsXG4gICAgICovXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVTY3JvbGwoZXZ0KSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gZXZ0LmN1cnJlbnRUYXJnZXQ7XG4gICAgICBpZiAoXG4gICAgICAgIC8vIEJhaWwgaWYgaW4gRGVzaWduZXJcbiAgICAgICAgV2ViZmxvdy5lbnYoJ2Rlc2lnbicpIHx8XG4gICAgICAgIC8vIElnbm9yZSBsaW5rcyBiZWluZyB1c2VkIGJ5IGpRdWVyeSBtb2JpbGVcbiAgICAgICAgKHdpbmRvdy4kLm1vYmlsZSAmJiAvKD86XnxcXHMpdWktbGluayg/OiR8XFxzKS8udGVzdCh0YXJnZXQuY2xhc3NOYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBoYXNoID0gbGlua3NUb0N1cnJlbnRQYWdlKHRhcmdldCkgPyB0YXJnZXQuaGFzaCA6ICcnO1xuICAgICAgaWYgKGhhc2ggPT09ICcnKSByZXR1cm47XG5cbiAgICAgIHZhciAkZWwgPSAkKGhhc2gpO1xuICAgICAgaWYgKCEkZWwubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2dCkge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVIaXN0b3J5KGhhc2gsIGV2dCk7XG5cbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2Nyb2xsKCRlbCwgZnVuY3Rpb24gc2V0Rm9jdXMoKSB7XG4gICAgICAgICAgICBzZXRGb2N1c2FibGUoJGVsLCAnYWRkJyk7XG4gICAgICAgICAgICAkZWwuZ2V0KDApLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiB0cnVlfSk7XG4gICAgICAgICAgICBzZXRGb2N1c2FibGUoJGVsLCAncmVtb3ZlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGV2dCA/IDAgOiAzMDBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlSGlzdG9yeShoYXNoKSB7XG4gICAgICAvLyBQdXNoIG5ldyBoaXN0b3J5IHN0YXRlXG4gICAgICBpZiAoXG4gICAgICAgIGxvYy5oYXNoICE9PSBoYXNoICYmXG4gICAgICAgIGhpc3RvcnkgJiZcbiAgICAgICAgaGlzdG9yeS5wdXNoU3RhdGUgJiZcbiAgICAgICAgLy8gTmF2aWdhdGlvbiBicmVha3MgQ2hyb21lIHdoZW4gdGhlIHByb3RvY29sIGlzIGBmaWxlOmAuXG4gICAgICAgICEoV2ViZmxvdy5lbnYuY2hyb21lICYmIGxvYy5wcm90b2NvbCA9PT0gJ2ZpbGU6JylcbiAgICAgICkge1xuICAgICAgICB2YXIgb2xkSGFzaCA9IGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5oYXNoO1xuICAgICAgICBpZiAob2xkSGFzaCAhPT0gaGFzaCkge1xuICAgICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHtoYXNofSwgJycsIGhhc2gpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2Nyb2xsKCR0YXJnZXRFbCwgY2IpIHtcbiAgICAgIHZhciBzdGFydCA9ICR3aW4uc2Nyb2xsVG9wKCk7XG4gICAgICB2YXIgZW5kID0gY2FsY3VsYXRlU2Nyb2xsRW5kUG9zaXRpb24oJHRhcmdldEVsKTtcblxuICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHJldHVybjtcblxuICAgICAgdmFyIGR1cmF0aW9uID0gY2FsY3VsYXRlU2Nyb2xsRHVyYXRpb24oJHRhcmdldEVsLCBzdGFydCwgZW5kKTtcblxuICAgICAgdmFyIGNsb2NrID0gRGF0ZS5ub3coKTtcbiAgICAgIHZhciBzdGVwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZWxhcHNlZCA9IERhdGUubm93KCkgLSBjbG9jaztcbiAgICAgICAgd2luZG93LnNjcm9sbCgwLCBnZXRZKHN0YXJ0LCBlbmQsIGVsYXBzZWQsIGR1cmF0aW9uKSk7XG5cbiAgICAgICAgaWYgKGVsYXBzZWQgPD0gZHVyYXRpb24pIHtcbiAgICAgICAgICBhbmltYXRlKHN0ZXApO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNiKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGFuaW1hdGUoc3RlcCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlU2Nyb2xsRW5kUG9zaXRpb24oJHRhcmdldEVsKSB7XG4gICAgICAvLyBJZiBhIGZpeGVkIGhlYWRlciBleGlzdHMsIG9mZnNldCBmb3IgdGhlIGhlaWdodFxuICAgICAgdmFyICRoZWFkZXIgPSAkKGhlYWRlclNlbGVjdG9yKTtcbiAgICAgIHZhciBvZmZzZXRZID1cbiAgICAgICAgJGhlYWRlci5jc3MoJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCcgPyAkaGVhZGVyLm91dGVySGVpZ2h0KCkgOiAwO1xuICAgICAgdmFyIGVuZCA9ICR0YXJnZXRFbC5vZmZzZXQoKS50b3AgLSBvZmZzZXRZO1xuXG4gICAgICAvLyBJZiBzcGVjaWZpZWQsIHNjcm9sbCBzbyB0aGF0IHRoZSBlbGVtZW50IGVuZHMgdXAgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdmlld3BvcnRcbiAgICAgIGlmICgkdGFyZ2V0RWwuZGF0YSgnc2Nyb2xsJykgPT09ICdtaWQnKSB7XG4gICAgICAgIHZhciBhdmFpbGFibGUgPSAkd2luLmhlaWdodCgpIC0gb2Zmc2V0WTtcbiAgICAgICAgdmFyIGVsSGVpZ2h0ID0gJHRhcmdldEVsLm91dGVySGVpZ2h0KCk7XG4gICAgICAgIGlmIChlbEhlaWdodCA8IGF2YWlsYWJsZSkge1xuICAgICAgICAgIGVuZCAtPSBNYXRoLnJvdW5kKChhdmFpbGFibGUgLSBlbEhlaWdodCkgLyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVuZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVTY3JvbGxEdXJhdGlvbigkdGFyZ2V0RWwsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIGlmIChyZWR1Y2VkTW90aW9uRW5hYmxlZCgpKSByZXR1cm4gMDtcblxuICAgICAgdmFyIG11bHQgPSAxO1xuICAgICAgLy8gQ2hlY2sgZm9yIGN1c3RvbSB0aW1lIG11bHRpcGxpZXIgb24gdGhlIGJvZHkgYW5kIHRoZSBzY3JvbGwgdGFyZ2V0XG4gICAgICAkYm9keS5hZGQoJHRhcmdldEVsKS5lYWNoKGZ1bmN0aW9uIChfLCBlbCkge1xuICAgICAgICB2YXIgdGltZSA9IHBhcnNlRmxvYXQoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXNjcm9sbC10aW1lJykpO1xuICAgICAgICBpZiAoIWlzTmFOKHRpbWUpICYmIHRpbWUgPj0gMCkge1xuICAgICAgICAgIG11bHQgPSB0aW1lO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuICg0NzIuMTQzICogTWF0aC5sb2coTWF0aC5hYnMoc3RhcnQgLSBlbmQpICsgMTI1KSAtIDIwMDApICogbXVsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRZKHN0YXJ0LCBlbmQsIGVsYXBzZWQsIGR1cmF0aW9uKSB7XG4gICAgICBpZiAoZWxhcHNlZCA+IGR1cmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBlbmQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGFydCArIChlbmQgLSBzdGFydCkgKiBlYXNlKGVsYXBzZWQgLyBkdXJhdGlvbik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZWFzZSh0KSB7XG4gICAgICByZXR1cm4gdCA8IDAuNSA/IDQgKiB0ICogdCAqIHQgOiAodCAtIDEpICogKDIgKiB0IC0gMikgKiAoMiAqIHQgLSAyKSArIDE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgdmFyIHtXRl9DTElDS19FTVBUWSwgV0ZfQ0xJQ0tfU0NST0xMfSA9IE5TX0VWRU5UUztcblxuICAgICAgJGRvYy5vbihXRl9DTElDS19TQ1JPTEwsIGxvY2FsSHJlZlNlbGVjdG9yLCB2YWxpZGF0ZVNjcm9sbCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogUHJldmVudCBlbXB0eSBoYXNoIGxpbmtzIGZyb20gdHJpZ2dlcmluZyBzY3JvbGwuXG4gICAgICAgKiBMZWdhY3kgZmVhdHVyZSB0byBwcmVzZXJ2ZTogdXNlIHRoZSBkZWZhdWx0IFwiI1wiIGxpbmtcbiAgICAgICAqIHRvIHRyaWdnZXIgYW4gaW50ZXJhY3Rpb24sIGFuZCBkbyBub3Qgd2FudCB0aGUgcGFnZVxuICAgICAgICogdG8gc2Nyb2xsIHRvIHRoZSB0b3AuXG4gICAgICAgKi9cbiAgICAgICRkb2Mub24oV0ZfQ0xJQ0tfRU1QVFksIGVtcHR5SHJlZlNlbGVjdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9KTtcblxuICAgICAgZG9jdW1lbnQuaGVhZC5pbnNlcnRCZWZvcmUoZm9jdXNTdHlsZXNFbCwgZG9jdW1lbnQuaGVhZC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICAvLyBFeHBvcnQgbW9kdWxlXG4gICAgcmV0dXJuIHtyZWFkeX07XG4gIH0pXG4pO1xuIl0sIm5hbWVzIjpbIldlYmZsb3ciLCJyZXF1aXJlIiwiZGVmaW5lIiwibW9kdWxlIiwiZXhwb3J0cyIsIiQiLCJOU19FVkVOVFMiLCJXRl9DTElDS19FTVBUWSIsIldGX0NMSUNLX1NDUk9MTCIsImxvYyIsIndpbmRvdyIsImxvY2F0aW9uIiwiaGlzdG9yeSIsImluSWZyYW1lIiwiJHdpbiIsIiRkb2MiLCJkb2N1bWVudCIsIiRib2R5IiwiYm9keSIsImFuaW1hdGUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJmbiIsInNldFRpbWVvdXQiLCJyb290VGFnIiwiZW52IiwiaGVhZGVyU2VsZWN0b3IiLCJlbXB0eUhyZWZTZWxlY3RvciIsImxvY2FsSHJlZlNlbGVjdG9yIiwic2Nyb2xsVGFyZ2V0T3V0bGluZUNTUyIsImZvY3VzU3R5bGVzRWwiLCJjcmVhdGVFbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsIkJvb2xlYW4iLCJmcmFtZUVsZW1lbnQiLCJlIiwidmFsaWRIYXNoIiwibGlua3NUb0N1cnJlbnRQYWdlIiwibGluayIsInRlc3QiLCJoYXNoIiwiaG9zdCIsInBhdGhuYW1lIiwicmVkdWNlZE1vdGlvbk1lZGlhUXVlcnkiLCJtYXRjaE1lZGlhIiwicmVkdWNlZE1vdGlvbkVuYWJsZWQiLCJnZXRBdHRyaWJ1dGUiLCJtYXRjaGVzIiwic2V0Rm9jdXNhYmxlIiwiJGVsIiwiYWN0aW9uIiwiaW5pdGlhbFRhYmluZGV4IiwiYXR0ciIsInJlbW92ZUF0dHIiLCJ0b2dnbGVDbGFzcyIsInZhbGlkYXRlU2Nyb2xsIiwiZXZ0IiwidGFyZ2V0IiwiY3VycmVudFRhcmdldCIsIm1vYmlsZSIsImNsYXNzTmFtZSIsImxlbmd0aCIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwidXBkYXRlSGlzdG9yeSIsInNjcm9sbCIsInNldEZvY3VzIiwiZ2V0IiwiZm9jdXMiLCJwcmV2ZW50U2Nyb2xsIiwicHVzaFN0YXRlIiwiY2hyb21lIiwicHJvdG9jb2wiLCJvbGRIYXNoIiwic3RhdGUiLCIkdGFyZ2V0RWwiLCJjYiIsInN0YXJ0Iiwic2Nyb2xsVG9wIiwiZW5kIiwiY2FsY3VsYXRlU2Nyb2xsRW5kUG9zaXRpb24iLCJkdXJhdGlvbiIsImNhbGN1bGF0ZVNjcm9sbER1cmF0aW9uIiwiY2xvY2siLCJEYXRlIiwibm93Iiwic3RlcCIsImVsYXBzZWQiLCJnZXRZIiwiJGhlYWRlciIsIm9mZnNldFkiLCJjc3MiLCJvdXRlckhlaWdodCIsIm9mZnNldCIsInRvcCIsImRhdGEiLCJhdmFpbGFibGUiLCJoZWlnaHQiLCJlbEhlaWdodCIsIk1hdGgiLCJyb3VuZCIsIm11bHQiLCJhZGQiLCJlYWNoIiwiXyIsImVsIiwidGltZSIsInBhcnNlRmxvYXQiLCJpc05hTiIsImxvZyIsImFicyIsImVhc2UiLCJ0IiwicmVhZHkiLCJvbiIsImhlYWQiLCJpbnNlcnRCZWZvcmUiLCJmaXJzdENoaWxkIl0sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEIsR0FFNUI7O0NBRUM7QUFFRCxJQUFJQSxVQUFVQyxRQUFRO0FBRXRCRCxRQUFRRSxNQUFNLENBQ1osVUFDQ0MsT0FBT0MsT0FBTyxHQUFHLFNBQVVDLENBQUM7SUFDM0I7Ozs7OztLQU1DLEdBQ0QsSUFBSUMsWUFBWTtRQUNkQyxnQkFBZ0I7UUFDaEJDLGlCQUFpQjtJQUNuQjtJQUVBLElBQUlDLE1BQU1DLE9BQU9DLFFBQVE7SUFDekIsSUFBSUMsVUFBVUMsYUFBYSxPQUFPSCxPQUFPRSxPQUFPO0lBQ2hELElBQUlFLE9BQU9ULEVBQUVLO0lBQ2IsSUFBSUssT0FBT1YsRUFBRVc7SUFDYixJQUFJQyxRQUFRWixFQUFFVyxTQUFTRSxJQUFJO0lBRTNCLElBQUlDLFVBQ0ZULE9BQU9VLHFCQUFxQixJQUM1QlYsT0FBT1csd0JBQXdCLElBQy9CWCxPQUFPWSwyQkFBMkIsSUFDbEMsU0FBVUMsRUFBRTtRQUNWYixPQUFPYyxVQUFVLENBQUNELElBQUk7SUFDeEI7SUFDRixJQUFJRSxVQUFVekIsUUFBUTBCLEdBQUcsQ0FBQyxZQUFZLG1CQUFtQjtJQUN6RCxJQUFJQyxpQkFDRixhQUNBRixVQUNBLGlCQUNBQSxVQUNBO0lBRUYsSUFBSUcsb0JBQW9CO0lBRXhCOzs7OztLQUtDLEdBQ0QsSUFBSUMsb0JBQ0YsdUNBQXVDRCxvQkFBb0I7SUFFN0QsSUFBSUUseUJBQ0Y7SUFFRixJQUFJQyxn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 }), 3695: (function (module, __unused_webpack_exports, __webpack_require__) { "use strict"; /* globals document, window */ /** * Webflow: Touch events * Supports legacy 'tap' event * Adds a 'swipe' event to desktop and mobile */ var Webflow = __webpack_require__(3949); Webflow.define('touch', module.exports = function($) { var api = {}; var getSelection = window.getSelection; // Delegate all legacy 'tap' events to 'click' $.event.special.tap = { bindType: 'click', delegateType: 'click' }; api.init = function(el) { el = typeof el === 'string' ? $(el).get(0) : el; return el ? new Touch(el) : null; }; function Touch(el) { var active = false; var useTouch = false; var thresholdX = Math.min(Math.round(window.innerWidth * 0.04), 40); var startX; var lastX; el.addEventListener('touchstart', start, false); el.addEventListener('touchmove', move, false); el.addEventListener('touchend', end, false); el.addEventListener('touchcancel', cancel, false); el.addEventListener('mousedown', start, false); el.addEventListener('mousemove', move, false); el.addEventListener('mouseup', end, false); el.addEventListener('mouseout', cancel, false); function start(evt) { // We don’t handle multi-touch events yet. var touches = evt.touches; if (touches && touches.length > 1) { return; } active = true; if (touches) { useTouch = true; startX = touches[0].clientX; } else { startX = evt.clientX; } lastX = startX; } function move(evt) { if (!active) { return; } if (useTouch && evt.type === 'mousemove') { evt.preventDefault(); evt.stopPropagation(); return; } var touches = evt.touches; var x = touches ? touches[0].clientX : evt.clientX; var velocityX = x - lastX; lastX = x; // Allow swipes while pointer is down, but prevent them during text selection if (Math.abs(velocityX) > thresholdX && getSelection && String(getSelection()) === '') { triggerEvent('swipe', evt, { direction: velocityX > 0 ? 'right' : 'left' }); cancel(); } } function end(evt) { if (!active) { return; } active = false; if (useTouch && evt.type === 'mouseup') { evt.preventDefault(); evt.stopPropagation(); useTouch = false; return; } } function cancel() { active = false; } function destroy() { el.removeEventListener('touchstart', start, false); el.removeEventListener('touchmove', move, false); el.removeEventListener('touchend', end, false); el.removeEventListener('touchcancel', cancel, false); el.removeEventListener('mousedown', start, false); el.removeEventListener('mousemove', move, false); el.removeEventListener('mouseup', end, false); el.removeEventListener('mouseout', cancel, false); el = null; } // Public instance methods this.destroy = destroy; } // Wrap native event to supoprt preventdefault + stopPropagation function triggerEvent(type, evt, data) { var newEvent = $.Event(type, { originalEvent: evt }); $(evt.target).trigger(newEvent, data); } // Listen for touch events on all nodes by default. api.instance = api.init(document); // Export module return api; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NoYXJlZC9yZW5kZXIvcGx1Z2lucy9CYXNlU2l0ZU1vZHVsZXMvd2ViZmxvdy10b3VjaC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIGRvY3VtZW50LCB3aW5kb3cgKi9cblxuLyoqXG4gKiBXZWJmbG93OiBUb3VjaCBldmVudHNcbiAqIFN1cHBvcnRzIGxlZ2FjeSAndGFwJyBldmVudFxuICogQWRkcyBhICdzd2lwZScgZXZlbnQgdG8gZGVza3RvcCBhbmQgbW9iaWxlXG4gKi9cblxudmFyIFdlYmZsb3cgPSByZXF1aXJlKCcuL3dlYmZsb3ctbGliJyk7XG5cbldlYmZsb3cuZGVmaW5lKFxuICAndG91Y2gnLFxuICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoJCkge1xuICAgIHZhciBhcGkgPSB7fTtcbiAgICB2YXIgZ2V0U2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbjtcblxuICAgIC8vIERlbGVnYXRlIGFsbCBsZWdhY3kgJ3RhcCcgZXZlbnRzIHRvICdjbGljaydcbiAgICAkLmV2ZW50LnNwZWNpYWwudGFwID0ge2JpbmRUeXBlOiAnY2xpY2snLCBkZWxlZ2F0ZVR5cGU6ICdjbGljayd9O1xuXG4gICAgYXBpLmluaXQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgIGVsID0gdHlwZW9mIGVsID09PSAnc3RyaW5nJyA/ICQoZWwpLmdldCgwKSA6IGVsO1xuICAgICAgcmV0dXJuIGVsID8gbmV3IFRvdWNoKGVsKSA6IG51bGw7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIFRvdWNoKGVsKSB7XG4gICAgICB2YXIgYWN0aXZlID0gZmFsc2U7XG4gICAgICB2YXIgdXNlVG91Y2ggPSBmYWxzZTtcbiAgICAgIHZhciB0aHJlc2hvbGRYID0gTWF0aC5taW4oTWF0aC5yb3VuZCh3aW5kb3cuaW5uZXJXaWR0aCAqIDAuMDQpLCA0MCk7XG4gICAgICB2YXIgc3RhcnRYO1xuICAgICAgdmFyIGxhc3RYO1xuXG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc3RhcnQsIGZhbHNlKTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG1vdmUsIGZhbHNlKTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZW5kLCBmYWxzZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIGNhbmNlbCwgZmFsc2UpO1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgc3RhcnQsIGZhbHNlKTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdmUsIGZhbHNlKTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBlbmQsIGZhbHNlKTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgY2FuY2VsLCBmYWxzZSk7XG5cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0KGV2dCkge1xuICAgICAgICAvLyBXZSBkb27igJl0IGhhbmRsZSBtdWx0aS10b3VjaCBldmVudHMgeWV0LlxuICAgICAgICB2YXIgdG91Y2hlcyA9IGV2dC50b3VjaGVzO1xuICAgICAgICBpZiAodG91Y2hlcyAmJiB0b3VjaGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0b3VjaGVzKSB7XG4gICAgICAgICAgdXNlVG91Y2ggPSB0cnVlO1xuICAgICAgICAgIHN0YXJ0WCA9IHRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFydFggPSBldnQuY2xpZW50WDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RYID0gc3RhcnRYO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBtb3ZlKGV2dCkge1xuICAgICAgICBpZiAoIWFjdGl2ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1c2VUb3VjaCAmJiBldnQudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcbiAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRvdWNoZXMgPSBldnQudG91Y2hlcztcbiAgICAgICAgdmFyIHggPSB0b3VjaGVzID8gdG91Y2hlc1swXS5jbGllbnRYIDogZXZ0LmNsaWVudFg7XG4gICAgICAgIHZhciB2ZWxvY2l0eVggPSB4IC0gbGFzdFg7XG5cbiAgICAgICAgbGFzdFggPSB4O1xuXG4gICAgICAgIC8vIEFsbG93IHN3aXBlcyB3aGlsZSBwb2ludGVyIGlzIGRvd24sIGJ1dCBwcmV2ZW50IHRoZW0gZHVyaW5nIHRleHQgc2VsZWN0aW9uXG4gICAgICAgIGlmIChcbiAgICAgICAgICBNYXRoLmFicyh2ZWxvY2l0eVgpID4gdGhyZXNob2xkWCAmJlxuICAgICAgICAgIGdldFNlbGVjdGlvbiAmJlxuICAgICAgICAgIFN0cmluZyhnZXRTZWxlY3Rpb24oKSkgPT09ICcnXG4gICAgICAgICkge1xuICAgICAgICAgIHRyaWdnZXJFdmVudCgnc3dpcGUnLCBldnQsIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogdmVsb2NpdHlYID4gMCA/ICdyaWdodCcgOiAnbGVmdCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZW5kKGV2dCkge1xuICAgICAgICBpZiAoIWFjdGl2ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodXNlVG91Y2ggJiYgZXZ0LnR5cGUgPT09ICdtb3VzZXVwJykge1xuICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB1c2VUb3VjaCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc3RhcnQsIGZhbHNlKTtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgbW92ZSwgZmFsc2UpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGVuZCwgZmFsc2UpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIGNhbmNlbCwgZmFsc2UpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBzdGFydCwgZmFsc2UpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3ZlLCBmYWxzZSk7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBlbmQsIGZhbHNlKTtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBjYW5jZWwsIGZhbHNlKTtcbiAgICAgICAgZWwgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBQdWJsaWMgaW5zdGFuY2UgbWV0aG9kc1xuICAgICAgdGhpcy5kZXN0cm95ID0gZGVzdHJveTtcbiAgICB9XG5cbiAgICAvLyBXcmFwIG5hdGl2ZSBldmVudCB0byBzdXBvcHJ0IHByZXZlbnRkZWZhdWx0ICsgc3RvcFByb3BhZ2F0aW9uXG4gICAgZnVuY3Rpb24gdHJpZ2dlckV2ZW50KHR5cGUsIGV2dCwgZGF0YSkge1xuICAgICAgdmFyIG5ld0V2ZW50ID0gJC5FdmVudCh0eXBlLCB7b3JpZ2luYWxFdmVudDogZXZ0fSk7XG4gICAgICAkKGV2dC50YXJnZXQpLnRyaWdnZXIobmV3RXZlbnQsIGRhdGEpO1xuICAgIH1cblxuICAgIC8vIExpc3RlbiBmb3IgdG91Y2ggZXZlbnRzIG9uIGFsbCBub2RlcyBieSBkZWZhdWx0LlxuICAgIGFwaS5pbnN0YW5jZSA9IGFwaS5pbml0KGRvY3VtZW50KTtcblxuICAgIC8vIEV4cG9ydCBtb2R1bGVcbiAgICByZXR1cm4gYXBpO1xuICB9KVxuKTtcbiJdLCJuYW1lcyI6WyJXZWJmbG93IiwicmVxdWlyZSIsImRlZmluZSIsIm1vZHVsZSIsImV4cG9ydHMiLCIkIiwiYXBpIiwiZ2V0U2VsZWN0aW9uIiwid2luZG93IiwiZXZlbnQiLCJzcGVjaWFsIiwidGFwIiwiYmluZFR5cGUiLCJkZWxlZ2F0ZVR5cGUiLCJpbml0IiwiZWwiLCJnZXQiLCJUb3VjaCIsImFjdGl2ZSIsInVzZVRvdWNoIiwidGhyZXNob2xkWCIsIk1hdGgiLCJtaW4iLCJyb3VuZCIsImlubmVyV2lkdGgiLCJzdGFydFgiLCJsYXN0WCIsImFkZEV2ZW50TGlzdGVuZXIiLCJzdGFydCIsIm1vdmUiLCJlbmQiLCJjYW5jZWwiLCJldnQiLCJ0b3VjaGVzIiwibGVuZ3RoIiwiY2xpZW50WCIsInR5cGUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsIngiLCJ2ZWxvY2l0eVgiLCJhYnMiLCJTdHJpbmciLCJ0cmlnZ2VyRXZlbnQiLCJkaXJlY3Rpb24iLCJkZXN0cm95IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRhdGEiLCJuZXdFdmVudCIsIkV2ZW50Iiwib3JpZ2luYWxFdmVudCIsInRhcmdldCIsInRyaWdnZXIiLCJpbnN0YW5jZSIsImRvY3VtZW50Il0sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEIsR0FFNUI7Ozs7Q0FJQztBQUVELElBQUlBLFVBQVVDLFFB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 }), 3946: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { actionListPlaybackChanged: function() { return actionListPlaybackChanged; }, animationFrameChanged: function() { return animationFrameChanged; }, clearRequested: function() { return clearRequested; }, elementStateChanged: function() { return elementStateChanged; }, eventListenerAdded: function() { return eventListenerAdded; }, eventStateChanged: function() { return eventStateChanged; }, instanceAdded: function() { return instanceAdded; }, instanceRemoved: function() { return instanceRemoved; }, instanceStarted: function() { return instanceStarted; }, mediaQueriesDefined: function() { return mediaQueriesDefined; }, parameterChanged: function() { return parameterChanged; }, playbackRequested: function() { return playbackRequested; }, previewRequested: function() { return previewRequested; }, rawDataImported: function() { return rawDataImported; }, sessionInitialized: function() { return sessionInitialized; }, sessionStarted: function() { return sessionStarted; }, sessionStopped: function() { return sessionStopped; }, stopRequested: function() { return stopRequested; }, testFrameRendered: function() { return testFrameRendered; }, viewportWidthChanged: function() { return viewportWidthChanged; } }); const _sharedconstants = __webpack_require__(7087); const _shared = __webpack_require__(9468); const { IX2_RAW_DATA_IMPORTED, IX2_SESSION_INITIALIZED, IX2_SESSION_STARTED, IX2_SESSION_STOPPED, IX2_PREVIEW_REQUESTED, IX2_PLAYBACK_REQUESTED, IX2_STOP_REQUESTED, IX2_CLEAR_REQUESTED, IX2_EVENT_LISTENER_ADDED, IX2_TEST_FRAME_RENDERED, IX2_EVENT_STATE_CHANGED, IX2_ANIMATION_FRAME_CHANGED, IX2_PARAMETER_CHANGED, IX2_INSTANCE_ADDED, IX2_INSTANCE_STARTED, IX2_INSTANCE_REMOVED, IX2_ELEMENT_STATE_CHANGED, IX2_ACTION_LIST_PLAYBACK_CHANGED, IX2_VIEWPORT_WIDTH_CHANGED, IX2_MEDIA_QUERIES_DEFINED } = _sharedconstants.IX2EngineActionTypes; const { reifyState } = _shared.IX2VanillaUtils; const rawDataImported = (rawData)=>({ type: IX2_RAW_DATA_IMPORTED, payload: { ...reifyState(rawData) } }); const sessionInitialized = ({ hasBoundaryNodes, reducedMotion })=>({ type: IX2_SESSION_INITIALIZED, payload: { hasBoundaryNodes, reducedMotion } }); const sessionStarted = ()=>({ type: IX2_SESSION_STARTED }); const sessionStopped = ()=>({ type: IX2_SESSION_STOPPED }); const previewRequested = ({ rawData, defer })=>({ type: IX2_PREVIEW_REQUESTED, payload: { defer, rawData } }); const playbackRequested = ({ actionTypeId = _sharedconstants.ActionTypeConsts.GENERAL_START_ACTION, actionListId, actionItemId, eventId, allowEvents, immediate, testManual, verbose, rawData })=>({ type: IX2_PLAYBACK_REQUESTED, payload: { actionTypeId, actionListId, actionItemId, testManual, eventId, allowEvents, immediate, verbose, rawData } }); const stopRequested = (actionListId)=>({ type: IX2_STOP_REQUESTED, payload: { actionListId } }); const clearRequested = ()=>({ type: IX2_CLEAR_REQUESTED }); const eventListenerAdded = (target, listenerParams)=>({ type: IX2_EVENT_LISTENER_ADDED, payload: { target, listenerParams } }); const testFrameRendered = (step = 1)=>({ type: IX2_TEST_FRAME_RENDERED, payload: { step } }); const eventStateChanged = (stateKey, newState)=>({ type: IX2_EVENT_STATE_CHANGED, payload: { stateKey, newState } }); const animationFrameChanged = (now, parameters)=>({ type: IX2_ANIMATION_FRAME_CHANGED, payload: { now, parameters } }); const parameterChanged = (key, value)=>({ type: IX2_PARAMETER_CHANGED, payload: { key, value } }); const instanceAdded = (options)=>({ type: IX2_INSTANCE_ADDED, payload: { ...options } }); const instanceStarted = (instanceId, time)=>({ type: IX2_INSTANCE_STARTED, payload: { instanceId, time } }); const instanceRemoved = (instanceId)=>({ type: IX2_INSTANCE_REMOVED, payload: { instanceId } }); const elementStateChanged = (elementId, actionTypeId, current, actionItem)=>({ type: IX2_ELEMENT_STATE_CHANGED, payload: { elementId, actionTypeId, current, actionItem } }); const actionListPlaybackChanged = ({ actionListId, isPlaying })=>({ type: IX2_ACTION_LIST_PLAYBACK_CHANGED, payload: { actionListId, isPlaying } }); const viewportWidthChanged = ({ width, mediaQueries })=>({ type: IX2_VIEWPORT_WIDTH_CHANGED, payload: { width, mediaQueries } }); const mediaQueriesDefined = ()=>({ type: IX2_MEDIA_QUERIES_DEFINED }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZS9hY3Rpb25zL0lYMkVuZ2luZUFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWN0aW9uVHlwZUNvbnN0cyxcbiAgSVgyRW5naW5lQWN0aW9uVHlwZXMsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcblxuaW1wb3J0IHtJWDJWYW5pbGxhVXRpbHN9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFjdGlvbkxpc3RJZCxcbiAgQWN0aW9uSWQsXG4gIEV2ZW50SWQsXG4gIENvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkLFxuICBBY3Rpb25UeXBlSWRUeXBlLFxuICBBY3Rpb25MaXN0c1R5cGUsXG4gIEV2ZW50c1R5cGUsXG4gIEV2ZW50VHlwZSxcbn0gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL3R5cGVzLWNvcmUnO1xuaW1wb3J0IHtCcmVha3BvaW50SUR9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL3N0eWxlL3R5cGVzJztcblxuY29uc3Qge1xuICBJWDJfUkFXX0RBVEFfSU1QT1JURUQsXG4gIElYMl9TRVNTSU9OX0lOSVRJQUxJWkVELFxuICBJWDJfU0VTU0lPTl9TVEFSVEVELFxuICBJWDJfU0VTU0lPTl9TVE9QUEVELFxuICBJWDJfUFJFVklFV19SRVFVRVNURUQsXG4gIElYMl9QTEFZQkFDS19SRVFVRVNURUQsXG4gIElYMl9TVE9QX1JFUVVFU1RFRCxcbiAgSVgyX0NMRUFSX1JFUVVFU1RFRCxcbiAgSVgyX0VWRU5UX0xJU1RFTkVSX0FEREVELFxuICBJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCxcbiAgSVgyX0VWRU5UX1NUQVRFX0NIQU5HRUQsXG4gIElYMl9BTklNQVRJT05fRlJBTUVfQ0hBTkdFRCxcbiAgSVgyX1BBUkFNRVRFUl9DSEFOR0VELFxuICBJWDJfSU5TVEFOQ0VfQURERUQsXG4gIElYMl9JTlNUQU5DRV9TVEFSVEVELFxuICBJWDJfSU5TVEFOQ0VfUkVNT1ZFRCxcbiAgSVgyX0VMRU1FTlRfU1RBVEVfQ0hBTkdFRCxcbiAgSVgyX0FDVElPTl9MSVNUX1BMQVlCQUNLX0NIQU5HRUQsXG4gIElYMl9WSUVXUE9SVF9XSURUSF9DSEFOR0VELFxuICBJWDJfTUVESUFfUVVFUklFU19ERUZJTkVELFxufSA9IElYMkVuZ2luZUFjdGlvblR5cGVzO1xuXG5jb25zdCB7cmVpZnlTdGF0ZX0gPSBJWDJWYW5pbGxhVXRpbHM7XG5cbmV4cG9ydCB0eXBlIElYMlJhd0RhdGEgPSB7XG4gIGV2ZW50czogRXZlbnRzVHlwZTtcbiAgYWN0aW9uTGlzdHM6IEFjdGlvbkxpc3RzVHlwZTtcbiAgc2l0ZToge21lZGlhUXVlcmllczoge2tleTogQnJlYWtwb2ludElEOyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXJ9W119O1xufTtcblxuZXhwb3J0IHR5cGUgcmF3RGF0YUltcG9ydGVkUGF5bG9hZCA9IHtcbiAgaXhEYXRhOiB7XG4gICAgZXZlbnRzOiBFdmVudHNUeXBlIHwgdW5kZWZpbmVkO1xuICAgIGFjdGlvbkxpc3RzOiBBY3Rpb25MaXN0c1R5cGUgfCB1bmRlZmluZWQ7XG4gICAgZXZlbnRUeXBlTWFwOiB7W2sgaW4gRXZlbnRUeXBlWydldmVudFR5cGVJZCddXToge1trZXk6IHN0cmluZ106IEV2ZW50VHlwZX19O1xuICAgIG1lZGlhUXVlcmllczogSVgyUmF3RGF0YVsnc2l0ZSddWydtZWRpYVF1ZXJpZXMnXTtcbiAgICBtZWRpYVF1ZXJ5S2V5czogQnJlYWtwb2ludElEW107XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcmF3RGF0YUltcG9ydGVkID0gKHJhd0RhdGE6IElYMlJhd0RhdGEpID0+ICh7XG4gIHR5cGU6IElYMl9SQVdfREFUQV9JTVBPUlRFRCxcbiAgcGF5bG9hZDoge1xuICAgIC4uLnJlaWZ5U3RhdGUocmF3RGF0YSksXG4gIH0sXG59KTtcblxuZXhwb3J0IHR5cGUgc2Vzc2lvbkluaXRpYWxpemVkUGF5bG9hZCA9IHtcbiAgaGFzQm91bmRhcnlOb2RlczogYm9vbGVhbjtcbiAgcmVkdWNlZE1vdGlvbjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXNzaW9uSW5pdGlhbGl6ZWQgPSAoe1xuICBoYXNCb3VuZGFyeU5vZGVzLFxuICByZWR1Y2VkTW90aW9uLFxufTogc2Vzc2lvbkluaXRpYWxpemVkUGF5bG9hZCkgPT4gKHtcbiAgdHlwZTogSVgyX1NFU1NJT05fSU5JVElBTElaRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBoYXNCb3VuZGFyeU5vZGVzLFxuICAgIHJlZHVjZWRNb3Rpb24sXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IHNlc3Npb25TdGFydGVkID0gKCkgPT4gKHtcbiAgdHlwZTogSVgyX1NFU1NJT05fU1RBUlRFRCxcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2Vzc2lvblN0b3BwZWQgPSAoKSA9PiAoe1xuICB0eXBlOiBJWDJfU0VTU0lPTl9TVE9QUEVELFxufSk7XG5cbmV4cG9ydCB0eXBlIHByZXZpZXdSZXF1ZXN0ZWRQYXlsb2FkID0ge1xuICByYXdEYXRhOiBJWDJSYXdEYXRhO1xuICBkZWZlcjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmV2aWV3UmVxdWVzdGVkID0gKHtcbiAgcmF3RGF0YSxcbiAgZGVmZXIsXG59OiBwcmV2aWV3UmVxdWVzdGVkUGF5bG9hZCkgPT4gKHtcbiAgdHlwZTogSVgyX1BSRVZJRVdfUkVRVUVTVEVELFxuICBwYXlsb2FkOiB7XG4gICAgZGVmZXIsXG4gICAgcmF3RGF0YSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgdHlwZSBwbGF5YmFja1JlcXVlc3RlZFBheWxvYWQgPSB7XG4gIGFjdGlvblR5cGVJZDpcbiAgICB8IHR5cGVvZiBBY3Rpb25UeXBlQ29uc3RzLkdFTkVSQUxfU1RBUlRfQUNUSU9OXG4gICAgfCB0eXBlb2YgQWN0aW9uVHlwZUNvbnN0cy5HRU5FUkFMX0NPTlRJTlVPVVNfQUNUSU9OO1xuICBhY3Rpb25MaXN0SWQ6IEFjdGlvbkxpc3RJZDtcbiAgYWN0aW9uSXRlbUlkOiBBY3Rpb25JZDtcbiAgZXZlbnRJZDogRXZlbnRJZDtcbiAgYWxsb3dFdmVudHM6IGJvb2xlYW47XG4gIGltbWVkaWF0ZTogYm9vbGVhbjtcbiAgdGVzdE1hbnVhbD86IGJvb2xlYW47XG4gIHZlcmJvc2U6IGJvb2xlYW47XG4gIHJhd0RhdGE6IElYMlJhd0RhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgcGxheWJhY2tSZXF1ZXN0ZWQgPSAoe1xuICBhY3Rpb25UeXBlSWQgPSBBY3Rpb25UeXBlQ29uc3RzLkdFTkVSQUxfU1RBUlRfQUNUSU9OLFxuICBhY3Rpb25MaXN0SWQsXG4gIGFjdGlvbkl0ZW1JZCxcbiAgZXZlbnRJZCxcbiAgYWxsb3dFdmVudHMsXG4gIGltbWVkaWF0ZSxcbiAgdGVzdE1hbnVhbCxcbiAgdmVyYm9zZSxcbiAgcmF3RGF0YSxcbn06IHBsYXliYWNrUmVxdWVzdGVkUGF5bG9hZCkgPT4gKHtcbiAgdHlwZTogSVgyX1BMQVlCQUNLX1JFUVVFU1RFRCxcbiAgcGF5bG9hZDoge1xuICAgIGFjdGlvblR5cGVJZCxcbiAgICBhY3Rpb25MaXN0SWQsXG4gICAgYWN0aW9uSXRlbUlkLFxuICAgIHRlc3RNYW51YWwsXG4gICAgZXZlbnRJZCxcbiAgICBhbGxvd0V2ZW50cyxcbiAgICBpbW1lZGlhdGUsXG4gICAgdmVyYm9zZSxcbiAgICByYXdEYXRhLFxuICB9LFxufSk7XG5cbmV4cG9ydCB0eXBlIHN0b3BSZXF1ZXN0ZWRQYXlsb2FkID0ge1xuICBhY3Rpb25MaXN0SWQ6IEFjdGlvbkxpc3RJZDtcbn07XG5cbmV4cG9ydCBjb25zdCBzdG9wUmVxdWVzdGVkID0gKFxuICBhY3Rpb25MaXN0SWQ6IHN0b3BSZXF1ZXN0ZWRQYXlsb2FkWydhY3Rpb25MaXN0SWQnXVxuKSA9PiAoe1xuICB0eXBlOiBJWDJfU1RPUF9SRVFVRVNURUQsXG4gIHBheWxvYWQ6IHtcbiAgICBhY3Rpb25MaXN0SWQsXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUmVxdWVzdGVkID0gKCkgPT4gKHtcbiAgdHlwZTogSVgyX0NMRUFSX1JFUVVFU1RFRCxcbn0pO1xuXG5leHBvcnQgdHlwZSBldmVudExpc3RlbmVyQWRkZWRQYXlsb2FkID0ge1xuICB0YXJnZXQ6IGFueTtcbiAgbGlzdGVuZXJQYXJhbXM6IGFueTtcbn07XG5cbmV4cG9ydCBjb25zdCBldmVudExpc3RlbmVyQWRkZWQgPSAoXG4gIHRhcmdldDogZXZlbnRMaXN0ZW5lckFkZGVkUGF5bG9hZFsndGFyZ2V0J10sXG4gIGxpc3RlbmVyUGFyYW1zOiBldmVudExpc3RlbmVyQWRkZWRQYXlsb2FkWydsaXN0ZW5lclBhcmFtcyddXG4pID0+ICh7XG4gIHR5cGU6IElYMl9FVkVOVF9MSVNURU5FUl9BRERFRCxcbiAgcGF5bG9hZDoge1xuICAgIHRhcmdldCxcbiAgICBsaXN0ZW5lclBhcmFtcyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgdHlwZSB0ZXN0RnJhbWVSZW5kZXJlZFBheWxvYWQgPSB7XG4gIHN0ZXA/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgdGVzdEZyYW1lUmVuZGVyZWQgPSAoXG4gIHN0ZXA6IHRlc3RGcmFtZVJlbmRlcmVkUGF5bG9hZFsnc3RlcCddID0gMVxuKSA9PiAoe1xuICB0eXBlOiBJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCxcbiAgcGF5bG9hZDoge1xuICAgIHN0ZXAsXG4gIH0sXG59KTtcblxuZXhwb3J0IHR5cGUgZXZlbnRTdGF0ZUNoYW5nZWRQYXlsb2FkID0ge1xuICBzdGF0ZUtleTogYW55O1xuICBuZXdTdGF0ZTogYW55O1xufTtcblxuZXhwb3J0IGNvbnN0IGV2ZW50U3RhdGVDaGFuZ2VkID0gKFxuICBzdGF0ZUtleTogZXZlbnRTdGF0ZUNoYW5nZWRQYXlsb2FkWydzdGF0ZUtleSddLFxuICBuZXdTdGF0ZTogZXZlbnRTdGF0ZUNoYW5nZWRQYXlsb2FkWyduZXdTdGF0ZSddXG4pID0+ICh7XG4gIHR5cGU6IElYMl9FVkVOVF9TVEFURV9DSEFOR0VELFxuICBwYXlsb2FkOiB7XG4gICAgc3RhdGVLZXksXG4gICAgbmV3U3RhdGUsXG4gIH0sXG59KTtcblxuZXhwb3J0IHR5cGUgYW5pbWF0aW9uRnJhbWVDaGFuZ2VkUGF5bG9hZCA9IHtcbiAgbm93OiBudW1iZXI7XG4gIHBhcmFtZXRlcnM6IGFueTtcbn07XG5cbmV4cG9ydCBjb25zdCBhbmltYXRpb25GcmFtZUNoYW5nZWQgPSAoXG4gIG5vdzogYW5pbWF0aW9uRnJhbWVDaGFuZ2VkUGF5bG9hZFsnbm93J10sXG4gIHBhcmFtZXRlcnM6IGFuaW1hdGlvbkZyYW1lQ2hhbmdlZFBheWxvYWRbJ3BhcmFtZXRlcnMnXVxuKSA9PiAoe1xuICB0eXBlOiBJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBub3csXG4gICAgcGFyYW1ldGVycyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgcGFyYW1ldGVyQ2hhbmdlZCA9IChcbiAga2V5OiBDb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCxcbiAgdmFsdWU6IG51bWJlclxuKSA9PiAoe1xuICB0eXBlOiBJWDJfUEFSQU1FVEVSX0NIQU5HRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBrZXksXG4gICAgdmFsdWUsXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGluc3RhbmNlQWRkZWQgPSAob3B0aW9uczogYW55KSA9PiAoe1xuICB0eXBlOiBJWDJfSU5TVEFOQ0VfQURERUQsXG4gIHBheWxvYWQ6IHtcbiAgICAuLi5vcHRpb25zLFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBpbnN0YW5jZVN0YXJ0ZWQgPSAoaW5zdGFuY2VJZDogc3RyaW5nLCB0aW1lOiBudW1iZXIpID0+ICh7XG4gIHR5cGU6IElYMl9JTlNUQU5DRV9TVEFSVEVELFxuICBwYXlsb2FkOiB7XG4gICAgaW5zdGFuY2VJZCxcbiAgICB0aW1lLFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBpbnN0YW5jZVJlbW92ZWQgPSAoaW5zdGFuY2VJZDogc3RyaW5nKSA9PiAoe1xuICB0eXBlOiBJWDJfSU5TVEFOQ0VfUkVNT1ZFRCxcbiAgcGF5bG9hZDoge1xuICAgIGluc3RhbmNlSWQsXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGVsZW1lbnRTdGF0ZUNoYW5nZWQgPSAoXG4gIGVsZW1lbnRJZDogYW55LFxuICBhY3Rpb25UeXBlSWQ6IEFjdGlvblR5cGVJZFR5cGUsXG4gIGN1cnJlbnQ6IGFueSxcbiAgYWN0aW9uSXRlbTogYW55XG4pID0+ICh7XG4gIHR5cGU6IElYMl9FTEVNRU5UX1NUQVRFX0NIQU5HRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBlbGVtZW50SWQsXG4gICAgYWN0aW9uVHlwZUlkLFxuICAgIGN1cnJlbnQsXG4gICAgYWN0aW9uSXRlbSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgdHlwZSBhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkUGF5bG9hZCA9IHtcbiAgYWN0aW9uTGlzdElkOiBBY3Rpb25MaXN0SWQ7XG4gIGlzUGxheWluZzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkID0gKHtcbiAgYWN0aW9uTGlzdElkLFxuICBpc1BsYXlpbmcsXG59OiBhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkUGF5bG9hZCkgPT4gKHtcbiAgdHlwZTogSVgyX0FDVElPTl9MSVNUX1BMQVlCQUNLX0NIQU5HRUQsXG4gIHBheWxvYWQ6IHtcbiAgICBhY3Rpb25MaXN0SWQsXG4gICAgaXNQbGF5aW5nLFxuICB9LFxufSk7XG5cbmV4cG9ydCB0eXBlIHZpZXdwb3J0V2lkdGhDaGFuZ2VkUGF5bG9hZCA9IHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgbWVkaWFRdWVyaWVzOiBhbnk7XG59O1xuXG5leHBvcnQgY29uc3Qgdmlld3BvcnRXaWR0aENoYW5nZWQgPSAoe1xuICB3aWR0aCxcbiAgbWVkaWFRdWVyaWVzLFxufTogdmlld3BvcnRXaWR0aENoYW5nZWRQYXlsb2FkKSA9PiAoe1xuICB0eXBlOiBJWDJfVklFV1BPUlRfV0lEVEhfQ0hBTkdFRCxcbiAgcGF5bG9hZDoge1xuICAgIHdpZHRoLFxuICAgIG1lZGlhUXVlcmllcyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgbWVkaWFRdWVyaWVzRGVmaW5lZCA9ICgpID0+ICh7XG4gIHR5cGU6IElYMl9NRURJQV9RVUVSSUVTX0RFRklORUQsXG59KTtcbiJdLCJuYW1lcyI6WyJhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkIiwiYW5pbWF0aW9uRnJhbWVDaGFuZ2VkIiwiY2xlYXJSZXF1ZXN0ZWQiLCJlbGVtZW50U3RhdGVDaGFuZ2VkIiwiZXZlbnRMaXN0ZW5lckFkZGVkIiwiZXZlbnRTdGF0ZUNoYW5nZWQiLCJpbnN0YW5jZUFkZGVkIiwiaW5zdGFuY2VSZW1vdmVkIiwiaW5zdGFuY2VTdGFydGVkIiwibWVkaWFRdWVyaWVzRGVmaW5lZCIsInBhcmFtZXRlckNoYW5nZWQiLCJwbGF5YmFja1JlcXVlc3RlZCIsInByZXZpZXdSZXF1ZXN0ZWQiLCJyYXdEYXRhSW1wb3J0ZWQiLCJzZXNzaW9uSW5pdGlhbGl6ZWQiLCJzZXNzaW9uU3RhcnRlZCIsInNlc3Npb25TdG9wcGVkIiwic3RvcFJlcXVlc3RlZCIsInRlc3RGcmFtZVJlbmRlcmVkIiwidmlld3BvcnRXaWR0aENoYW5nZWQiLCJJWDJfUkFXX0RBVEFfSU1QT1JURUQiLCJJWDJfU0VTU0lPTl9JTklUSUFMSVpFRCIsIklYMl9TRVNTSU9OX1NUQVJURUQiLCJJWDJfU0VTU0lPTl9TVE9QUEVEIiwiSVgyX1BSRVZJRVdfUkVRVUVTVEVEIiwiSVgyX1BMQVlCQUNLX1JFUVVFU1RFRCIsIklYMl9TVE9QX1JFUVVFU1RFRCIsIklYMl9DTEVBUl9SRVFVRVNURUQiLCJJWDJfRVZFTlRfTElTVEVORVJfQURERUQiLCJJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCIsIklYMl9FVkVOVF9TVEFURV9DSEFOR0VEIiwiSVgyX0FOSU1BVElPTl9GUkFNRV9DSEFOR0VEIiwiSVgyX1BBUkFNRVRFUl9DSEFOR0VEIiwiSVgyX0lOU1RBTkNFX0FEREVEIiwiSVgyX0lOU1RBTkNFX1NUQVJURUQiLCJJWDJfSU5TVEFOQ0VfUkVNT1ZFRCIsIklYMl9FTEVNRU5UX1NUQVRFX0NIQU5HRUQiLCJJWDJfQUNUSU9OX0xJU1RfUExBWUJBQ0tfQ0hBTkdFRCIsIklYMl9WSUVXUE9SVF9XSURUSF9DSEFOR0VEIiwiSVgyX01FRElBX1FVRVJJRVNfREVGSU5FRCIsIklYMkVuZ2luZUFjdGlvblR5cGVzIiwicmVpZnlTdGF0ZSIsIklYMlZhbmlsbGFVdGlscyIsInJhd0RhdGEiLCJ0eXBlIiwicGF5bG9hZCIsImhhc0JvdW5kYXJ5Tm9kZXMiLCJyZWR1Y2VkTW90aW9uIiwiZGVmZXIiLCJhY3Rpb25UeXBlSWQiLCJBY3Rpb25UeXBlQ29uc3RzIiwiR0VORVJBTF9TVEFSVF9BQ1RJT04iLCJhY3Rpb25MaXN0SWQiLCJhY3Rpb25JdGVtSWQiLCJldmVudElkIiwiYWxsb3dFdmVudHMiLCJpbW1lZGlhdGUiLCJ0ZXN0TWFudWFsIiwidmVyYm9zZSIsInRhcmdldCIsImxpc3RlbmVyUGFyYW1zIiwic3RlcCIsInN0YXRlS2V5IiwibmV3U3RhdGUiLCJub3ciLCJwYXJhbWV0ZXJzIiwia2V5IiwidmFsdWUiLCJvcHRpb25zIiwiaW5zdGFuY2VJZCIsInRpbWUiLCJlbGVtZW50SWQiLCJjdXJyZW50IiwiYWN0aW9uSXRlbSIsImlzUGxheWluZyIsIndpZHRoIiwibWVkaWFRdWVyaWVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQXFSYUEseUJBQXlCO2VBQXpCQTs7SUFoRUFDLHFCQUFxQjtlQUFyQkE7O0lBdERBQyxjQUFjO2VBQWRBOztJQWtHQUMsbUJBQW1CO2VBQW5CQTs7SUF6RkFDLGtCQUFrQjtlQUFsQkE7O0lBNkJBQyxpQkFBaUI7ZUFBakJBOztJQXNDQUMsYUFBYTtlQUFiQTs7SUFlQUMsZUFBZTtlQUFmQTs7SUFSQUMsZUFBZTtlQUFmQTs7SUE4REFDLG1C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 }), 6011: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; // Array.includes needed for IE11 @packages/systems/ix2/shared-utils/quick-effects Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { actions: function() { return _IX2EngineActions; }, destroy: function() { return destroy; }, init: function() { return init; }, setEnv: function() { return setEnv; }, store: function() { return store; } }); const _redux = __webpack_require__(9516); const _IX2Reducer = /*#__PURE__*/ _interop_require_default(__webpack_require__(7243)); const _IX2VanillaEngine = __webpack_require__(1970); const _IX2EngineActions = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(3946)); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const store = (0, _redux.createStore)(_IX2Reducer.default); function setEnv(env) { if (env()) { (0, _IX2VanillaEngine.observeRequests)(store); } } function init(rawData) { destroy(); (0, _IX2VanillaEngine.startEngine)({ store, rawData, allowEvents: true }); } function destroy() { (0, _IX2VanillaEngine.stopEngine)(store); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBcnJheS5pbmNsdWRlcyBuZWVkZWQgZm9yIElFMTEgQHBhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC11dGlscy9xdWljay1lZmZlY3RzXG5pbXBvcnQgJ2NvcmUtanMvZmVhdHVyZXMvYXJyYXkvaW5jbHVkZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVN0b3JlfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgcmVkdWNlciBmcm9tICcuL3JlZHVjZXJzL0lYMlJlZHVjZXInO1xuaW1wb3J0IHtcbiAgc3RhcnRFbmdpbmUsXG4gIHN0b3BFbmdpbmUsXG4gIG9ic2VydmVSZXF1ZXN0cyxcbn0gZnJvbSAnLi9sb2dpYy9JWDJWYW5pbGxhRW5naW5lJztcbmltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSAnLi9hY3Rpb25zL0lYMkVuZ2luZUFjdGlvbnMnO1xuaW1wb3J0IHtcbiAgdHlwZSBJWDJSYXdEYXRhLFxuICB0eXBlIHJhd0RhdGFJbXBvcnRlZFBheWxvYWQsXG59IGZyb20gJy4vYWN0aW9ucy9JWDJFbmdpbmVBY3Rpb25zJztcblxuY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZShyZWR1Y2VyKTtcblxuZnVuY3Rpb24gc2V0RW52KGVudjogKGFyZzE/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiBib29sZWFuKSB7XG4gIGlmIChlbnYoKSkge1xuICAgIG9ic2VydmVSZXF1ZXN0cyhzdG9yZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdChyYXdEYXRhOiBJWDJSYXdEYXRhKSB7XG4gIGRlc3Ryb3koKTtcblxuICBzdGFydEVuZ2luZSh7c3RvcmUsIHJhd0RhdGEsIGFsbG93RXZlbnRzOiB0cnVlfSk7XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gIHN0b3BFbmdpbmUoc3RvcmUpO1xufVxuXG5leHBvcnQge1xuICBzZXRFbnYsXG4gIGluaXQsXG4gIGRlc3Ryb3ksXG4gIHN0b3JlLFxuICBhY3Rpb25zLFxuICB0eXBlIElYMlJhd0RhdGEsXG4gIHR5cGUgcmF3RGF0YUltcG9ydGVkUGF5bG9hZCxcbn07XG4iXSwibmFtZXMiOlsiYWN0aW9ucyIsImRlc3Ryb3kiLCJpbml0Iiwic2V0RW52Iiwic3RvcmUiLCJjcmVhdGVTdG9yZSIsInJlZHVjZXIiLCJlbnYiLCJvYnNlcnZlUmVxdWVzdHMiLCJyYXdEYXRhIiwic3RhcnRFbmdpbmUiLCJhbGxvd0V2ZW50cyIsInN0b3BFbmdpbmUiXSwibWFwcGluZ3MiOiJBQUFBLGtGQUFrRjs7Ozs7Ozs7Ozs7O0lBdUNoRkEsT0FBTztlQUFQQTs7SUFGQUMsT0FBTztlQUFQQTs7SUFEQUMsSUFBSTtlQUFKQTs7SUFEQUMsTUFBTTtlQUFOQTs7SUFHQUMsS0FBSztlQUFMQTs7O3VCQW5Dd0I7bUVBQ047a0NBS2I7MEVBQ2tCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU16QixNQUFNQSxRQUFRQyxJQUFBQSxrQkFBVyxFQUFDQyxtQkFBTztBQUVqQyxTQUFTSCxPQUFPSSxHQUFrRDtJQUNoRSxJQUFJQSxPQUFPO1FBQ1RDLElBQUFBLGlDQUFlLEVBQUNKO0lBQ2xCO0FBQ0Y7QUFFQSxTQUFTRixLQUFLTyxPQUFtQjtJQUMvQlI7SUFFQVMsSUFBQUEsNkJBQVcsRUFBQztRQUFDTjtRQUFPSztRQUFTRSxhQUFhO0lBQUk7QUFDaEQ7QUFFQSxTQUFTVjtJQUNQVyxJQUFBQSw0QkFBVSxFQUFDUjtBQUNiIn0= }), 5012: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { elementContains: function() { return elementContains; }, getChildElements: function() { return getChildElements; }, getClosestElement: function() { return getClosestElement; }, getProperty: function() { return getProperty; }, getQuerySelector: function() { return getQuerySelector; }, getRefType: function() { return getRefType; }, getSiblingElements: function() { return getSiblingElements; }, getStyle: function() { return getStyle; }, getValidDocument: function() { return getValidDocument; }, isSiblingNode: function() { return isSiblingNode; }, matchSelector: function() { return matchSelector; }, queryDocument: function() { return queryDocument; }, setStyle: function() { return setStyle; } }); const _shared = __webpack_require__(9468); const _sharedconstants = __webpack_require__(7087); const { ELEMENT_MATCHES } = _shared.IX2BrowserSupport; const { IX2_ID_DELIMITER, HTML_ELEMENT, PLAIN_OBJECT, WF_PAGE } = _sharedconstants.IX2EngineConstants; function setStyle(element, prop, value) { // @ts-expect-error - TS7015 - Element implicitly has an 'any' type because index expression is not of type 'number'. element.style[prop] = value; } function getStyle(element, prop) { if (prop.startsWith('--')) { return window.getComputedStyle(document.documentElement).getPropertyValue(prop); } if (element.style instanceof CSSStyleDeclaration) { // @ts-expect-error - TS7015 - Element implicitly has an 'any' type because index expression is not of type 'number'. return element.style[prop]; } } function getProperty(element, prop) { // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'HTMLElement'. return element[prop]; } function matchSelector(selector) { // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'HTMLElement'. return (element)=>element[ELEMENT_MATCHES](selector); } function getQuerySelector({ id, selector }) { if (id) { let nodeId = id; if (id.indexOf(IX2_ID_DELIMITER) !== -1) { const pair = id.split(IX2_ID_DELIMITER); const pageId = pair[0]; // @ts-expect-error - TS2322 - Type 'string | undefined' is not assignable to type 'string'. nodeId = pair[1]; // Short circuit query if we're on the wrong page if (pageId !== document.documentElement.getAttribute(WF_PAGE)) { return null; } } return `[data-w-id="${nodeId}"], [data-w-id^="${nodeId}_instance"]`; } return selector; } function getValidDocument(pageId) { if (pageId == null || pageId === document.documentElement.getAttribute(WF_PAGE)) { return document; } return null; } function queryDocument(baseSelector, descendantSelector) { return Array.prototype.slice.call(document.querySelectorAll(descendantSelector ? baseSelector + ' ' + descendantSelector : baseSelector)); } function elementContains(parent, child) { return parent.contains(child); } function isSiblingNode(a, b) { return a !== b && a.parentNode === b.parentNode; } function getChildElements(// @ts-expect-error - TS2315 - Type 'NodeList' is not generic. sourceElements) { const childElements = []; for(let i = 0, { length } = sourceElements || []; i < length; i++){ const { children } = sourceElements[i]; const { length: childCount } = children; if (!childCount) { continue; } for(let j = 0; j < childCount; j++){ childElements.push(children[j]); } } return childElements; } function getSiblingElements(sourceElements = []) { const elements = []; const parentCache = []; for(let i = 0, { length } = sourceElements; i < length; i++){ // @ts-expect-error - TS2339 - Property 'parentNode' does not exist on type 'undefined'. const { parentNode } = sourceElements[i]; if (!parentNode || !parentNode.children || !parentNode.children.length) { continue; } if (parentCache.indexOf(parentNode) !== -1) { continue; } parentCache.push(parentNode); let el = parentNode.firstElementChild; while(el != null){ if (sourceElements.indexOf(el) === -1) { elements.push(el); } el = el.nextElementSibling; } } return elements; } const getClosestElement = Element.prototype.closest ? (element, selector)=>{ if (!document.documentElement.contains(element)) { return null; } return element.closest(selector); } : (element, selector)=>{ if (!document.documentElement.contains(element)) { return null; } let el = element; do { // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'HTMLElement'. | TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'HTMLElement'. if (el[ELEMENT_MATCHES] && el[ELEMENT_MATCHES](selector)) { return el; } // @ts-expect-error - TS2322 - Type 'ParentNode | null' is not assignable to type 'HTMLElement'. el = el.parentNode; }while (el != null); return null; }; function getRefType(ref) { if (ref != null && typeof ref == 'object') { return ref instanceof Element ? HTML_ELEMENT : PLAIN_OBJECT; } return null; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZS9sb2dpYy9JWDJCcm93c2VyQXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SVgyQnJvd3NlclN1cHBvcnR9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQnO1xuaW1wb3J0IHtJWDJFbmdpbmVDb25zdGFudHN9IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcbmNvbnN0IHtFTEVNRU5UX01BVENIRVN9ID0gSVgyQnJvd3NlclN1cHBvcnQ7XG5jb25zdCB7SVgyX0lEX0RFTElNSVRFUiwgSFRNTF9FTEVNRU5ULCBQTEFJTl9PQkpFQ1QsIFdGX1BBR0V9ID1cbiAgSVgyRW5naW5lQ29uc3RhbnRzO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0U3R5bGUoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3A6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDE1IC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgaW5kZXggZXhwcmVzc2lvbiBpcyBub3Qgb2YgdHlwZSAnbnVtYmVyJy5cbiAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGUoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3A6IHN0cmluZykge1xuICBpZiAocHJvcC5zdGFydHNXaXRoKCctLScpKSB7XG4gICAgcmV0dXJuIHdpbmRvd1xuICAgICAgLmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUocHJvcCk7XG4gIH1cblxuICBpZiAoZWxlbWVudC5zdHlsZSBpbnN0YW5jZW9mIENTU1N0eWxlRGVjbGFyYXRpb24pIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDE1IC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgaW5kZXggZXhwcmVzc2lvbiBpcyBub3Qgb2YgdHlwZSAnbnVtYmVyJy5cbiAgICByZXR1cm4gZWxlbWVudC5zdHlsZVtwcm9wXTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcGVydHkoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3A6IHN0cmluZykge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDUzIC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgZXhwcmVzc2lvbiBvZiB0eXBlICdzdHJpbmcnIGNhbid0IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAnSFRNTEVsZW1lbnQnLlxuICByZXR1cm4gZWxlbWVudFtwcm9wXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoU2VsZWN0b3IoXG4gIHNlbGVjdG9yOiBzdHJpbmdcbik6IChhcmcxOiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbiB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ2FueScgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICdIVE1MRWxlbWVudCcuXG4gIHJldHVybiAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGVsZW1lbnRbRUxFTUVOVF9NQVRDSEVTXShzZWxlY3Rvcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRRdWVyeVNlbGVjdG9yKHtcbiAgaWQsXG4gIHNlbGVjdG9yLFxufToge1xuICBpZDogbnVsbCB8IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgc2VsZWN0b3I6IHN0cmluZztcbn0pIHtcbiAgaWYgKGlkKSB7XG4gICAgbGV0IG5vZGVJZCA9IGlkO1xuICAgIGlmIChpZC5pbmRleE9mKElYMl9JRF9ERUxJTUlURVIpICE9PSAtMSkge1xuICAgICAgY29uc3QgcGFpciA9IGlkLnNwbGl0KElYMl9JRF9ERUxJTUlURVIpO1xuICAgICAgY29uc3QgcGFnZUlkID0gcGFpclswXTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMjIgLSBUeXBlICdzdHJpbmcgfCB1bmRlZmluZWQnIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHR5cGUgJ3N0cmluZycuXG4gICAgICBub2RlSWQgPSBwYWlyWzFdO1xuICAgICAgLy8gU2hvcnQgY2lyY3VpdCBxdWVyeSBpZiB3ZSdyZSBvbiB0aGUgd3JvbmcgcGFnZVxuICAgICAgaWYgKHBhZ2VJZCAhPT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZShXRl9QQUdFKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGBbZGF0YS13LWlkPVwiJHtub2RlSWR9XCJdLCBbZGF0YS13LWlkXj1cIiR7bm9kZUlkfV9pbnN0YW5jZVwiXWA7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWREb2N1bWVudChwYWdlSWQ/OiBudWxsIHwgc3RyaW5nKSB7XG4gIGlmIChcbiAgICBwYWdlSWQgPT0gbnVsbCB8fFxuICAgIHBhZ2VJZCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZShXRl9QQUdFKVxuICApIHtcbiAgICByZXR1cm4gZG9jdW1lbnQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeURvY3VtZW50KFxuICBiYXNlU2VsZWN0b3I6IHN0cmluZyxcbiAgZGVzY2VuZGFudFNlbGVjdG9yPzogbnVsbCB8IHN0cmluZ1xuKTogSFRNTEVsZW1lbnRbXSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgZGVzY2VuZGFudFNlbGVjdG9yXG4gICAgICAgID8gYmFzZVNlbGVjdG9yICsgJyAnICsgZGVzY2VuZGFudFNlbGVjdG9yXG4gICAgICAgIDogYmFzZVNlbGVjdG9yXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudENvbnRhaW5zKFxuICBwYXJlbnQ6IEhUTUxFbGVtZW50LFxuICBjaGlsZDogSFRNTEVsZW1lbnRcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gcGFyZW50LmNvbnRhaW5zKGNoaWxkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2libGluZ05vZGUoYTogSFRNTEVsZW1lbnQsIGI6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiBhICE9PSBiICYmIGEucGFyZW50Tm9kZSA9PT0gYi5wYXJlbnROb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRFbGVtZW50cyhcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMxNSAtIFR5cGUgJ05vZGVMaXN0JyBpcyBub3QgZ2VuZXJpYy5cbiAgc291cmNlRWxlbWVudHM6IEFycmF5PEhUTUxFbGVtZW50PiB8IE5vZGVMaXN0PEhUTUxFbGVtZW50PlxuKSB7XG4gIGNvbnN0IGNoaWxkRWxlbWVudHM6IEFycmF5PEhUTUxFbGVtZW50IHwgYW55PiA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwLCB7bGVuZ3RofSA9IHNvdXJjZUVsZW1lbnRzIHx8IFtdOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7Y2hpbGRyZW59ID0gc291cmNlRWxlbWVudHNbaV07XG4gICAgY29uc3Qge2xlbmd0aDogY2hpbGRDb3VudH0gPSBjaGlsZHJlbjtcbiAgICBpZiAoIWNoaWxkQ291bnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNoaWxkQ291bnQ7IGorKykge1xuICAgICAgY2hpbGRFbGVtZW50cy5wdXNoKGNoaWxkcmVuW2pdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoaWxkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaWJsaW5nRWxlbWVudHMoXG4gIHNvdXJjZUVsZW1lbnRzOiBIVE1MRWxlbWVudFtdID0gW11cbik6IEhUTUxFbGVtZW50W10ge1xuICBjb25zdCBlbGVtZW50czogQXJyYXk8YW55PiA9IFtdO1xuICBjb25zdCBwYXJlbnRDYWNoZTogQXJyYXk8YW55PiA9IFtdO1xuICBmb3IgKGxldCBpID0gMCwge2xlbmd0aH0gPSBzb3VyY2VFbGVtZW50czsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMzOSAtIFByb3BlcnR5ICdwYXJlbnROb2RlJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICd1bmRlZmluZWQnLlxuICAgIGNvbnN0IHtwYXJlbnROb2RlfSA9IHNvdXJjZUVsZW1lbnRzW2ldO1xuICAgIGlmICghcGFyZW50Tm9kZSB8fCAhcGFyZW50Tm9kZS5jaGlsZHJlbiB8fCAhcGFyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocGFyZW50Q2FjaGUuaW5kZXhPZihwYXJlbnROb2RlKSAhPT0gLTEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBwYXJlbnRDYWNoZS5wdXNoKHBhcmVudE5vZGUpO1xuICAgIGxldCBlbCA9IHBhcmVudE5vZGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgd2hpbGUgKGVsICE9IG51bGwpIHtcbiAgICAgIGlmIChzb3VyY2VFbGVtZW50cy5pbmRleE9mKGVsKSA9PT0gLTEpIHtcbiAgICAgICAgZWxlbWVudHMucHVzaChlbCk7XG4gICAgICB9XG4gICAgICBlbCA9IGVsLm5leHRFbGVtZW50U2libGluZztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNzc0IC0gVGhpcyBjb25kaXRpb24gd2lsbCBhbHdheXMgcmV0dXJuIHRydWUgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgZGVmaW5lZC4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgaXQgaW5zdGVhZD9cbmV4cG9ydCBjb25zdCBnZXRDbG9zZXN0RWxlbWVudCA9IEVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3RcbiAgPyAoZWxlbWVudDogSFRNTEVsZW1lbnQsIHNlbGVjdG9yOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSBhcyBIVE1MRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgfVxuICA6IChlbGVtZW50OiBIVE1MRWxlbWVudCwgc2VsZWN0b3I6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGxldCBlbCA9IGVsZW1lbnQ7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnYW55JyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ0hUTUxFbGVtZW50Jy4gfCBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ2FueScgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICdIVE1MRWxlbWVudCcuXG4gICAgICAgIGlmIChlbFtFTEVNRU5UX01BVENIRVNdICYmIGVsW0VMRU1FTlRfTUFUQ0hFU10oc2VsZWN0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgICB9XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMjIgLSBUeXBlICdQYXJlbnROb2RlIHwgbnVsbCcgaXMgbm90IGFzc2lnbmFibGUgdG8gdHlwZSAnSFRNTEVsZW1lbnQnLlxuICAgICAgICBlbCA9IGVsLnBhcmVudE5vZGU7XG4gICAgICB9IHdoaWxlIChlbCAhPSBudWxsKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWZUeXBlKHJlZjogYW55KSB7XG4gIGlmIChyZWYgIT0gbnVsbCAmJiB0eXBlb2YgcmVmID09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHJlZiBpbnN0YW5jZW9mIEVsZW1lbnQgPyBIVE1MX0VMRU1FTlQgOiBQTEFJTl9PQkpFQ1Q7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibmFtZXMiOlsiZWxlbWVudENvbnRhaW5zIiwiZ2V0Q2hpbGRFbGVtZW50cyIsImdldENsb3Nlc3RFbGVtZW50IiwiZ2V0UHJvcGVydHkiLCJnZXRRdWVyeVNlbGVjdG9yIiwiZ2V0UmVmVHlwZSIsImdldFNpYmxpbmdFbGVtZW50cyIsImdldFN0eWxlIiwiZ2V0VmFsaWREb2N1bWVudCIsImlzU2libGluZ05vZGUiLCJtYXRjaFNlbGVjdG9yIiwicXVlcnlEb2N1bWVudCIsInNldFN0eWxlIiwiRUxFTUVOVF9NQVRDSEVTIiwiSVgyQnJvd3NlclN1cHBvcnQiLCJJWDJfSURfREVMSU1JVEVSIiwiSFRNTF9FTEVNRU5UIiwiUExBSU5fT0JKRUNUIiwiV0ZfUEFHRSIsIklYMkVuZ2luZUNvbnN0YW50cyIsImVsZW1lbnQiLCJwcm9wIiwidmFsdWUiLCJzdHlsZSIsInN0YXJ0c1dpdGgiLCJ3aW5kb3ciLCJnZXRDb21wdXRlZFN0eWxlIiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiQ1NTU3R5bGVEZWNsYXJhdGlvbiIsInNlbGVjdG9yIiwiaWQiLCJub2RlSWQiLCJpbmRleE9mIiwicGFpciIsInNwbGl0IiwicGFnZUlkIiwiZ2V0QXR0cmlidXRlIiwiYmFzZVNlbGVjdG9yIiwiZGVzY2VuZGFudFNlbGVjdG9yIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJxdWVyeVNlbGVjdG9yQWxsIiwicGFyZW50IiwiY2hpbGQiLCJjb250YWlucyIsImEiLCJiIiwicGFyZW50Tm9kZSIsInNvdXJjZUVsZW1lbnRzIiwiY2hpbGRFbGVtZW50cyIsImkiLCJsZW5ndGgiLCJjaGlsZHJlbiIsImNoaWxkQ291bnQiLCJqIiwicHVzaCIsImVsZW1lbnRzIiwicGFyZW50Q2FjaGUiLCJlbCIsImZpcnN0RWxlbWVudENoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiRWxlbWVudCIsImNsb3Nlc3QiLCJyZWYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBbUZnQkEsZUFBZTtlQUFmQTs7SUFXQUMsZ0JBQWdCO2VBQWhCQTs7SUE4Q0hDLGlCQUFpQjtlQUFqQkE7O0lBcEhHQyxXQUFXO2VBQVhBOztJQVlBQyxnQkFBZ0I7ZUFBaEJBOztJQWtJQUMsVUFBVTtlQUFWQTs7SUFyREFDLGtCQUFrQjtlQUFsQkE7O0lBdEdBQyxRQUFRO2VBQVJBOztJQWlEQUMsZ0JBQWdCO2VBQWhCQTs7SUE4QkFDLGFBQWE7ZUFBYkE7O0lBN0RBQyxhQUFhO2VBQWJBOztJQXlDQUMsYUFBYTtlQUFiQTs7SUFoRUFDLFFBQVE7ZUFBUkE7Ozt3QkFOZ0I7aUNBQ0M7QUFDakMsTUFBTSxFQUFDQyxlQUFlLEVBQUMsR0FBR0MseUJBQWlCO0FBQzNDLE1BQU0sRUFBQ0MsZ0JBQWdCLEVBQUVDLFlBQVksRUFBRUMsWUFBWSxFQUFFQyxPQUFPLEVBQUMsR0FDM0RDLG1DQUFrQjtBQUViLFNBQVNQLFNBQVNRLE9BQW9CLEVBQUVDLElBQVksRUFBRUMsS0FBYTtJQUN4RSxxSEFBcUg7SUFDckhGLFFBQVFHLEtBQUssQ0FBQ0YsS0FBSyxHQUFHQztBQUN4QjtB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 }), 1970: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { observeRequests: function() { return observeRequests; }, startActionGroup: function() { return startActionGroup; }, startEngine: function() { return startEngine; }, stopActionGroup: function() { return stopActionGroup; }, stopAllActionGroups: function() { return stopAllActionGroups; }, stopEngine: function() { return stopEngine; } }); const _find = /*#__PURE__*/ _interop_require_default(__webpack_require__(9777)); const _get = /*#__PURE__*/ _interop_require_default(__webpack_require__(4738)); const _size = /*#__PURE__*/ _interop_require_default(__webpack_require__(4659)); const _omitBy = /*#__PURE__*/ _interop_require_default(__webpack_require__(3452)); const _isEmpty = /*#__PURE__*/ _interop_require_default(__webpack_require__(6633)); const _mapValues = /*#__PURE__*/ _interop_require_default(__webpack_require__(3729)); const _forEach = /*#__PURE__*/ _interop_require_default(__webpack_require__(2397)); const _throttle = /*#__PURE__*/ _interop_require_default(__webpack_require__(5082)); const _sharedconstants = __webpack_require__(7087); const _shared = __webpack_require__(9468); const _IX2EngineActions = __webpack_require__(3946); const _IX2BrowserApi = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(5012)); const _IX2VanillaEvents = /*#__PURE__*/ _interop_require_default(__webpack_require__(8955)); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const QuickEffectsIdList = Object.keys(_sharedconstants.QuickEffectIds); const isQuickEffect = (actionTypeId)=>QuickEffectsIdList.includes(actionTypeId); const { COLON_DELIMITER, BOUNDARY_SELECTOR, HTML_ELEMENT, RENDER_GENERAL, W_MOD_IX } = _sharedconstants.IX2EngineConstants; const { getAffectedElements, getElementId, getDestinationValues, observeStore, getInstanceId, renderHTMLElement, clearAllStyles, getMaxDurationItemIndex, getComputedStyle, getInstanceOrigin, reduceListToGroup, shouldNamespaceEventParameter, getNamespacedParameterId, shouldAllowMediaQuery, cleanupHTMLElement, clearObjectCache, stringifyTarget, mediaQueriesEqual, shallowEqual } = _shared.IX2VanillaUtils; const { isPluginType, createPluginInstance, getPluginDuration } = _shared.IX2VanillaPlugins; const ua = navigator.userAgent; const IS_MOBILE_SAFARI = ua.match(/iPad/i) || ua.match(/iPhone/); // Keep throttled events at ~80fps to reduce reflows while maintaining render accuracy const THROTTLED_EVENT_WAIT = 12; function observeRequests(store) { observeStore({ store, select: ({ ixRequest })=>ixRequest.preview, onChange: handlePreviewRequest }); observeStore({ store, select: ({ ixRequest })=>ixRequest.playback, onChange: handlePlaybackRequest }); observeStore({ store, select: ({ ixRequest })=>ixRequest.stop, onChange: handleStopRequest }); observeStore({ store, select: ({ ixRequest })=>ixRequest.clear, onChange: handleClearRequest }); } function observeMediaQueryChange(store) { observeStore({ store, select: ({ ixSession })=>ixSession.mediaQueryKey, onChange: ()=>{ stopEngine(store); clearAllStyles({ store, elementApi: _IX2BrowserApi }); startEngine({ store, allowEvents: true }); dispatchPageUpdateEvent(); } }); } function observeOneRenderTick(store, onTick) { const unsubscribe = observeStore({ store, select: ({ ixSession })=>ixSession.tick, // @ts-expect-error - TS7006 - Parameter 'tick' implicitly has an 'any' type. onChange: (tick)=>{ onTick(tick); unsubscribe(); } }); } function handlePreviewRequest({ rawData, defer }, store) { const start = ()=>{ startEngine({ store, rawData, allowEvents: true }); dispatchPageUpdateEvent(); }; defer ? setTimeout(start, 0) : start(); } function dispatchPageUpdateEvent() { document.dispatchEvent(new CustomEvent('IX2_PAGE_UPDATE')); } function handlePlaybackRequest(playback, store) { const { actionTypeId, actionListId, actionItemId, eventId, allowEvents, immediate, testManual, verbose = true } = playback; let { rawData } = playback; if (actionListId && actionItemId && rawData && immediate) { const actionList = rawData.actionLists[actionListId]; if (actionList) { rawData = reduceListToGroup({ actionList, actionItemId, rawData }); } } startEngine({ store, rawData, allowEvents, testManual }); if (actionListId && actionTypeId === _sharedconstants.ActionTypeConsts.GENERAL_START_ACTION || isQuickEffect(actionTypeId)) { // @ts-expect-error - TS2345 - Argument of type '{ store: any; actionListId: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; }'. stopActionGroup({ store, actionListId }); renderInitialGroup({ store, actionListId, eventId }); // @ts-expect-error - TS2345 - Argument of type '{ store: any; eventId: any; actionListId: any; immediate: any; verbose: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; groupIndex?: number | undefined; immediate: any; verbose: any; }'. const started = startActionGroup({ store, eventId, actionListId, immediate, verbose }); if (verbose && started) { store.dispatch((0, _IX2EngineActions.actionListPlaybackChanged)({ actionListId, isPlaying: !immediate })); } } } function handleStopRequest({ actionListId }, store) { if (actionListId) { // @ts-expect-error - TS2345 - Argument of type '{ store: any; actionListId: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; }'. stopActionGroup({ store, actionListId }); } else { stopAllActionGroups({ store }); } stopEngine(store); } function handleClearRequest(state, store) { stopEngine(store); clearAllStyles({ store, elementApi: _IX2BrowserApi }); } function startEngine({ store, rawData, allowEvents, testManual }) { const { ixSession } = store.getState(); if (rawData) { store.dispatch((0, _IX2EngineActions.rawDataImported)(rawData)); } if (!ixSession.active) { store.dispatch((0, _IX2EngineActions.sessionInitialized)({ hasBoundaryNodes: Boolean(document.querySelector(BOUNDARY_SELECTOR)), reducedMotion: document.body.hasAttribute('data-wf-ix-vacation') && window.matchMedia('(prefers-reduced-motion)').matches })); if (allowEvents) { bindEvents(store); addDocumentClass(); if (store.getState().ixSession.hasDefinedMediaQueries) { observeMediaQueryChange(store); } } store.dispatch((0, _IX2EngineActions.sessionStarted)()); startRenderLoop(store, testManual); } } function addDocumentClass() { const { documentElement } = document; if (documentElement.className.indexOf(W_MOD_IX) === -1) { documentElement.className += ` ${W_MOD_IX}`; } } function startRenderLoop(store, testManual) { const handleFrame = (now)=>{ const { ixSession, ixParameters } = store.getState(); if (ixSession.active) { store.dispatch((0, _IX2EngineActions.animationFrameChanged)(now, ixParameters)); if (testManual) { observeOneRenderTick(store, handleFrame); } else { requestAnimationFrame(handleFrame); } } }; handleFrame(window.performance.now()); } function stopEngine(store) { const { ixSession } = store.getState(); if (ixSession.active) { const { eventListeners } = ixSession; eventListeners.forEach(clearEventListener); clearObjectCache(); store.dispatch((0, _IX2EngineActions.sessionStopped)()); } } // @ts-expect-error - TS7031 - Binding element 'target' implicitly has an 'any' type. | TS7031 - Binding element 'listenerParams' implicitly has an 'any' type. function clearEventListener({ target, listenerParams }) { // eslint-disable-next-line prefer-spread target.removeEventListener.apply(target, listenerParams); } function createGroupInstances({ // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type. store, // @ts-expect-error - TS7031 - Binding element 'eventStateKey' implicitly has an 'any' type. eventStateKey, // @ts-expect-error - TS7031 - Binding element 'eventTarget' implicitly has an 'any' type. eventTarget, // @ts-expect-error - TS7031 - Binding element 'eventId' implicitly has an 'any' type. eventId, // @ts-expect-error - TS7031 - Binding element 'eventConfig' implicitly has an 'any' type. eventConfig, // @ts-expect-error - TS7031 - Binding element 'actionListId' implicitly has an 'any' type. actionListId, // @ts-expect-error - TS7031 - Binding element 'parameterGroup' implicitly has an 'any' type. parameterGroup, // @ts-expect-error - TS7031 - Binding element 'smoothing' implicitly has an 'any' type. smoothing, // @ts-expect-error - TS7031 - Binding element 'restingValue' implicitly has an 'any' type. restingValue }) { const { ixData, ixSession } = store.getState(); const { events } = ixData; const event = events[eventId]; const { eventTypeId } = event; const targetCache = {}; const instanceActionGroups = {}; const instanceConfigs = []; const { continuousActionGroups } = parameterGroup; let { id: parameterId } = parameterGroup; if (shouldNamespaceEventParameter(eventTypeId, eventConfig)) { parameterId = getNamespacedParameterId(eventStateKey, parameterId); } // Limit affected elements when event target is within a boundary node const eventElementRoot = ixSession.hasBoundaryNodes && eventTarget ? _IX2BrowserApi.getClosestElement(eventTarget, BOUNDARY_SELECTOR) : null; // @ts-expect-error - TS7006 - Parameter 'actionGroup' implicitly has an 'any' type. continuousActionGroups.forEach((actionGroup)=>{ const { keyframe, actionItems } = actionGroup; // @ts-expect-error - TS7006 - Parameter 'actionItem' implicitly has an 'any' type. actionItems.forEach((actionItem)=>{ const { actionTypeId } = actionItem; const { target } = actionItem.config; if (!target) { return; } const elementRoot = target.boundaryMode ? eventElementRoot : null; const key = stringifyTarget(target) + COLON_DELIMITER + actionTypeId; instanceActionGroups[key] = appendActionItem(instanceActionGroups[key], keyframe, actionItem); if (!targetCache[key]) { targetCache[key] = true; const { config } = actionItem; getAffectedElements({ config, event, eventTarget, elementRoot, elementApi: _IX2BrowserApi }).forEach((element)=>{ instanceConfigs.push({ element, key }); }); } }); }); instanceConfigs.forEach(({ element, key })=>{ const actionGroups = instanceActionGroups[key]; const actionItem = (0, _get.default)(actionGroups, `[0].actionItems[0]`, {}); const { actionTypeId } = actionItem; const shouldUsePlugin = // If it's targeted by class, don't query the element by pluginElementId actionTypeId === _sharedconstants.ActionTypeConsts.PLUGIN_RIVE ? (actionItem.config?.target?.selectorGuids || []).length === 0 : isPluginType(actionTypeId); const pluginInstance = shouldUsePlugin ? createPluginInstance(actionTypeId)?.(element, actionItem) : null; const destination = getDestinationValues({ element, actionItem, elementApi: _IX2BrowserApi }, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error pluginInstance); createInstance({ store, element, eventId, actionListId, actionItem, destination, continuous: true, parameterId, actionGroups, smoothing, restingValue, pluginInstance }); }); } function appendActionItem(actionGroups = [], keyframe, actionItem) { const newActionGroups = [ ...actionGroups ]; let groupIndex; newActionGroups.some((group, index)=>{ // @ts-expect-error - TS2339 - Property 'keyframe' does not exist on type 'never'. if (group.keyframe === keyframe) { groupIndex = index; return true; } return false; }); if (groupIndex == null) { groupIndex = newActionGroups.length; // @ts-expect-error - TS2345 - Argument of type '{ keyframe: any; actionItems: never[]; }' is not assignable to parameter of type 'never'. newActionGroups.push({ keyframe, actionItems: [] }); } // @ts-expect-error - TS2339 - Property 'actionItems' does not exist on type 'never'. newActionGroups[groupIndex].actionItems.push(actionItem); return newActionGroups; } function bindEvents(store) { const { ixData } = store.getState(); const { eventTypeMap } = ixData; updateViewportWidth(store); (0, _forEach.default)(eventTypeMap, (events, key)=>{ // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ SLIDER_ACTIVE: { handler: (options: any, state: any) => any; types: string; }; SLIDER_INACTIVE: { handler: (options: any, state: any) => any; types: string; }; DROPDOWN_OPEN: { handler: (options: any, state: any) => any; types: string; }; ... 21 more ...; PAGE_START: { ...; }; }'. const logic = _IX2VanillaEvents.default[key]; if (!logic) { console.warn(`IX2 event type not configured: ${key}`); return; } bindEventType({ // @ts-expect-error - TS7031 - Binding element 'logic' implicitly has an 'any' type. logic, store, events }); }); const { ixSession } = store.getState(); if (ixSession.eventListeners.length) { bindResizeEvents(store); } } const WINDOW_RESIZE_EVENTS = [ 'resize', 'orientationchange' ]; function bindResizeEvents(store) { const handleResize = ()=>{ updateViewportWidth(store); }; WINDOW_RESIZE_EVENTS.forEach((type)=>{ window.addEventListener(type, handleResize); store.dispatch((0, _IX2EngineActions.eventListenerAdded)(window, [ type, handleResize ])); }); handleResize(); } function updateViewportWidth(store) { const { ixSession, ixData } = store.getState(); const width = window.innerWidth; if (width !== ixSession.viewportWidth) { const { mediaQueries } = ixData; store.dispatch((0, _IX2EngineActions.viewportWidthChanged)({ width, mediaQueries })); } } const mapFoundValues = (object, iteratee)=>(0, _omitBy.default)((0, _mapValues.default)(object, iteratee), _isEmpty.default); const forEachEventTarget = (eventTargets, eventCallback)=>{ (0, _forEach.default)(eventTargets, (elements, eventId)=>{ // @ts-expect-error - TS7006 - Parameter 'element' implicitly has an 'any' type. | TS7006 - Parameter 'index' implicitly has an 'any' type. elements.forEach((element, index)=>{ const eventStateKey = eventId + COLON_DELIMITER + index; eventCallback(element, eventId, eventStateKey); }); }); }; const getAffectedForEvent = (event)=>{ const config = { target: event.target, targets: event.targets }; return getAffectedElements({ config, elementApi: _IX2BrowserApi }); }; // @ts-expect-error - TS7031 - Binding element 'logic' implicitly has an 'any' type. | TS7031 - Binding element 'store' implicitly has an 'any' type. | TS7031 - Binding element 'events' implicitly has an 'any' type. function bindEventType({ logic, store, events }) { injectBehaviorCSSFixes(events); const { types: eventTypes, handler: eventHandler } = logic; const { ixData } = store.getState(); const { actionLists } = ixData; const eventTargets = mapFoundValues(events, getAffectedForEvent); if (!(0, _size.default)(eventTargets)) { return; } (0, _forEach.default)(eventTargets, (elements, key)=>{ const event = events[key]; const { action: eventAction, id: eventId, mediaQueries = ixData.mediaQueryKeys } = event; const { actionListId } = eventAction.config; if (!mediaQueriesEqual(mediaQueries, ixData.mediaQueryKeys)) { store.dispatch((0, _IX2EngineActions.mediaQueriesDefined)()); } if (eventAction.actionTypeId === _sharedconstants.ActionTypeConsts.GENERAL_CONTINUOUS_ACTION) { const configs = Array.isArray(event.config) ? event.config : [ event.config ]; // @ts-expect-error - TS7006 - Parameter 'eventConfig' implicitly has an 'any' type. configs.forEach((eventConfig)=>{ const { continuousParameterGroupId } = eventConfig; const paramGroups = (0, _get.default)(actionLists, `${actionListId}.continuousParameterGroups`, []); const parameterGroup = (0, _find.default)(paramGroups, ({ id })=>id === continuousParameterGroupId); const smoothing = (eventConfig.smoothing || 0) / 100; const restingValue = (eventConfig.restingState || 0) / 100; if (!parameterGroup) { return; } elements.forEach((eventTarget, index)=>{ const eventStateKey = eventId + COLON_DELIMITER + index; createGroupInstances({ store, eventStateKey, eventTarget, eventId, eventConfig, actionListId, parameterGroup, smoothing, restingValue }); }); }); } if (eventAction.actionTypeId === _sharedconstants.ActionTypeConsts.GENERAL_START_ACTION || isQuickEffect(eventAction.actionTypeId)) { renderInitialGroup({ store, actionListId, eventId }); } }); const handleEvent = (nativeEvent)=>{ const { ixSession } = store.getState(); forEachEventTarget(eventTargets, (element, eventId, eventStateKey)=>{ const event = events[eventId]; const oldState = ixSession.eventState[eventStateKey]; const { action: eventAction, mediaQueries = ixData.mediaQueryKeys } = event; // Bypass event handler if current media query is not listed in event config if (!shouldAllowMediaQuery(mediaQueries, ixSession.mediaQueryKey)) { return; } const handleEventWithConfig = (eventConfig = {})=>{ const newState = eventHandler({ store, element, event, eventConfig, nativeEvent, eventStateKey }, oldState); if (!shallowEqual(newState, oldState)) { store.dispatch((0, _IX2EngineActions.eventStateChanged)(eventStateKey, newState)); } }; if (eventAction.actionTypeId === _sharedconstants.ActionTypeConsts.GENERAL_CONTINUOUS_ACTION) { const configs = Array.isArray(event.config) ? event.config : [ event.config ]; configs.forEach(handleEventWithConfig); } else { handleEventWithConfig(); } }); }; const handleEventThrottled = (0, _throttle.default)(handleEvent, THROTTLED_EVENT_WAIT); const addListeners = ({ target = document, // @ts-expect-error - TS7031 - Binding element 'types' implicitly has an 'any' type. types, // @ts-expect-error - TS7031 - Binding element 'shouldThrottle' implicitly has an 'any' type. throttle: shouldThrottle })=>{ types.split(' ').filter(Boolean)// @ts-expect-error - TS7006 - Parameter 'type' implicitly has an 'any' type. .forEach((type)=>{ const handlerFunc = shouldThrottle ? handleEventThrottled : handleEvent; target.addEventListener(type, handlerFunc); store.dispatch((0, _IX2EngineActions.eventListenerAdded)(target, [ type, handlerFunc ])); }); }; if (Array.isArray(eventTypes)) { eventTypes.forEach(addListeners); } else if (typeof eventTypes === 'string') { addListeners(logic); } } /** * Injects CSS into the document to fix behavior issues across * different devices. */ function injectBehaviorCSSFixes(events) { if (!IS_MOBILE_SAFARI) { return; } const injectedSelectors = {}; let cssText = ''; for(const eventId in events){ const { eventTypeId, target } = events[eventId]; const selector = _IX2BrowserApi.getQuerySelector(target); // @ts-expect-error - TS2538 - Type 'null' cannot be used as an index type. if (injectedSelectors[selector]) { continue; } // add a "cursor: pointer" style rule to ensure that CLICK events get fired for IOS devices if (eventTypeId === _sharedconstants.EventTypeConsts.MOUSE_CLICK || eventTypeId === _sharedconstants.EventTypeConsts.MOUSE_SECOND_CLICK) { // @ts-expect-error - TS2538 - Type 'null' cannot be used as an index type. injectedSelectors[selector] = true; cssText += selector + '{' + 'cursor: pointer;' + 'touch-action: manipulation;' + '}'; } } if (cssText) { const style = document.createElement('style'); style.textContent = cssText; document.body.appendChild(style); } } function renderInitialGroup({ store, actionListId, eventId }) { const { ixData, ixSession } = store.getState(); const { actionLists, events } = ixData; // @ts-expect-error - TS18048 - 'events' is possibly 'undefined'. const event = events[eventId]; // @ts-expect-error - TS18048 - 'actionLists' is possibly 'undefined'. const actionList = actionLists[actionListId]; // @ts-expect-error - Property 'useFirstGroupAsInitialState' does not exist on type 'ActionListType'. if (actionList && actionList.useFirstGroupAsInitialState) { const initialStateItems = (0, _get.default)(actionList, 'actionItemGroups[0].actionItems', []); // Bypass initial state render if current media query is not listed in event config const mediaQueries = (0, _get.default)(event, 'mediaQueries', ixData.mediaQueryKeys); if (!shouldAllowMediaQuery(mediaQueries, ixSession.mediaQueryKey)) { return; } initialStateItems.forEach((actionItem)=>{ const { config: itemConfig, actionTypeId } = actionItem; const config = // When useEventTarget is explicitly true, use event target/targets to query elements // However, skip this condition when objectId is defined // @ts-expect-error - Property 'target' does not exist on type 'never'. itemConfig?.target?.useEventTarget === true && // @ts-expect-error - Property 'target' does not exist on type 'never'. itemConfig?.target?.objectId == null ? { target: event.target, targets: event.targets } : itemConfig; const itemElements = getAffectedElements({ config, event, elementApi: _IX2BrowserApi }); const shouldUsePlugin = isPluginType(actionTypeId); itemElements.forEach((element)=>{ const pluginInstance = shouldUsePlugin ? createPluginInstance(actionTypeId)?.(element, actionItem) : null; createInstance({ destination: getDestinationValues({ element, actionItem, elementApi: _IX2BrowserApi }, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error pluginInstance), immediate: true, store, element, eventId, actionItem, actionListId, pluginInstance }); }); }); } } function stopAllActionGroups({ store }) { const { ixInstances } = store.getState(); (0, _forEach.default)(ixInstances, (instance)=>{ if (!instance.continuous) { const { actionListId, verbose } = instance; removeInstance(instance, store); if (verbose) { store.dispatch((0, _IX2EngineActions.actionListPlaybackChanged)({ actionListId, isPlaying: false })); } } }); } function stopActionGroup({ // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type. store, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error eventId, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error eventTarget, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error eventStateKey, // @ts-expect-error - TS7031 - Binding element 'actionListId' implicitly has an 'any' type. actionListId }) { const { ixInstances, ixSession } = store.getState(); // Check for element boundary before stopping engine instances const eventElementRoot = ixSession.hasBoundaryNodes && eventTarget ? _IX2BrowserApi.getClosestElement(eventTarget, BOUNDARY_SELECTOR) : null; (0, _forEach.default)(ixInstances, (instance)=>{ const boundaryMode = (0, _get.default)(instance, 'actionItem.config.target.boundaryMode'); // Validate event key if eventStateKey was provided, otherwise default to true const validEventKey = eventStateKey ? instance.eventStateKey === eventStateKey : true; // Remove engine instances that match the required ids if (instance.actionListId === actionListId && instance.eventId === eventId && validEventKey) { // Avoid removal when root boundary does not contain instance element if (eventElementRoot && boundaryMode && !_IX2BrowserApi.elementContains(eventElementRoot, instance.element)) { return; } removeInstance(instance, store); if (instance.verbose) { store.dispatch((0, _IX2EngineActions.actionListPlaybackChanged)({ actionListId, isPlaying: false })); } } }); } function startActionGroup({ // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type. store, // @ts-expect-error - TS7031 - Binding element 'eventId' implicitly has an 'any' type. eventId, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error eventTarget, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error eventStateKey, // @ts-expect-error - TS7031 - Binding element 'actionListId' implicitly has an 'any' type. actionListId, groupIndex = 0, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error immediate, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error verbose }) { const { ixData, ixSession } = store.getState(); const { events } = ixData; const event = events[eventId] || {}; const { mediaQueries = ixData.mediaQueryKeys } = event; const actionList = (0, _get.default)(ixData, `actionLists.${actionListId}`, {}); const { actionItemGroups, useFirstGroupAsInitialState } = actionList; // Abort playback if no action groups if (!actionItemGroups || !actionItemGroups.length) { return false; } // Reset to first group when event loop is configured if (groupIndex >= actionItemGroups.length && (0, _get.default)(event, 'config.loop')) { groupIndex = 0; } // Skip initial state group during action list playback, as it should already be applied if (groupIndex === 0 && useFirstGroupAsInitialState) { groupIndex++; } // Identify first animated group and apply the initial QuickEffect delay const isFirstGroup = groupIndex === 0 || groupIndex === 1 && useFirstGroupAsInitialState; const instanceDelay = isFirstGroup && isQuickEffect(event.action?.actionTypeId) ? event.config.delay : undefined; // Abort playback if no action items exist at group index const actionItems = (0, _get.default)(actionItemGroups, [ groupIndex, 'actionItems' ], []); if (!actionItems.length) { return false; } // Abort playback if current media query is not listed in event config if (!shouldAllowMediaQuery(mediaQueries, ixSession.mediaQueryKey)) { return false; } // Limit affected elements when event target is within a boundary node const eventElementRoot = ixSession.hasBoundaryNodes && eventTarget ? _IX2BrowserApi.getClosestElement(eventTarget, BOUNDARY_SELECTOR) : null; const carrierIndex = getMaxDurationItemIndex(actionItems); let groupStartResult = false; // @ts-expect-error - TS7006 - Parameter 'actionItem' implicitly has an 'any' type. | TS7006 - Parameter 'actionIndex' implicitly has an 'any' type. actionItems.forEach((actionItem, actionIndex)=>{ const { config, actionTypeId } = actionItem; const shouldUsePlugin = isPluginType(actionTypeId); const { target } = config; if (!target) { return; } const elementRoot = target.boundaryMode ? eventElementRoot : null; const elements = getAffectedElements({ config, event, eventTarget, elementRoot, elementApi: _IX2BrowserApi }); elements.forEach((element, elementIndex)=>{ const pluginInstance = shouldUsePlugin ? createPluginInstance(actionTypeId)?.(element, actionItem) : null; const pluginDuration = shouldUsePlugin ? getPluginDuration(actionTypeId)(element, actionItem) : null; groupStartResult = true; const isCarrier = carrierIndex === actionIndex && elementIndex === 0; const computedStyle = getComputedStyle({ element, actionItem }); const destination = getDestinationValues({ element, actionItem, elementApi: _IX2BrowserApi }, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error pluginInstance); createInstance({ store, element, actionItem, eventId, eventTarget, eventStateKey, actionListId, groupIndex, isCarrier, computedStyle, destination, immediate, verbose, pluginInstance, pluginDuration, instanceDelay }); }); }); return groupStartResult; } // @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type. function createInstance(options) { const { store, computedStyle, ...rest } = options; const { element, actionItem, immediate, pluginInstance, continuous, restingValue, eventId } = rest; const autoStart = !continuous; const instanceId = getInstanceId(); const { ixElements, ixSession, ixData } = store.getState(); const elementId = getElementId(ixElements, element); const { refState } = ixElements[elementId] || {}; const refType = _IX2BrowserApi.getRefType(element); const skipMotion = // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ readonly TRANSFORM_MOVE: true; readonly TRANSFORM_SCALE: true; readonly TRANSFORM_ROTATE: true; readonly TRANSFORM_SKEW: true; readonly STYLE_SIZE: true; readonly STYLE_FILTER: true; readonly STYLE_FONT_VARIATION: true; }'. ixSession.reducedMotion && _sharedconstants.ReducedMotionTypes[actionItem.actionTypeId]; let skipToValue; if (skipMotion && continuous) { switch(ixData.events[eventId]?.eventTypeId){ case _sharedconstants.EventTypeConsts.MOUSE_MOVE: case _sharedconstants.EventTypeConsts.MOUSE_MOVE_IN_VIEWPORT: skipToValue = restingValue; break; default: skipToValue = 0.5; break; } } const origin = getInstanceOrigin(element, refState, computedStyle, actionItem, _IX2BrowserApi, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error pluginInstance); store.dispatch((0, _IX2EngineActions.instanceAdded)({ instanceId, elementId, origin, refType, skipMotion, skipToValue, ...rest })); dispatchCustomEvent(document.body, 'ix2-animation-started', instanceId); if (immediate) { renderImmediateInstance(store, instanceId); return; } observeStore({ store, // @ts-expect-error - TS7031 - Binding element 'ixInstances' implicitly has an 'any' type. select: ({ ixInstances })=>ixInstances[instanceId], onChange: handleInstanceChange }); if (autoStart) { store.dispatch((0, _IX2EngineActions.instanceStarted)(instanceId, ixSession.tick)); } } function removeInstance(instance, store) { dispatchCustomEvent(document.body, 'ix2-animation-stopping', { instanceId: instance.id, state: store.getState() }); const { elementId, actionItem } = instance; const { ixElements } = store.getState(); const { ref, refType } = ixElements[elementId] || {}; if (refType === HTML_ELEMENT) { cleanupHTMLElement(ref, actionItem, _IX2BrowserApi); } store.dispatch((0, _IX2EngineActions.instanceRemoved)(instance.id)); } function dispatchCustomEvent(element, eventName, detail) { const event = document.createEvent('CustomEvent'); event.initCustomEvent(eventName, true, true, detail); // @ts-expect-error - TS18047 - 'element' is possibly 'null'. element.dispatchEvent(event); } function renderImmediateInstance(store, instanceId) { const { ixParameters } = store.getState(); store.dispatch((0, _IX2EngineActions.instanceStarted)(instanceId, 0)); store.dispatch((0, _IX2EngineActions.animationFrameChanged)(performance.now(), ixParameters)); const { ixInstances } = store.getState(); handleInstanceChange(ixInstances[instanceId], store); } function handleInstanceChange(instance, store) { const { active, continuous, complete, elementId, actionItem, actionTypeId, renderType, current, groupIndex, eventId, eventTarget, eventStateKey, actionListId, isCarrier, styleProp, verbose, pluginInstance } = instance; // Bypass render if current media query is not listed in event config const { ixData, ixSession } = store.getState(); const { events } = ixData; const event = events && events[eventId] ? events[eventId] : {}; // @ts-expect-error - TS2339 - Property 'mediaQueries' does not exist on type '{} | undefined'. const { mediaQueries = ixData.mediaQueryKeys } = event; if (!shouldAllowMediaQuery(mediaQueries, ixSession.mediaQueryKey)) { return; } if (continuous || active || complete) { if (current || renderType === RENDER_GENERAL && complete) { // Render current values to ref state and grab latest store.dispatch((0, _IX2EngineActions.elementStateChanged)(elementId, actionTypeId, current, actionItem)); const { ixElements } = store.getState(); const { ref, refType, refState } = ixElements[elementId] || {}; const actionState = refState && refState[actionTypeId]; // Render HTML and plugin elements if (refType === HTML_ELEMENT || isPluginType(actionTypeId)) { renderHTMLElement(// @ts-expect-error - ref can be undefined ref, refState, actionState, eventId, actionItem, styleProp, _IX2BrowserApi, renderType, pluginInstance); } } if (complete) { if (isCarrier) { // @ts-expect-error - TS2345 - Argument of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; groupIndex: any; verbose: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; groupIndex?: number | undefined; immediate: any; verbose: any; }'. const started = startActionGroup({ store, eventId, eventTarget, eventStateKey, actionListId, groupIndex: groupIndex + 1, verbose }); if (verbose && !started) { store.dispatch((0, _IX2EngineActions.actionListPlaybackChanged)({ actionListId, isPlaying: false })); } } removeInstance(instance, store); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZS9sb2dpYy9JWDJWYW5pbGxhRW5naW5lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmaW5kIGZyb20gJ2xvZGFzaC9maW5kJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgc2l6ZSBmcm9tICdsb2Rhc2gvc2l6ZSc7XG5pbXBvcnQgb21pdEJ5IGZyb20gJ2xvZGFzaC9vbWl0QnknO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHknO1xuaW1wb3J0IG1hcFZhbHVlcyBmcm9tICdsb2Rhc2gvbWFwVmFsdWVzJztcbmltcG9ydCBmb3JFYWNoIGZyb20gJ2xvZGFzaC9mb3JFYWNoJztcbmltcG9ydCB0aHJvdHRsZSBmcm9tICdsb2Rhc2gvdGhyb3R0bGUnO1xuaW1wb3J0IHtcbiAgRXZlbnRUeXBlQ29uc3RzLFxuICBBY3Rpb25UeXBlQ29uc3RzLFxuICBJWDJFbmdpbmVDb25zdGFudHMsXG4gIFF1aWNrRWZmZWN0SWRzLFxuICBSZWR1Y2VkTW90aW9uVHlwZXMsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcblxuY29uc3QgUXVpY2tFZmZlY3RzSWRMaXN0ID0gT2JqZWN0LmtleXMoUXVpY2tFZmZlY3RJZHMpO1xuXG5jb25zdCBpc1F1aWNrRWZmZWN0ID0gKGFjdGlvblR5cGVJZDogc3RyaW5nKSA9PlxuICBRdWlja0VmZmVjdHNJZExpc3QuaW5jbHVkZXMoYWN0aW9uVHlwZUlkKTtcblxuaW1wb3J0IHtJWDJWYW5pbGxhVXRpbHMsIElYMlZhbmlsbGFQbHVnaW5zfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkJztcblxuY29uc3Qge1xuICBDT0xPTl9ERUxJTUlURVIsXG4gIEJPVU5EQVJZX1NFTEVDVE9SLFxuICBIVE1MX0VMRU1FTlQsXG4gIFJFTkRFUl9HRU5FUkFMLFxuICBXX01PRF9JWCxcbn0gPSBJWDJFbmdpbmVDb25zdGFudHM7XG5cbmNvbnN0IHtcbiAgZ2V0QWZmZWN0ZWRFbGVtZW50cyxcbiAgZ2V0RWxlbWVudElkLFxuICBnZXREZXN0aW5hdGlvblZhbHVlcyxcbiAgb2JzZXJ2ZVN0b3JlLFxuICBnZXRJbnN0YW5jZUlkLFxuICByZW5kZXJIVE1MRWxlbWVudCxcbiAgY2xlYXJBbGxTdHlsZXMsXG4gIGdldE1heER1cmF0aW9uSXRlbUluZGV4LFxuICBnZXRDb21wdXRlZFN0eWxlLFxuICBnZXRJbnN0YW5jZU9yaWdpbixcbiAgcmVkdWNlTGlzdFRvR3JvdXAsXG4gIHNob3VsZE5hbWVzcGFjZUV2ZW50UGFyYW1ldGVyLFxuICBnZXROYW1lc3BhY2VkUGFyYW1ldGVySWQsXG4gIHNob3VsZEFsbG93TWVkaWFRdWVyeSxcbiAgY2xlYW51cEhUTUxFbGVtZW50LFxuICBjbGVhck9iamVjdENhY2hlLFxuICBzdHJpbmdpZnlUYXJnZXQsXG4gIG1lZGlhUXVlcmllc0VxdWFsLFxuICBzaGFsbG93RXF1YWwsXG59ID0gSVgyVmFuaWxsYVV0aWxzO1xuY29uc3Qge2lzUGx1Z2luVHlwZSwgY3JlYXRlUGx1Z2luSW5zdGFuY2UsIGdldFBsdWdpbkR1cmF0aW9ufSA9XG4gIElYMlZhbmlsbGFQbHVnaW5zO1xuXG5pbXBvcnQge1xuICByYXdEYXRhSW1wb3J0ZWQsXG4gIHNlc3Npb25Jbml0aWFsaXplZCxcbiAgc2Vzc2lvblN0YXJ0ZWQsXG4gIHNlc3Npb25TdG9wcGVkLFxuICBldmVudExpc3RlbmVyQWRkZWQsXG4gIGV2ZW50U3RhdGVDaGFuZ2VkLFxuICBhbmltYXRpb25GcmFtZUNoYW5nZWQsXG4gIGluc3RhbmNlQWRkZWQsXG4gIGluc3RhbmNlU3RhcnRlZCxcbiAgaW5zdGFuY2VSZW1vdmVkLFxuICBlbGVtZW50U3RhdGVDaGFuZ2VkLFxuICBhY3Rpb25MaXN0UGxheWJhY2tDaGFuZ2VkLFxuICB2aWV3cG9ydFdpZHRoQ2hhbmdlZCxcbiAgbWVkaWFRdWVyaWVzRGVmaW5lZCxcbiAgSVgyUmF3RGF0YSxcbn0gZnJvbSAnLi4vYWN0aW9ucy9JWDJFbmdpbmVBY3Rpb25zJztcblxuaW1wb3J0ICogYXMgZWxlbWVudEFwaSBmcm9tICcuL0lYMkJyb3dzZXJBcGknO1xuXG5pbXBvcnQgSVgyVmFuaWxsYUV2ZW50cyBmcm9tICcuL0lYMlZhbmlsbGFFdmVudHMnO1xuaW1wb3J0IHtcbiAgSVgyRW5naW5lUmVkdWNlclN0YXRlU2hhcGUsXG4gIElYMkVuZ2luZVJlZHVjZXJTdG9yZSxcbn0gZnJvbSAnLi4vcmVkdWNlcnMvSVgyUmVkdWNlcic7XG5pbXBvcnQge0FjdGlvbkxpc3RJZH0gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL3R5cGVzLWNvcmUnO1xuXG5jb25zdCB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG5jb25zdCBJU19NT0JJTEVfU0FGQVJJID0gdWEubWF0Y2goL2lQYWQvaSkgfHwgdWEubWF0Y2goL2lQaG9uZS8pO1xuXG4vLyBLZWVwIHRocm90dGxlZCBldmVudHMgYXQgfjgwZnBzIHRvIHJlZHVjZSByZWZsb3dzIHdoaWxlIG1haW50YWluaW5nIHJlbmRlciBhY2N1cmFjeVxuY29uc3QgVEhST1RUTEVEX0VWRU5UX1dBSVQgPSAxMjtcblxuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVSZXF1ZXN0cyhzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlKSB7XG4gIG9ic2VydmVTdG9yZSh7XG4gICAgc3RvcmUsXG4gICAgc2VsZWN0OiAoe1xuICAgICAgaXhSZXF1ZXN0LFxuICAgIH06IHtcbiAgICAgIGl4UmVxdWVzdDogSVgyRW5naW5lUmVkdWNlclN0YXRlU2hhcGVbJ2l4UmVxdWVzdCddO1xuICAgIH0pID0+IGl4UmVxdWVzdC5wcmV2aWV3LFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVQcmV2aWV3UmVxdWVzdCxcbiAgfSk7XG4gIG9ic2VydmVTdG9yZSh7XG4gICAgc3RvcmUsXG4gICAgc2VsZWN0OiAoe1xuICAgICAgaXhSZXF1ZXN0LFxuICAgIH06IHtcbiAgICAgIGl4UmVxdWVzdDogSVgyRW5naW5lUmVkdWNlclN0YXRlU2hhcGVbJ2l4UmVxdWVzdCddO1xuICAgIH0pID0+IGl4UmVxdWVzdC5wbGF5YmFjayxcbiAgICBvbkNoYW5nZTogaGFuZGxlUGxheWJhY2tSZXF1ZXN0LFxuICB9KTtcbiAgb2JzZXJ2ZVN0b3JlKHtcbiAgICBzdG9yZSxcbiAgICBzZWxlY3Q6ICh7XG4gICAgICBpeFJlcXVlc3QsXG4gICAgfToge1xuICAgICAgaXhSZXF1ZXN0OiBJWDJFbmdpbmVSZWR1Y2VyU3RhdGVTaGFwZVsnaXhSZXF1ZXN0J107XG4gICAgfSkgPT4gaXhSZXF1ZXN0LnN0b3AsXG4gICAgb25DaGFuZ2U6IGhhbmRsZVN0b3BSZXF1ZXN0LFxuICB9KTtcbiAgb2JzZXJ2ZVN0b3JlKHtcbiAgICBzdG9yZSxcbiAgICBzZWxlY3Q6ICh7XG4gICAgICBpeFJlcXVlc3QsXG4gICAgfToge1xuICAgICAgaXhSZXF1ZXN0OiBJWDJFbmdpbmVSZWR1Y2VyU3RhdGVTaGFwZVsnaXhSZXF1ZXN0J107XG4gICAgfSkgPT4gaXhSZXF1ZXN0LmNsZWFyLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVDbGVhclJlcXVlc3QsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvYnNlcnZlTWVkaWFRdWVyeUNoYW5nZShzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlKSB7XG4gIG9ic2VydmVTdG9yZSh7XG4gICAgc3RvcmUsXG4gICAgc2VsZWN0OiAoe1xuICAgICAgaXhTZXNzaW9uLFxuICAgIH06IHtcbiAgICAgIGl4U2Vzc2lvbjogSVgyRW5naW5lUmVkdWNlclN0YXRlU2hhcGVbJ2l4U2Vzc2lvbiddO1xuICAgIH0pID0+IGl4U2Vzc2lvbi5tZWRpYVF1ZXJ5S2V5LFxuICAgIG9uQ2hhbmdlOiAoKSA9PiB7XG4gICAgICBzdG9wRW5naW5lKHN0b3JlKTtcbiAgICAgIGNsZWFyQWxsU3R5bGVzKHtzdG9yZSwgZWxlbWVudEFwaX0pO1xuICAgICAgc3RhcnRFbmdpbmUoe3N0b3JlLCBhbGxvd0V2ZW50czogdHJ1ZX0pO1xuICAgICAgZGlzcGF0Y2hQYWdlVXBkYXRlRXZlbnQoKTtcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gb2JzZXJ2ZU9uZVJlbmRlclRpY2soXG4gIHN0b3JlOiBJWDJFbmdpbmVSZWR1Y2VyU3RvcmUsXG4gIG9uVGljazogKG5vdzogYW55IHwgbnVtYmVyKSA9PiB2b2lkXG4pIHtcbiAgY29uc3QgdW5zdWJzY3JpYmUgPSBvYnNlcnZlU3RvcmUoe1xuICAgIHN0b3JlLFxuICAgIHNlbGVjdDogKHtcbiAgICAgIGl4U2Vzc2lvbixcbiAgICB9OiB7XG4gICAgICBpeFNlc3Npb246IElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlWydpeFNlc3Npb24nXTtcbiAgICB9KSA9PiBpeFNlc3Npb24udGljayxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICd0aWNrJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgIG9uQ2hhbmdlOiAodGljaykgPT4ge1xuICAgICAgb25UaWNrKHRpY2spO1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlUHJldmlld1JlcXVlc3QoXG4gIHtyYXdEYXRhLCBkZWZlcn06IHtyYXdEYXRhOiBJWDJSYXdEYXRhOyBkZWZlcjogYm9vbGVhbn0sXG4gIHN0b3JlOiBJWDJFbmdpbmVSZWR1Y2VyU3RvcmVcbikge1xuICBjb25zdCBzdGFydCA9ICgpID0+IHtcbiAgICBzdGFydEVuZ2luZSh7c3RvcmUsIHJhd0RhdGEsIGFsbG93RXZlbnRzOiB0cnVlfSk7XG4gICAgZGlzcGF0Y2hQYWdlVXBkYXRlRXZlbnQoKTtcbiAgfTtcbiAgZGVmZXIgPyBzZXRUaW1lb3V0KHN0YXJ0LCAwKSA6IHN0YXJ0KCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoUGFnZVVwZGF0ZUV2ZW50KCkge1xuICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnSVgyX1BBR0VfVVBEQVRFJykpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVQbGF5YmFja1JlcXVlc3QocGxheWJhY2s6IGFueSwgc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBjb25zdCB7XG4gICAgYWN0aW9uVHlwZUlkLFxuICAgIGFjdGlvbkxpc3RJZCxcbiAgICBhY3Rpb25JdGVtSWQsXG4gICAgZXZlbnRJZCxcbiAgICBhbGxvd0V2ZW50cyxcbiAgICBpbW1lZGlhdGUsXG4gICAgdGVzdE1hbnVhbCxcbiAgICB2ZXJib3NlID0gdHJ1ZSxcbiAgfSA9IHBsYXliYWNrO1xuICBsZXQge3Jhd0RhdGF9ID0gcGxheWJhY2s7XG5cbiAgaWYgKGFjdGlvbkxpc3RJZCAmJiBhY3Rpb25JdGVtSWQgJiYgcmF3RGF0YSAmJiBpbW1lZGlhdGUpIHtcbiAgICBjb25zdCBhY3Rpb25MaXN0ID0gcmF3RGF0YS5hY3Rpb25MaXN0c1thY3Rpb25MaXN0SWRdO1xuXG4gICAgaWYgKGFjdGlvbkxpc3QpIHtcbiAgICAgIHJhd0RhdGEgPSByZWR1Y2VMaXN0VG9Hcm91cCh7XG4gICAgICAgIGFjdGlvbkxpc3QsXG4gICAgICAgIGFjdGlvbkl0ZW1JZCxcbiAgICAgICAgcmF3RGF0YSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0RW5naW5lKHtzdG9yZSwgcmF3RGF0YSwgYWxsb3dFdmVudHMsIHRlc3RNYW51YWx9KTtcblxuICBpZiAoXG4gICAgKGFjdGlvbkxpc3RJZCAmJiBhY3Rpb25UeXBlSWQgPT09IEFjdGlvblR5cGVDb25zdHMuR0VORVJBTF9TVEFSVF9BQ1RJT04pIHx8XG4gICAgaXNRdWlja0VmZmVjdChhY3Rpb25UeXBlSWQpXG4gICkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICd7IHN0b3JlOiBhbnk7IGFjdGlvbkxpc3RJZDogYW55OyB9JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAneyBzdG9yZTogYW55OyBldmVudElkOiBhbnk7IGV2ZW50VGFyZ2V0OiBhbnk7IGV2ZW50U3RhdGVLZXk6IGFueTsgYWN0aW9uTGlzdElkOiBhbnk7IH0nLlxuICAgIHN0b3BBY3Rpb25Hcm91cCh7c3RvcmUsIGFjdGlvbkxpc3RJZH0pO1xuICAgIHJlbmRlckluaXRpYWxHcm91cCh7c3RvcmUsIGFjdGlvbkxpc3RJZCwgZXZlbnRJZH0pO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICd7IHN0b3JlOiBhbnk7IGV2ZW50SWQ6IGFueTsgYWN0aW9uTGlzdElkOiBhbnk7IGltbWVkaWF0ZTogYW55OyB2ZXJib3NlOiBhbnk7IH0nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICd7IHN0b3JlOiBhbnk7IGV2ZW50SWQ6IGFueTsgZXZlbnRUYXJnZXQ6IGFueTsgZXZlbnRTdGF0ZUtleTogYW55OyBhY3Rpb25MaXN0SWQ6IGFueTsgZ3JvdXBJbmRleD86IG51bWJlciB8IHVuZGVmaW5lZDsgaW1tZWRpYXRlOiBhbnk7IHZlcmJvc2U6IGFueTsgfScuXG4gICAgY29uc3Qgc3RhcnRlZCA9IHN0YXJ0QWN0aW9uR3JvdXAoe1xuICAgICAgc3RvcmUsXG4gICAgICBldmVudElkLFxuICAgICAgYWN0aW9uTGlzdElkLFxuICAgICAgaW1tZWRpYXRlLFxuICAgICAgdmVyYm9zZSxcbiAgICB9KTtcbiAgICBpZiAodmVyYm9zZSAmJiBzdGFydGVkKSB7XG4gICAgICBzdG9yZS5kaXNwYXRjaChcbiAgICAgICAgYWN0aW9uTGlzdFBsYXliYWNrQ2hhbmdlZCh7YWN0aW9uTGlzdElkLCBpc1BsYXlpbmc6ICFpbW1lZGlhdGV9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlU3RvcFJlcXVlc3QoXG4gIHthY3Rpb25MaXN0SWR9OiB7YWN0aW9uTGlzdElkOiBBY3Rpb25MaXN0SWR9LFxuICBzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlXG4pIHtcbiAgaWYgKGFjdGlvbkxpc3RJZCkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICd7IHN0b3JlOiBhbnk7IGFjdGlvbkxpc3RJZDogYW55OyB9JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAneyBzdG9yZTogYW55OyBldmVudElkOiBhbnk7IGV2ZW50VGFyZ2V0OiBhbnk7IGV2ZW50U3RhdGVLZXk6IGFueTsgYWN0aW9uTGlzdElkOiBhbnk7IH0nLlxuICAgIHN0b3BBY3Rpb25Hcm91cCh7c3RvcmUsIGFjdGlvbkxpc3RJZH0pO1xuICB9IGVsc2Uge1xuICAgIHN0b3BBbGxBY3Rpb25Hcm91cHMoe3N0b3JlfSk7XG4gIH1cbiAgc3RvcEVuZ2luZShzdG9yZSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNsZWFyUmVxdWVzdChzdGF0ZTogYW55LCBzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlKSB7XG4gIHN0b3BFbmdpbmUoc3RvcmUpO1xuICBjbGVhckFsbFN0eWxlcyh7c3RvcmUsIGVsZW1lbnRBcGl9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0RW5naW5lKHtcbiAgc3RvcmUsXG4gIHJhd0RhdGEsXG4gIGFsbG93RXZlbnRzLFxuICB0ZXN0TWFudWFsLFxufToge1xuICBzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlO1xuICByYXdEYXRhPzogSVgyUmF3RGF0YTtcbiAgdGVzdE1hbnVhbD86IGJvb2xlYW47XG4gIGFsbG93RXZlbnRzPzogYm9vbGVhbjtcbn0pIHtcbiAgY29uc3Qge2l4U2Vzc2lvbn0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBpZiAocmF3RGF0YSkge1xuICAgIHN0b3JlLmRpc3BhdGNoKHJhd0RhdGFJbXBvcnRlZChyYXdEYXRhKSk7XG4gIH1cbiAgaWYgKCFpeFNlc3Npb24uYWN0aXZlKSB7XG4gICAgc3RvcmUuZGlzcGF0Y2goXG4gICAgICBzZXNzaW9uSW5pdGlhbGl6ZWQoe1xuICAgICAgICBoYXNCb3VuZGFyeU5vZGVzOiBCb29sZWFuKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoQk9VTkRBUllfU0VMRUNUT1IpKSxcbiAgICAgICAgcmVkdWNlZE1vdGlvbjpcbiAgICAgICAgICBkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgnZGF0YS13Zi1peC12YWNhdGlvbicpICYmXG4gICAgICAgICAgd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uKScpLm1hdGNoZXMsXG4gICAgICB9KVxuICAgICk7XG4gICAgaWYgKGFsbG93RXZlbnRzKSB7XG4gICAgICBiaW5kRXZlbnRzKHN0b3JlKTtcbiAgICAgIGFkZERvY3VtZW50Q2xhc3MoKTtcblxuICAgICAgaWYgKHN0b3JlLmdldFN0YXRlKCkuaXhTZXNzaW9uLmhhc0RlZmluZWRNZWRpYVF1ZXJpZXMpIHtcbiAgICAgICAgb2JzZXJ2ZU1lZGlhUXVlcnlDaGFuZ2Uoc3RvcmUpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdG9yZS5kaXNwYXRjaChzZXNzaW9uU3RhcnRlZCgpKTtcbiAgICBzdGFydFJlbmRlckxvb3Aoc3RvcmUsIHRlc3RNYW51YWwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZERvY3VtZW50Q2xhc3MoKSB7XG4gIGNvbnN0IHtkb2N1bWVudEVsZW1lbnR9ID0gZG9jdW1lbnQ7XG4gIGlmIChkb2N1bWVudEVsZW1lbnQuY2xhc3NOYW1lLmluZGV4T2YoV19NT0RfSVgpID09PSAtMSkge1xuICAgIGRvY3VtZW50RWxlbWVudC5jbGFzc05hbWUgKz0gYCAke1dfTU9EX0lYfWA7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RhcnRSZW5kZXJMb29wKHN0b3JlOiBJWDJFbmdpbmVSZWR1Y2VyU3RvcmUsIHRlc3RNYW51YWw/OiBib29sZWFuKSB7XG4gIGNvbnN0IGhhbmRsZUZyYW1lID0gKG5vdzogbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qge2l4U2Vzc2lvbiwgaXhQYXJhbWV0ZXJzfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgaWYgKGl4U2Vzc2lvbi5hY3RpdmUpIHtcbiAgICAgIHN0b3JlLmRpc3BhdGNoKGFuaW1hdGlvbkZyYW1lQ2hhbmdlZChub3csIGl4UGFyYW1ldGVycykpO1xuICAgICAgaWYgKHRlc3RNYW51YWwpIHtcbiAgICAgICAgb2JzZXJ2ZU9uZVJlbmRlclRpY2soc3RvcmUsIGhhbmRsZUZyYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShoYW5kbGVGcmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBoYW5kbGVGcmFtZSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcEVuZ2luZShzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlKSB7XG4gIGNvbnN0IHtpeFNlc3Npb259ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgaWYgKGl4U2Vzc2lvbi5hY3RpdmUpIHtcbiAgICBjb25zdCB7ZXZlbnRMaXN0ZW5lcnN9ID0gaXhTZXNzaW9uO1xuICAgIGV2ZW50TGlzdGVuZXJzLmZvckVhY2goY2xlYXJFdmVudExpc3RlbmVyKTtcbiAgICBjbGVhck9iamVjdENhY2hlKCk7XG4gICAgc3RvcmUuZGlzcGF0Y2goc2Vzc2lvblN0b3BwZWQoKSk7XG4gIH1cbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAndGFyZ2V0JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnbGlzdGVuZXJQYXJhbXMnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5mdW5jdGlvbiBjbGVhckV2ZW50TGlzdGVuZXIoe3RhcmdldCwgbGlzdGVuZXJQYXJhbXN9KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItc3ByZWFkXG4gIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyLmFwcGx5KHRhcmdldCwgbGlzdGVuZXJQYXJhbXMpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVHcm91cEluc3RhbmNlcyh7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ3N0b3JlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICBzdG9yZSxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnRTdGF0ZUtleScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgZXZlbnRTdGF0ZUtleSxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnRUYXJnZXQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGV2ZW50VGFyZ2V0LFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdldmVudElkJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICBldmVudElkLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdldmVudENvbmZpZycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgZXZlbnRDb25maWcsXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2FjdGlvbkxpc3RJZCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgYWN0aW9uTGlzdElkLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdwYXJhbWV0ZXJHcm91cCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgcGFyYW1ldGVyR3JvdXAsXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ3Ntb290aGluZycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgc21vb3RoaW5nLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdyZXN0aW5nVmFsdWUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIHJlc3RpbmdWYWx1ZSxcbn0pIHtcbiAgY29uc3Qge2l4RGF0YSwgaXhTZXNzaW9ufSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IHtldmVudHN9ID0gaXhEYXRhO1xuICBjb25zdCBldmVudCA9IGV2ZW50c1tldmVudElkXTtcbiAgY29uc3Qge2V2ZW50VHlwZUlkfSA9IGV2ZW50O1xuICBjb25zdCB0YXJnZXRDYWNoZTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBjb25zdCBpbnN0YW5jZUFjdGlvbkdyb3VwczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBjb25zdCBpbnN0YW5jZUNvbmZpZ3M6IEFycmF5PFxuICAgIHwgYW55XG4gICAgfCB7XG4gICAgICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgYW55O1xuICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgIH1cbiAgPiA9IFtdO1xuXG4gIGNvbnN0IHtjb250aW51b3VzQWN0aW9uR3JvdXBzfSA9IHBhcmFtZXRlckdyb3VwO1xuICBsZXQge2lkOiBwYXJhbWV0ZXJJZH0gPSBwYXJhbWV0ZXJHcm91cDtcbiAgaWYgKHNob3VsZE5hbWVzcGFjZUV2ZW50UGFyYW1ldGVyKGV2ZW50VHlwZUlkLCBldmVudENvbmZpZykpIHtcbiAgICBwYXJhbWV0ZXJJZCA9IGdldE5hbWVzcGFjZWRQYXJhbWV0ZXJJZChldmVudFN0YXRlS2V5LCBwYXJhbWV0ZXJJZCk7XG4gIH1cblxuICAvLyBMaW1pdCBhZmZlY3RlZCBlbGVtZW50cyB3aGVuIGV2ZW50IHRhcmdldCBpcyB3aXRoaW4gYSBib3VuZGFyeSBub2RlXG4gIGNvbnN0IGV2ZW50RWxlbWVudFJvb3QgPVxuICAgIGl4U2Vzc2lvbi5oYXNCb3VuZGFyeU5vZGVzICYmIGV2ZW50VGFyZ2V0XG4gICAgICA/IGVsZW1lbnRBcGkuZ2V0Q2xvc2VzdEVsZW1lbnQoZXZlbnRUYXJnZXQsIEJPVU5EQVJZX1NFTEVDVE9SKVxuICAgICAgOiBudWxsO1xuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2FjdGlvbkdyb3VwJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICBjb250aW51b3VzQWN0aW9uR3JvdXBzLmZvckVhY2goKGFjdGlvbkdyb3VwKSA9PiB7XG4gICAgY29uc3Qge2tleWZyYW1lLCBhY3Rpb25JdGVtc30gPSBhY3Rpb25Hcm91cDtcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2FjdGlvbkl0ZW0nIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgYWN0aW9uSXRlbXMuZm9yRWFjaCgoYWN0aW9uSXRlbSkgPT4ge1xuICAgICAgY29uc3Qge2FjdGlvblR5cGVJZH0gPSBhY3Rpb25JdGVtO1xuICAgICAgY29uc3Qge3RhcmdldH0gPSBhY3Rpb25JdGVtLmNvbmZpZztcbiAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsZW1lbnRSb290ID0gdGFyZ2V0LmJvdW5kYXJ5TW9kZSA/IGV2ZW50RWxlbWVudFJvb3QgOiBudWxsO1xuXG4gICAgICBjb25zdCBrZXkgPSBzdHJpbmdpZnlUYXJnZXQodGFyZ2V0KSArIENPTE9OX0RFTElNSVRFUiArIGFjdGlvblR5cGVJZDtcbiAgICAgIGluc3RhbmNlQWN0aW9uR3JvdXBzW2tleV0gPSBhcHBlbmRBY3Rpb25JdGVtKFxuICAgICAgICBpbnN0YW5jZUFjdGlvbkdyb3Vwc1trZXldLFxuICAgICAgICBrZXlmcmFtZSxcbiAgICAgICAgYWN0aW9uSXRlbVxuICAgICAgKTtcblxuICAgICAgaWYgKCF0YXJnZXRDYWNoZVtrZXldKSB7XG4gICAgICAgIHRhcmdldENhY2hlW2tleV0gPSB0cnVlO1xuICAgICAgICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbkl0ZW07XG4gICAgICAgIGdldEFmZmVjdGVkRWxlbWVudHMoe1xuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBldmVudFRhcmdldCxcbiAgICAgICAgICBlbGVtZW50Um9vdCxcbiAgICAgICAgICBlbGVtZW50QXBpLFxuICAgICAgICB9KS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgaW5zdGFuY2VDb25maWdzLnB1c2goe2VsZW1lbnQsIGtleX0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgaW5zdGFuY2VDb25maWdzLmZvckVhY2goKHtlbGVtZW50LCBrZXl9KSA9PiB7XG4gICAgY29uc3QgYWN0aW9uR3JvdXBzID0gaW5zdGFuY2VBY3Rpb25Hcm91cHNba2V5XTtcbiAgICBjb25zdCBhY3Rpb25JdGVtID0gZ2V0KGFjdGlvbkdyb3VwcywgYFswXS5hY3Rpb25JdGVtc1swXWAsIHt9KTtcbiAgICBjb25zdCB7YWN0aW9uVHlwZUlkfSA9IGFjdGlvbkl0ZW07XG4gICAgY29uc3Qgc2hvdWxkVXNlUGx1Z2luID1cbiAgICAgIC8vIElmIGl0J3MgdGFyZ2V0ZWQgYnkgY2xhc3MsIGRvbid0IHF1ZXJ5IHRoZSBlbGVtZW50IGJ5IHBsdWdpbkVsZW1lbnRJZFxuICAgICAgYWN0aW9uVHlwZUlkID09PSBBY3Rpb25UeXBlQ29uc3RzLlBMVUdJTl9SSVZFXG4gICAgICAgID8gKGFjdGlvbkl0ZW0uY29uZmlnPy50YXJnZXQ/LnNlbGVjdG9yR3VpZHMgfHwgW10pLmxlbmd0aCA9PT0gMFxuICAgICAgICA6IGlzUGx1Z2luVHlwZShhY3Rpb25UeXBlSWQpO1xuXG4gICAgY29uc3QgcGx1Z2luSW5zdGFuY2UgPSBzaG91bGRVc2VQbHVnaW5cbiAgICAgID8gY3JlYXRlUGx1Z2luSW5zdGFuY2UoYWN0aW9uVHlwZUlkKT8uKGVsZW1lbnQsIGFjdGlvbkl0ZW0pXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgZGVzdGluYXRpb24gPSBnZXREZXN0aW5hdGlvblZhbHVlcyhcbiAgICAgIHtlbGVtZW50LCBhY3Rpb25JdGVtLCBlbGVtZW50QXBpfSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHBsdWdpbkluc3RhbmNlXG4gICAgKTtcbiAgICBjcmVhdGVJbnN0YW5jZSh7XG4gICAgICBzdG9yZSxcbiAgICAgIGVsZW1lbnQsXG4gICAgICBldmVudElkLFxuICAgICAgYWN0aW9uTGlzdElkLFxuICAgICAgYWN0aW9uSXRlbSxcbiAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgY29udGludW91czogdHJ1ZSxcbiAgICAgIHBhcmFtZXRlcklkLFxuICAgICAgYWN0aW9uR3JvdXBzLFxuICAgICAgc21vb3RoaW5nLFxuICAgICAgcmVzdGluZ1ZhbHVlLFxuICAgICAgcGx1Z2luSW5zdGFuY2UsXG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhcHBlbmRBY3Rpb25JdGVtKGFjdGlvbkdyb3VwcyA9IFtdLCBrZXlmcmFtZTogYW55LCBhY3Rpb25JdGVtOiBhbnkpIHtcbiAgY29uc3QgbmV3QWN0aW9uR3JvdXBzID0gWy4uLmFjdGlvbkdyb3Vwc107XG4gIGxldCBncm91cEluZGV4O1xuICBuZXdBY3Rpb25Hcm91cHMuc29tZSgoZ3JvdXAsIGluZGV4KSA9PiB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMzOSAtIFByb3BlcnR5ICdrZXlmcmFtZScgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAnbmV2ZXInLlxuICAgIGlmIChncm91cC5rZXlmcmFtZSA9PT0ga2V5ZnJhbWUpIHtcbiAgICAgIGdyb3VwSW5kZXggPSBpbmRleDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xuICBpZiAoZ3JvdXBJbmRleCA9PSBudWxsKSB7XG4gICAgZ3JvdXBJbmRleCA9IG5ld0FjdGlvbkdyb3Vwcy5sZW5ndGg7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjM0NSAtIEFyZ3VtZW50IG9mIHR5cGUgJ3sga2V5ZnJhbWU6IGFueTsgYWN0aW9uSXRlbXM6IG5ldmVyW107IH0nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcicuXG4gICAgbmV3QWN0aW9uR3JvdXBzLnB1c2goe1xuICAgICAga2V5ZnJhbWUsXG4gICAgICBhY3Rpb25JdGVtczogW10sXG4gICAgfSk7XG4gIH1cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMzOSAtIFByb3BlcnR5ICdhY3Rpb25JdGVtcycgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAnbmV2ZXInLlxuICBuZXdBY3Rpb25Hcm91cHNbZ3JvdXBJbmRleF0uYWN0aW9uSXRlbXMucHVzaChhY3Rpb25JdGVtKTtcbiAgcmV0dXJuIG5ld0FjdGlvbkdyb3Vwcztcbn1cblxuZnVuY3Rpb24gYmluZEV2ZW50cyhzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlKSB7XG4gIGNvbnN0IHtpeERhdGF9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uc3Qge2V2ZW50VHlwZU1hcH0gPSBpeERhdGE7XG5cbiAgdXBkYXRlVmlld3BvcnRXaWR0aChzdG9yZSk7XG5cbiAgZm9yRWFjaChldmVudFR5cGVNYXAsIChldmVudHMsIGtleSkgPT4ge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ3N0cmluZycgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICd7IFNMSURFUl9BQ1RJVkU6IHsgaGFuZGxlcjogKG9wdGlvbnM6IGFueSwgc3RhdGU6IGFueSkgPT4gYW55OyB0eXBlczogc3RyaW5nOyB9OyBTTElERVJfSU5BQ1RJVkU6IHsgaGFuZGxlcjogKG9wdGlvbnM6IGFueSwgc3RhdGU6IGFueSkgPT4gYW55OyB0eXBlczogc3RyaW5nOyB9OyBEUk9QRE9XTl9PUEVOOiB7IGhhbmRsZXI6IChvcHRpb25zOiBhbnksIHN0YXRlOiBhbnkpID0+IGFueTsgdHlwZXM6IHN0cmluZzsgfTsgLi4uIDIxIG1vcmUgLi4uOyBQQUdFX1NUQVJUOiB7IC4uLjsgfTsgfScuXG4gICAgY29uc3QgbG9naWMgPSBJWDJWYW5pbGxhRXZlbnRzW2tleV07XG4gICAgaWYgKCFsb2dpYykge1xuICAgICAgY29uc29sZS53YXJuKGBJWDIgZXZlbnQgdHlwZSBub3QgY29uZmlndXJlZDogJHtrZXl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGJpbmRFdmVudFR5cGUoe1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnbG9naWMnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgICBsb2dpYyxcbiAgICAgIHN0b3JlLFxuICAgICAgZXZlbnRzLFxuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCB7aXhTZXNzaW9ufSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGlmIChpeFNlc3Npb24uZXZlbnRMaXN0ZW5lcnMubGVuZ3RoKSB7XG4gICAgYmluZFJlc2l6ZUV2ZW50cyhzdG9yZSk7XG4gIH1cbn1cblxuY29uc3QgV0lORE9XX1JFU0laRV9FVkVOVFMgPSBbJ3Jlc2l6ZScsICdvcmllbnRhdGlvbmNoYW5nZSddO1xuXG5mdW5jdGlvbiBiaW5kUmVzaXplRXZlbnRzKHN0b3JlOiBJWDJFbmdpbmVSZWR1Y2VyU3RvcmUpIHtcbiAgY29uc3QgaGFuZGxlUmVzaXplID0gKCkgPT4ge1xuICAgIHVwZGF0ZVZpZXdwb3J0V2lkdGgoc3RvcmUpO1xuICB9O1xuICBXSU5ET1dfUkVTSVpFX0VWRU5UUy5mb3JFYWNoKCh0eXBlKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlUmVzaXplKTtcbiAgICBzdG9yZS5kaXNwYXRjaChldmVudExpc3RlbmVyQWRkZWQod2luZG93LCBbdHlwZSwgaGFuZGxlUmVzaXplXSkpO1xuICB9KTtcbiAgaGFuZGxlUmVzaXplKCk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0V2lkdGgoc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBjb25zdCB7aXhTZXNzaW9uLCBpeERhdGF9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uc3Qgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgaWYgKHdpZHRoICE9PSBpeFNlc3Npb24udmlld3BvcnRXaWR0aCkge1xuICAgIGNvbnN0IHttZWRpYVF1ZXJpZXN9ID0gaXhEYXRhO1xuICAgIHN0b3JlLmRpc3BhdGNoKHZpZXdwb3J0V2lkdGhDaGFuZ2VkKHt3aWR0aCwgbWVkaWFRdWVyaWVzfSkpO1xuICB9XG59XG5cbmNvbnN0IG1hcEZvdW5kVmFsdWVzID0gKFxuICBvYmplY3Q6IGFueSxcbiAgaXRlcmF0ZWU6IChldmVudD86IGFueSkgPT4gQXJyYXk8SFRNTEVsZW1lbnQgfCBhbnk+XG4pID0+IG9taXRCeShtYXBWYWx1ZXMob2JqZWN0LCBpdGVyYXRlZSksIGlzRW1wdHkpO1xuXG5jb25zdCBmb3JFYWNoRXZlbnRUYXJnZXQgPSAoXG4gIGV2ZW50VGFyZ2V0czogYW55LFxuICBldmVudENhbGxiYWNrOiAoZWxlbWVudDogYW55LCBldmVudElkOiBhbnksIGV2ZW50U3RhdGVLZXk6IHN0cmluZykgPT4gdm9pZFxuKSA9PiB7XG4gIGZvckVhY2goZXZlbnRUYXJnZXRzLCAoZWxlbWVudHMsIGV2ZW50SWQpID0+IHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdlbGVtZW50JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciAnaW5kZXgnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50U3RhdGVLZXkgPSBldmVudElkICsgQ09MT05fREVMSU1JVEVSICsgaW5kZXg7XG4gICAgICBldmVudENhbGxiYWNrKGVsZW1lbnQsIGV2ZW50SWQsIGV2ZW50U3RhdGVLZXkpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbmNvbnN0IGdldEFmZmVjdGVkRm9yRXZlbnQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICBjb25zdCBjb25maWcgPSB7dGFyZ2V0OiBldmVudC50YXJnZXQsIHRhcmdldHM6IGV2ZW50LnRhcmdldHN9IGFzIGNvbnN0O1xuICByZXR1cm4gZ2V0QWZmZWN0ZWRFbGVtZW50cyh7Y29uZmlnLCBlbGVtZW50QXBpfSk7XG59O1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdsb2dpYycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ3N0b3JlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnRzJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZnVuY3Rpb24gYmluZEV2ZW50VHlwZSh7bG9naWMsIHN0b3JlLCBldmVudHN9OiB7c3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZX0pIHtcbiAgaW5qZWN0QmVoYXZpb3JDU1NGaXhlcyhldmVudHMpO1xuICBjb25zdCB7dHlwZXM6IGV2ZW50VHlwZXMsIGhhbmRsZXI6IGV2ZW50SGFuZGxlcn0gPSBsb2dpYztcbiAgY29uc3Qge2l4RGF0YX0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBjb25zdCB7YWN0aW9uTGlzdHN9ID0gaXhEYXRhO1xuICBjb25zdCBldmVudFRhcmdldHMgPSBtYXBGb3VuZFZhbHVlcyhldmVudHMsIGdldEFmZmVjdGVkRm9yRXZlbnQpO1xuXG4gIGlmICghc2l6ZShldmVudFRhcmdldHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yRWFjaChldmVudFRhcmdldHMsIChlbGVtZW50cywga2V5KSA9PiB7XG4gICAgY29uc3QgZXZlbnQgPSBldmVudHNba2V5XTtcbiAgICBjb25zdCB7XG4gICAgICBhY3Rpb246IGV2ZW50QWN0aW9uLFxuICAgICAgaWQ6IGV2ZW50SWQsXG4gICAgICBtZWRpYVF1ZXJpZXMgPSBpeERhdGEubWVkaWFRdWVyeUtleXMsXG4gICAgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHthY3Rpb25MaXN0SWR9ID0gZXZlbnRBY3Rpb24uY29uZmlnO1xuXG4gICAgaWYgKCFtZWRpYVF1ZXJpZXNFcXVhbChtZWRpYVF1ZXJpZXMsIGl4RGF0YS5tZWRpYVF1ZXJ5S2V5cykpIHtcbiAgICAgIHN0b3JlLmRpc3BhdGNoKG1lZGlhUXVlcmllc0RlZmluZWQoKSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZXZlbnRBY3Rpb24uYWN0aW9uVHlwZUlkID09PSBBY3Rpb25UeXBlQ29uc3RzLkdFTkVSQUxfQ09OVElOVU9VU19BQ1RJT05cbiAgICApIHtcbiAgICAgIGNvbnN0IGNvbmZpZ3MgPSBBcnJheS5pc0FycmF5KGV2ZW50LmNvbmZpZylcbiAgICAgICAgPyBldmVudC5jb25maWdcbiAgICAgICAgOiBbZXZlbnQuY29uZmlnXTtcblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnZXZlbnRDb25maWcnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgICBjb25maWdzLmZvckVhY2goKGV2ZW50Q29uZmlnKSA9PiB7XG4gICAgICAgIGNvbnN0IHtjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZH0gPSBldmVudENvbmZpZztcbiAgICAgICAgY29uc3QgcGFyYW1Hcm91cHMgPSBnZXQoXG4gICAgICAgICAgYWN0aW9uTGlzdHMsXG4gICAgICAgICAgYCR7YWN0aW9uTGlzdElkfS5jb250aW51b3VzUGFyYW1ldGVyR3JvdXBzYCxcbiAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJHcm91cCA9IGZpbmQoXG4gICAgICAgICAgcGFyYW1Hcm91cHMsXG4gICAgICAgICAgKHtpZH0pID0+IGlkID09PSBjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzbW9vdGhpbmcgPSAoZXZlbnRDb25maWcuc21vb3RoaW5nIHx8IDApIC8gMTAwO1xuICAgICAgICBjb25zdCByZXN0aW5nVmFsdWUgPSAoZXZlbnRDb25maWcucmVzdGluZ1N0YXRlIHx8IDApIC8gMTAwO1xuXG4gICAgICAgIGlmICghcGFyYW1ldGVyR3JvdXApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50cy5mb3JFYWNoKChldmVudFRhcmdldCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBldmVudFN0YXRlS2V5ID0gZXZlbnRJZCArIENPTE9OX0RFTElNSVRFUiArIGluZGV4O1xuICAgICAgICAgIGNyZWF0ZUdyb3VwSW5zdGFuY2VzKHtcbiAgICAgICAgICAgIHN0b3JlLFxuICAgICAgICAgICAgZXZlbnRTdGF0ZUtleSxcbiAgICAgICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICAgICAgZXZlbnRJZCxcbiAgICAgICAgICAgIGV2ZW50Q29uZmlnLFxuICAgICAgICAgICAgYWN0aW9uTGlzdElkLFxuICAgICAgICAgICAgcGFyYW1ldGVyR3JvdXAsXG4gICAgICAgICAgICBzbW9vdGhpbmcsXG4gICAgICAgICAgICByZXN0aW5nVmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZXZlbnRBY3Rpb24uYWN0aW9uVHlwZUlkID09PSBBY3Rpb25UeXBlQ29uc3RzLkdFTkVSQUxfU1RBUlRfQUNUSU9OIHx8XG4gICAgICBpc1F1aWNrRWZmZWN0KGV2ZW50QWN0aW9uLmFjdGlvblR5cGVJZClcbiAgICApIHtcbiAgICAgIHJlbmRlckluaXRpYWxHcm91cCh7c3RvcmUsIGFjdGlvbkxpc3RJZCwgZXZlbnRJZH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlRXZlbnQgPSAobmF0aXZlRXZlbnQ6IGFueSkgPT4ge1xuICAgIGNvbnN0IHtpeFNlc3Npb259ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBmb3JFYWNoRXZlbnRUYXJnZXQoZXZlbnRUYXJnZXRzLCAoZWxlbWVudCwgZXZlbnRJZCwgZXZlbnRTdGF0ZUtleSkgPT4ge1xuICAgICAgY29uc3QgZXZlbnQgPSBldmVudHNbZXZlbnRJZF07XG4gICAgICBjb25zdCBvbGRTdGF0ZSA9IGl4U2Vzc2lvbi5ldmVudFN0YXRlW2V2ZW50U3RhdGVLZXldO1xuICAgICAgY29uc3Qge2FjdGlvbjogZXZlbnRBY3Rpb24sIG1lZGlhUXVlcmllcyA9IGl4RGF0YS5tZWRpYVF1ZXJ5S2V5c30gPSBldmVudDtcbiAgICAgIC8vIEJ5cGFzcyBldmVudCBoYW5kbGVyIGlmIGN1cnJlbnQgbWVkaWEgcXVlcnkgaXMgbm90IGxpc3RlZCBpbiBldmVudCBjb25maWdcbiAgICAgIGlmICghc2hvdWxkQWxsb3dNZWRpYVF1ZXJ5KG1lZGlhUXVlcmllcywgaXhTZXNzaW9uLm1lZGlhUXVlcnlLZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhbmRsZUV2ZW50V2l0aENvbmZpZyA9IChldmVudENvbmZpZyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID0gZXZlbnRIYW5kbGVyKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0b3JlLFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgZXZlbnRDb25maWcsXG4gICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgIGV2ZW50U3RhdGVLZXksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbGRTdGF0ZVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXNoYWxsb3dFcXVhbChuZXdTdGF0ZSwgb2xkU3RhdGUpKSB7XG4gICAgICAgICAgc3RvcmUuZGlzcGF0Y2goZXZlbnRTdGF0ZUNoYW5nZWQoZXZlbnRTdGF0ZUtleSwgbmV3U3RhdGUpKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChcbiAgICAgICAgZXZlbnRBY3Rpb24uYWN0aW9uVHlwZUlkID09PSBBY3Rpb25UeXBlQ29uc3RzLkdFTkVSQUxfQ09OVElOVU9VU19BQ1RJT05cbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWdzID0gQXJyYXkuaXNBcnJheShldmVudC5jb25maWcpXG4gICAgICAgICAgPyBldmVudC5jb25maWdcbiAgICAgICAgICA6IFtldmVudC5jb25maWddO1xuICAgICAgICBjb25maWdzLmZvckVhY2goaGFuZGxlRXZlbnRXaXRoQ29uZmlnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZUV2ZW50V2l0aENvbmZpZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUV2ZW50VGhyb3R0bGVkID0gdGhyb3R0bGUoaGFuZGxlRXZlbnQsIFRIUk9UVExFRF9FVkVOVF9XQUlUKTtcblxuICBjb25zdCBhZGRMaXN0ZW5lcnMgPSAoe1xuICAgIHRhcmdldCA9IGRvY3VtZW50LFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ3R5cGVzJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgIHR5cGVzLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ3Nob3VsZFRocm90dGxlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgIHRocm90dGxlOiBzaG91bGRUaHJvdHRsZSxcbiAgfSkgPT4ge1xuICAgIHR5cGVzXG4gICAgICAuc3BsaXQoJyAnKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAndHlwZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICAgIC5mb3JFYWNoKCh0eXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJGdW5jID0gc2hvdWxkVGhyb3R0bGUgPyBoYW5kbGVFdmVudFRocm90dGxlZCA6IGhhbmRsZUV2ZW50O1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyRnVuYyk7XG4gICAgICAgIHN0b3JlLmRpc3BhdGNoKGV2ZW50TGlzdGVuZXJBZGRlZCh0YXJnZXQsIFt0eXBlLCBoYW5kbGVyRnVuY10pKTtcbiAgICAgIH0pO1xuICB9O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGV2ZW50VHlwZXMpKSB7XG4gICAgZXZlbnRUeXBlcy5mb3JFYWNoKGFkZExpc3RlbmVycyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50VHlwZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgYWRkTGlzdGVuZXJzKGxvZ2ljKTtcbiAgfVxufVxuXG4vKipcbiAqIEluamVjdHMgQ1NTIGludG8gdGhlIGRvY3VtZW50IHRvIGZpeCBiZWhhdmlvciBpc3N1ZXMgYWNyb3NzXG4gKiBkaWZmZXJlbnQgZGV2aWNlcy5cbiAqL1xuXG5mdW5jdGlvbiBpbmplY3RCZWhhdmlvckNTU0ZpeGVzKGV2ZW50czogYW55KSB7XG4gIGlmICghSVNfTU9CSUxFX1NBRkFSSSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGluamVjdGVkU2VsZWN0b3JzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgbGV0IGNzc1RleHQgPSAnJztcbiAgZm9yIChjb25zdCBldmVudElkIGluIGV2ZW50cykge1xuICAgIGNvbnN0IHtldmVudFR5cGVJZCwgdGFyZ2V0fSA9IGV2ZW50c1tldmVudElkXTtcblxuICAgIGNvbnN0IHNlbGVjdG9yID0gZWxlbWVudEFwaS5nZXRRdWVyeVNlbGVjdG9yKHRhcmdldCk7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjUzOCAtIFR5cGUgJ251bGwnIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGluZGV4IHR5cGUuXG4gICAgaWYgKGluamVjdGVkU2VsZWN0b3JzW3NlbGVjdG9yXSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgXCJjdXJzb3I6IHBvaW50ZXJcIiBzdHlsZSBydWxlIHRvIGVuc3VyZSB0aGF0IENMSUNLIGV2ZW50cyBnZXQgZmlyZWQgZm9yIElPUyBkZXZpY2VzXG4gICAgaWYgKFxuICAgICAgZXZlbnRUeXBlSWQgPT09IEV2ZW50VHlwZUNvbnN0cy5NT1VTRV9DTElDSyB8fFxuICAgICAgZXZlbnRUeXBlSWQgPT09IEV2ZW50VHlwZUNvbnN0cy5NT1VTRV9TRUNPTkRfQ0xJQ0tcbiAgICApIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1MzggLSBUeXBlICdudWxsJyBjYW5ub3QgYmUgdXNlZCBhcyBhbiBpbmRleCB0eXBlLlxuICAgICAgaW5qZWN0ZWRTZWxlY3RvcnNbc2VsZWN0b3JdID0gdHJ1ZTtcbiAgICAgIGNzc1RleHQgKz1cbiAgICAgICAgc2VsZWN0b3IgK1xuICAgICAgICAneycgK1xuICAgICAgICAnY3Vyc29yOiBwb2ludGVyOycgK1xuICAgICAgICAndG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247JyArXG4gICAgICAgICd9JztcbiAgICB9XG4gIH1cblxuICBpZiAoY3NzVGV4dCkge1xuICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBzdHlsZS50ZXh0Q29udGVudCA9IGNzc1RleHQ7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVySW5pdGlhbEdyb3VwKHtcbiAgc3RvcmUsXG4gIGFjdGlvbkxpc3RJZCxcbiAgZXZlbnRJZCxcbn06IHtcbiAgc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZTtcbiAgYWN0aW9uTGlzdElkOiBudW1iZXI7XG4gIGV2ZW50SWQ6IG51bWJlcjtcbn0pIHtcbiAgY29uc3Qge2l4RGF0YSwgaXhTZXNzaW9ufSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IHthY3Rpb25MaXN0cywgZXZlbnRzfSA9IGl4RGF0YTtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMTgwNDggLSAnZXZlbnRzJyBpcyBwb3NzaWJseSAndW5kZWZpbmVkJy5cbiAgY29uc3QgZXZlbnQgPSBldmVudHNbZXZlbnRJZF07XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzE4MDQ4IC0gJ2FjdGlvbkxpc3RzJyBpcyBwb3NzaWJseSAndW5kZWZpbmVkJy5cbiAgY29uc3QgYWN0aW9uTGlzdCA9IGFjdGlvbkxpc3RzW2FjdGlvbkxpc3RJZF07XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFByb3BlcnR5ICd1c2VGaXJzdEdyb3VwQXNJbml0aWFsU3RhdGUnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0FjdGlvbkxpc3RUeXBlJy5cbiAgaWYgKGFjdGlvbkxpc3QgJiYgYWN0aW9uTGlzdC51c2VGaXJzdEdyb3VwQXNJbml0aWFsU3RhdGUpIHtcbiAgICBjb25zdCBpbml0aWFsU3RhdGVJdGVtcyA9IGdldChcbiAgICAgIGFjdGlvbkxpc3QsXG4gICAgICAnYWN0aW9uSXRlbUdyb3Vwc1swXS5hY3Rpb25JdGVtcycsXG4gICAgICBbXVxuICAgICk7XG5cbiAgICAvLyBCeXBhc3MgaW5pdGlhbCBzdGF0ZSByZW5kZXIgaWYgY3VycmVudCBtZWRpYSBxdWVyeSBpcyBub3QgbGlzdGVkIGluIGV2ZW50IGNvbmZpZ1xuICAgIGNvbnN0IG1lZGlhUXVlcmllcyA9IGdldChldmVudCwgJ21lZGlhUXVlcmllcycsIGl4RGF0YS5tZWRpYVF1ZXJ5S2V5cyk7XG4gICAgaWYgKCFzaG91bGRBbGxvd01lZGlhUXVlcnkobWVkaWFRdWVyaWVzLCBpeFNlc3Npb24ubWVkaWFRdWVyeUtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbml0aWFsU3RhdGVJdGVtcy5mb3JFYWNoKChhY3Rpb25JdGVtKSA9PiB7XG4gICAgICBjb25zdCB7Y29uZmlnOiBpdGVtQ29uZmlnLCBhY3Rpb25UeXBlSWR9ID0gYWN0aW9uSXRlbTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9XG4gICAgICAgIC8vIFdoZW4gdXNlRXZlbnRUYXJnZXQgaXMgZXhwbGljaXRseSB0cnVlLCB1c2UgZXZlbnQgdGFyZ2V0L3RhcmdldHMgdG8gcXVlcnkgZWxlbWVudHNcbiAgICAgICAgLy8gSG93ZXZlciwgc2tpcCB0aGlzIGNvbmRpdGlvbiB3aGVuIG9iamVjdElkIGlzIGRlZmluZWRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFByb3BlcnR5ICd0YXJnZXQnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ25ldmVyJy5cbiAgICAgICAgaXRlbUNvbmZpZz8udGFyZ2V0Py51c2VFdmVudFRhcmdldCA9PT0gdHJ1ZSAmJlxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gUHJvcGVydHkgJ3RhcmdldCcgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAnbmV2ZXInLlxuICAgICAgICBpdGVtQ29uZmlnPy50YXJnZXQ/Lm9iamVjdElkID09IG51bGxcbiAgICAgICAgICA/IC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzE4MDQ4IC0gJ2V2ZW50JyBpcyBwb3NzaWJseSAndW5kZWZpbmVkJy5cbiAgICAgICAgICAgIHt0YXJnZXQ6IGV2ZW50LnRhcmdldCwgdGFyZ2V0czogZXZlbnQudGFyZ2V0c31cbiAgICAgICAgICA6IGl0ZW1Db25maWc7XG4gICAgICBjb25zdCBpdGVtRWxlbWVudHMgPSBnZXRBZmZlY3RlZEVsZW1lbnRzKHtjb25maWcsIGV2ZW50LCBlbGVtZW50QXBpfSk7XG4gICAgICBjb25zdCBzaG91bGRVc2VQbHVnaW4gPSBpc1BsdWdpblR5cGUoYWN0aW9uVHlwZUlkKTtcblxuICAgICAgaXRlbUVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgcGx1Z2luSW5zdGFuY2UgPSBzaG91bGRVc2VQbHVnaW5cbiAgICAgICAgICA/IGNyZWF0ZVBsdWdpbkluc3RhbmNlKGFjdGlvblR5cGVJZCk/LihlbGVtZW50LCBhY3Rpb25JdGVtKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgY3JlYXRlSW5zdGFuY2Uoe1xuICAgICAgICAgIGRlc3RpbmF0aW9uOiBnZXREZXN0aW5hdGlvblZhbHVlcyhcbiAgICAgICAgICAgIHtlbGVtZW50LCBhY3Rpb25JdGVtLCBlbGVtZW50QXBpfSxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIHBsdWdpbkluc3RhbmNlXG4gICAgICAgICAgKSxcbiAgICAgICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBldmVudElkLFxuICAgICAgICAgIGFjdGlvbkl0ZW0sXG4gICAgICAgICAgYWN0aW9uTGlzdElkLFxuICAgICAgICAgIHBsdWdpbkluc3RhbmNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wQWxsQWN0aW9uR3JvdXBzKHtzdG9yZX06IHtzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlfSkge1xuICBjb25zdCB7aXhJbnN0YW5jZXN9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgZm9yRWFjaChpeEluc3RhbmNlcywgKGluc3RhbmNlKSA9PiB7XG4gICAgaWYgKCFpbnN0YW5jZS5jb250aW51b3VzKSB7XG4gICAgICBjb25zdCB7YWN0aW9uTGlzdElkLCB2ZXJib3NlfSA9IGluc3RhbmNlO1xuICAgICAgcmVtb3ZlSW5zdGFuY2UoaW5zdGFuY2UsIHN0b3JlKTtcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIHN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIGFjdGlvbkxpc3RQbGF5YmFja0NoYW5nZWQoe2FjdGlvbkxpc3RJZCwgaXNQbGF5aW5nOiBmYWxzZX0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BBY3Rpb25Hcm91cCh7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ3N0b3JlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICBzdG9yZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGV2ZW50SWQsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBldmVudFRhcmdldCxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGV2ZW50U3RhdGVLZXksXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2FjdGlvbkxpc3RJZCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgYWN0aW9uTGlzdElkLFxufSkge1xuICBjb25zdCB7aXhJbnN0YW5jZXMsIGl4U2Vzc2lvbn0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuXG4gIC8vIENoZWNrIGZvciBlbGVtZW50IGJvdW5kYXJ5IGJlZm9yZSBzdG9wcGluZyBlbmdpbmUgaW5zdGFuY2VzXG4gIGNvbnN0IGV2ZW50RWxlbWVudFJvb3QgPVxuICAgIGl4U2Vzc2lvbi5oYXNCb3VuZGFyeU5vZGVzICYmIGV2ZW50VGFyZ2V0XG4gICAgICA/IGVsZW1lbnRBcGkuZ2V0Q2xvc2VzdEVsZW1lbnQoZXZlbnRUYXJnZXQsIEJPVU5EQVJZX1NFTEVDVE9SKVxuICAgICAgOiBudWxsO1xuXG4gIGZvckVhY2goaXhJbnN0YW5jZXMsIChpbnN0YW5jZSkgPT4ge1xuICAgIGNvbnN0IGJvdW5kYXJ5TW9kZSA9IGdldChpbnN0YW5jZSwgJ2FjdGlvbkl0ZW0uY29uZmlnLnRhcmdldC5ib3VuZGFyeU1vZGUnKTtcbiAgICAvLyBWYWxpZGF0ZSBldmVudCBrZXkgaWYgZXZlbnRTdGF0ZUtleSB3YXMgcHJvdmlkZWQsIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRydWVcbiAgICBjb25zdCB2YWxpZEV2ZW50S2V5ID0gZXZlbnRTdGF0ZUtleVxuICAgICAgPyBpbnN0YW5jZS5ldmVudFN0YXRlS2V5ID09PSBldmVudFN0YXRlS2V5XG4gICAgICA6IHRydWU7XG4gICAgLy8gUmVtb3ZlIGVuZ2luZSBpbnN0YW5jZXMgdGhhdCBtYXRjaCB0aGUgcmVxdWlyZWQgaWRzXG4gICAgaWYgKFxuICAgICAgaW5zdGFuY2UuYWN0aW9uTGlzdElkID09PSBhY3Rpb25MaXN0SWQgJiZcbiAgICAgIGluc3RhbmNlLmV2ZW50SWQgPT09IGV2ZW50SWQgJiZcbiAgICAgIHZhbGlkRXZlbnRLZXlcbiAgICApIHtcbiAgICAgIC8vIEF2b2lkIHJlbW92YWwgd2hlbiByb290IGJvdW5kYXJ5IGRvZXMgbm90IGNvbnRhaW4gaW5zdGFuY2UgZWxlbWVudFxuICAgICAgaWYgKFxuICAgICAgICBldmVudEVsZW1lbnRSb290ICYmXG4gICAgICAgIGJvdW5kYXJ5TW9kZSAmJlxuICAgICAgICAhZWxlbWVudEFwaS5lbGVtZW50Q29udGFpbnMoZXZlbnRFbGVtZW50Um9vdCwgaW5zdGFuY2UuZWxlbWVudClcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZW1vdmVJbnN0YW5jZShpbnN0YW5jZSwgc3RvcmUpO1xuICAgICAgaWYgKGluc3RhbmNlLnZlcmJvc2UpIHtcbiAgICAgICAgc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgYWN0aW9uTGlzdFBsYXliYWNrQ2hhbmdlZCh7YWN0aW9uTGlzdElkLCBpc1BsYXlpbmc6IGZhbHNlfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRBY3Rpb25Hcm91cCh7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ3N0b3JlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICBzdG9yZSxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnRJZCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgZXZlbnRJZCxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGV2ZW50VGFyZ2V0LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgZXZlbnRTdGF0ZUtleSxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnYWN0aW9uTGlzdElkJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICBhY3Rpb25MaXN0SWQsXG4gIGdyb3VwSW5kZXggPSAwLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgaW1tZWRpYXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgdmVyYm9zZSxcbn0pIHtcbiAgY29uc3Qge2l4RGF0YSwgaXhTZXNzaW9ufSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IHtldmVudHN9ID0gaXhEYXRhO1xuICBjb25zdCBldmVudCA9IGV2ZW50c1tldmVudElkXSB8fCB7fTtcbiAgY29uc3Qge21lZGlhUXVlcmllcyA9IGl4RGF0YS5tZWRpYVF1ZXJ5S2V5c30gPSBldmVudDtcbiAgY29uc3QgYWN0aW9uTGlzdCA9IGdldChpeERhdGEsIGBhY3Rpb25MaXN0cy4ke2FjdGlvbkxpc3RJZH1gLCB7fSk7XG4gIGNvbnN0IHthY3Rpb25JdGVtR3JvdXBzLCB1c2VGaXJzdEdyb3VwQXNJbml0aWFsU3RhdGV9ID0gYWN0aW9uTGlzdDtcbiAgLy8gQWJvcnQgcGxheWJhY2sgaWYgbm8gYWN0aW9uIGdyb3Vwc1xuICBpZiAoIWFjdGlvbkl0ZW1Hcm91cHMgfHwgIWFjdGlvbkl0ZW1Hcm91cHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFJlc2V0IHRvIGZpcnN0IGdyb3VwIHdoZW4gZXZlbnQgbG9vcCBpcyBjb25maWd1cmVkXG4gIGlmIChncm91cEluZGV4ID49IGFjdGlvbkl0ZW1Hcm91cHMubGVuZ3RoICYmIGdldChldmVudCwgJ2NvbmZpZy5sb29wJykpIHtcbiAgICBncm91cEluZGV4ID0gMDtcbiAgfVxuICAvLyBTa2lwIGluaXRpYWwgc3RhdGUgZ3JvdXAgZHVyaW5nIGFjdGlvbiBsaXN0IHBsYXliYWNrLCBhcyBpdCBzaG91bGQgYWxyZWFkeSBiZSBhcHBsaWVkXG4gIGlmIChncm91cEluZGV4ID09PSAwICYmIHVzZUZpcnN0R3JvdXBBc0luaXRpYWxTdGF0ZSkge1xuICAgIGdyb3VwSW5kZXgrKztcbiAgfVxuICAvLyBJZGVudGlmeSBmaXJzdCBhbmltYXRlZCBncm91cCBhbmQgYXBwbHkgdGhlIGluaXRpYWwgUXVpY2tFZmZlY3QgZGVsYXlcbiAgY29uc3QgaXNGaXJzdEdyb3VwID1cbiAgICBncm91cEluZGV4ID09PSAwIHx8IChncm91cEluZGV4ID09PSAxICYmIHVzZUZpcnN0R3JvdXBBc0luaXRpYWxTdGF0ZSk7XG4gIGNvbnN0IGluc3RhbmNlRGVsYXkgPVxuICAgIGlzRmlyc3RHcm91cCAmJiBpc1F1aWNrRWZmZWN0KGV2ZW50LmFjdGlvbj8uYWN0aW9uVHlwZUlkKVxuICAgICAgPyBldmVudC5jb25maWcuZGVsYXlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gIC8vIEFib3J0IHBsYXliYWNrIGlmIG5vIGFjdGlvbiBpdGVtcyBleGlzdCBhdCBncm91cCBpbmRleFxuICBjb25zdCBhY3Rpb25JdGVtcyA9IGdldChhY3Rpb25JdGVtR3JvdXBzLCBbZ3JvdXBJbmRleCwgJ2FjdGlvbkl0ZW1zJ10sIFtdKTtcbiAgaWYgKCFhY3Rpb25JdGVtcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQWJvcnQgcGxheWJhY2sgaWYgY3VycmVudCBtZWRpYSBxdWVyeSBpcyBub3QgbGlzdGVkIGluIGV2ZW50IGNvbmZpZ1xuICBpZiAoIXNob3VsZEFsbG93TWVkaWFRdWVyeShtZWRpYVF1ZXJpZXMsIGl4U2Vzc2lvbi5tZWRpYVF1ZXJ5S2V5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBMaW1pdCBhZmZlY3RlZCBlbGVtZW50cyB3aGVuIGV2ZW50IHRhcmdldCBpcyB3aXRoaW4gYSBib3VuZGFyeSBub2RlXG4gIGNvbnN0IGV2ZW50RWxlbWVudFJvb3QgPVxuICAgIGl4U2Vzc2lvbi5oYXNCb3VuZGFyeU5vZGVzICYmIGV2ZW50VGFyZ2V0XG4gICAgICA/IGVsZW1lbnRBcGkuZ2V0Q2xvc2VzdEVsZW1lbnQoZXZlbnRUYXJnZXQsIEJPVU5EQVJZX1NFTEVDVE9SKVxuICAgICAgOiBudWxsO1xuXG4gIGNvbnN0IGNhcnJpZXJJbmRleCA9IGdldE1heER1cmF0aW9uSXRlbUluZGV4KGFjdGlvbkl0ZW1zKTtcbiAgbGV0IGdyb3VwU3RhcnRSZXN1bHQgPSBmYWxzZTtcblxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdhY3Rpb25JdGVtJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciAnYWN0aW9uSW5kZXgnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGFjdGlvbkl0ZW1zLmZvckVhY2goKGFjdGlvbkl0ZW0sIGFjdGlvbkluZGV4KSA9PiB7XG4gICAgY29uc3Qge2NvbmZpZywgYWN0aW9uVHlwZUlkfSA9IGFjdGlvbkl0ZW07XG4gICAgY29uc3Qgc2hvdWxkVXNlUGx1Z2luID0gaXNQbHVnaW5UeXBlKGFjdGlvblR5cGVJZCk7XG4gICAgY29uc3Qge3RhcmdldH0gPSBjb25maWc7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudFJvb3QgPSB0YXJnZXQuYm91bmRhcnlNb2RlID8gZXZlbnRFbGVtZW50Um9vdCA6IG51bGw7XG4gICAgY29uc3QgZWxlbWVudHMgPSBnZXRBZmZlY3RlZEVsZW1lbnRzKHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIGV2ZW50LFxuICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICBlbGVtZW50Um9vdCxcbiAgICAgIGVsZW1lbnRBcGksXG4gICAgfSk7XG4gICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCwgZWxlbWVudEluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwbHVnaW5JbnN0YW5jZSA9IHNob3VsZFVzZVBsdWdpblxuICAgICAgICA/IGNyZWF0ZVBsdWdpbkluc3RhbmNlKGFjdGlvblR5cGVJZCk/LihlbGVtZW50LCBhY3Rpb25JdGVtKVxuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBwbHVnaW5EdXJhdGlvbiA9IHNob3VsZFVzZVBsdWdpblxuICAgICAgICA/IGdldFBsdWdpbkR1cmF0aW9uKGFjdGlvblR5cGVJZCkoZWxlbWVudCwgYWN0aW9uSXRlbSlcbiAgICAgICAgOiBudWxsO1xuICAgICAgZ3JvdXBTdGFydFJlc3VsdCA9IHRydWU7XG4gICAgICBjb25zdCBpc0NhcnJpZXIgPSBjYXJyaWVySW5kZXggPT09IGFjdGlvbkluZGV4ICYmIGVsZW1lbnRJbmRleCA9PT0gMDtcbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHtlbGVtZW50LCBhY3Rpb25JdGVtfSk7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbiA9IGdldERlc3RpbmF0aW9uVmFsdWVzKFxuICAgICAgICB7ZWxlbWVudCwgYWN0aW9uSXRlbSwgZWxlbWVudEFwaX0sXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBwbHVnaW5JbnN0YW5jZVxuICAgICAgKTtcblxuICAgICAgY3JlYXRlSW5zdGFuY2Uoe1xuICAgICAgICBzdG9yZSxcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgYWN0aW9uSXRlbSxcbiAgICAgICAgZXZlbnRJZCxcbiAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgIGV2ZW50U3RhdGVLZXksXG4gICAgICAgIGFjdGlvbkxpc3RJZCxcbiAgICAgICAgZ3JvdXBJbmRleCxcbiAgICAgICAgaXNDYXJyaWVyLFxuICAgICAgICBjb21wdXRlZFN0eWxlLFxuICAgICAgICBkZXN0aW5hdGlvbixcbiAgICAgICAgaW1tZWRpYXRlLFxuICAgICAgICB2ZXJib3NlLFxuICAgICAgICBwbHVnaW5JbnN0YW5jZSxcbiAgICAgICAgcGx1Z2luRHVyYXRpb24sXG4gICAgICAgIGluc3RhbmNlRGVsYXksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBncm91cFN0YXJ0UmVzdWx0O1xufVxuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdvcHRpb25zJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2Uob3B0aW9ucykge1xuICBjb25zdCB7c3RvcmUsIGNvbXB1dGVkU3R5bGUsIC4uLnJlc3R9ID0gb3B0aW9ucztcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgYWN0aW9uSXRlbSxcblxuICAgIGltbWVkaWF0ZSxcbiAgICBwbHVnaW5JbnN0YW5jZSxcblxuICAgIGNvbnRpbnVvdXMsXG5cbiAgICByZXN0aW5nVmFsdWUsXG4gICAgZXZlbnRJZCxcbiAgfSA9IHJlc3Q7XG4gIGNvbnN0IGF1dG9TdGFydCA9ICFjb250aW51b3VzO1xuICBjb25zdCBpbnN0YW5jZUlkID0gZ2V0SW5zdGFuY2VJZCgpO1xuXG4gIGNvbnN0IHtpeEVsZW1lbnRzLCBpeFNlc3Npb24sIGl4RGF0YX0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBjb25zdCBlbGVtZW50SWQgPSBnZXRFbGVtZW50SWQoaXhFbGVtZW50cywgZWxlbWVudCk7XG4gIGNvbnN0IHtyZWZTdGF0ZX0gPSBpeEVsZW1lbnRzW2VsZW1lbnRJZF0gfHwge307XG4gIGNvbnN0IHJlZlR5cGUgPSBlbGVtZW50QXBpLmdldFJlZlR5cGUoZWxlbWVudCk7XG5cbiAgY29uc3Qgc2tpcE1vdGlvbiA9XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnYW55JyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ3sgcmVhZG9ubHkgVFJBTlNGT1JNX01PVkU6IHRydWU7IHJlYWRvbmx5IFRSQU5TRk9STV9TQ0FMRTogdHJ1ZTsgcmVhZG9ubHkgVFJBTlNGT1JNX1JPVEFURTogdHJ1ZTsgcmVhZG9ubHkgVFJBTlNGT1JNX1NLRVc6IHRydWU7IHJlYWRvbmx5IFNUWUxFX1NJWkU6IHRydWU7IHJlYWRvbmx5IFNUWUxFX0ZJTFRFUjogdHJ1ZTsgcmVhZG9ubHkgU1RZTEVfRk9OVF9WQVJJQVRJT046IHRydWU7IH0nLlxuICAgIGl4U2Vzc2lvbi5yZWR1Y2VkTW90aW9uICYmIFJlZHVjZWRNb3Rpb25UeXBlc1thY3Rpb25JdGVtLmFjdGlvblR5cGVJZF07XG4gIGxldCBza2lwVG9WYWx1ZTtcbiAgaWYgKHNraXBNb3Rpb24gJiYgY29udGludW91cykge1xuICAgIHN3aXRjaCAoaXhEYXRhLmV2ZW50c1tldmVudElkXT8uZXZlbnRUeXBlSWQpIHtcbiAgICAgIGNhc2UgRXZlbnRUeXBlQ29uc3RzLk1PVVNFX01PVkU6XG4gICAgICBjYXNlIEV2ZW50VHlwZUNvbnN0cy5NT1VTRV9NT1ZFX0lOX1ZJRVdQT1JUOlxuICAgICAgICBza2lwVG9WYWx1ZSA9IHJlc3RpbmdWYWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBza2lwVG9WYWx1ZSA9IDAuNTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3JpZ2luID0gZ2V0SW5zdGFuY2VPcmlnaW4oXG4gICAgZWxlbWVudCxcbiAgICByZWZTdGF0ZSxcbiAgICBjb21wdXRlZFN0eWxlLFxuICAgIGFjdGlvbkl0ZW0sXG4gICAgZWxlbWVudEFwaSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHBsdWdpbkluc3RhbmNlXG4gICk7XG5cbiAgc3RvcmUuZGlzcGF0Y2goXG4gICAgaW5zdGFuY2VBZGRlZCh7XG4gICAgICBpbnN0YW5jZUlkLFxuICAgICAgZWxlbWVudElkLFxuICAgICAgb3JpZ2luLFxuICAgICAgcmVmVHlwZSxcbiAgICAgIHNraXBNb3Rpb24sXG4gICAgICBza2lwVG9WYWx1ZSxcbiAgICAgIC4uLnJlc3QsXG4gICAgfSlcbiAgKTtcblxuICBkaXNwYXRjaEN1c3RvbUV2ZW50KGRvY3VtZW50LmJvZHksICdpeDItYW5pbWF0aW9uLXN0YXJ0ZWQnLCBpbnN0YW5jZUlkKTtcblxuICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgcmVuZGVySW1tZWRpYXRlSW5zdGFuY2Uoc3RvcmUsIGluc3RhbmNlSWQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG9ic2VydmVTdG9yZSh7XG4gICAgc3RvcmUsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnaXhJbnN0YW5jZXMnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgc2VsZWN0OiAoe2l4SW5zdGFuY2VzfSkgPT4gaXhJbnN0YW5jZXNbaW5zdGFuY2VJZF0sXG4gICAgb25DaGFuZ2U6IGhhbmRsZUluc3RhbmNlQ2hhbmdlLFxuICB9KTtcblxuICBpZiAoYXV0b1N0YXJ0KSB7XG4gICAgc3RvcmUuZGlzcGF0Y2goaW5zdGFuY2VTdGFydGVkKGluc3RhbmNlSWQsIGl4U2Vzc2lvbi50aWNrKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlSW5zdGFuY2UoaW5zdGFuY2U6IGFueSwgc3RvcmU6IElYMkVuZ2luZVJlZHVjZXJTdG9yZSkge1xuICBkaXNwYXRjaEN1c3RvbUV2ZW50KGRvY3VtZW50LmJvZHksICdpeDItYW5pbWF0aW9uLXN0b3BwaW5nJywge1xuICAgIGluc3RhbmNlSWQ6IGluc3RhbmNlLmlkLFxuICAgIHN0YXRlOiBzdG9yZS5nZXRTdGF0ZSgpLFxuICB9KTtcbiAgY29uc3Qge2VsZW1lbnRJZCwgYWN0aW9uSXRlbX0gPSBpbnN0YW5jZTtcbiAgY29uc3Qge2l4RWxlbWVudHN9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uc3Qge3JlZiwgcmVmVHlwZX0gPSBpeEVsZW1lbnRzW2VsZW1lbnRJZF0gfHwge307XG4gIGlmIChyZWZUeXBlID09PSBIVE1MX0VMRU1FTlQpIHtcbiAgICBjbGVhbnVwSFRNTEVsZW1lbnQocmVmLCBhY3Rpb25JdGVtLCBlbGVtZW50QXBpKTtcbiAgfVxuICBzdG9yZS5kaXNwYXRjaChpbnN0YW5jZVJlbW92ZWQoaW5zdGFuY2UuaWQpKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hDdXN0b21FdmVudChcbiAgZWxlbWVudDogbnVsbCB8IEhUTUxFbGVtZW50LFxuICBldmVudE5hbWU6IHN0cmluZyxcbiAgZGV0YWlsOlxuICAgIHwgc3RyaW5nXG4gICAgfCB7XG4gICAgICAgIGluc3RhbmNlSWQ6IGFueTtcbiAgICAgICAgc3RhdGU6IGFueTtcbiAgICAgIH1cbikge1xuICBjb25zdCBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuICBldmVudC5pbml0Q3VzdG9tRXZlbnQoZXZlbnROYW1lLCB0cnVlLCB0cnVlLCBkZXRhaWwpO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMxODA0NyAtICdlbGVtZW50JyBpcyBwb3NzaWJseSAnbnVsbCcuXG4gIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckltbWVkaWF0ZUluc3RhbmNlKFxuICBzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlLFxuICBpbnN0YW5jZUlkOiBzdHJpbmdcbikge1xuICBjb25zdCB7aXhQYXJhbWV0ZXJzfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIHN0b3JlLmRpc3BhdGNoKGluc3RhbmNlU3RhcnRlZChpbnN0YW5jZUlkLCAwKSk7XG4gIHN0b3JlLmRpc3BhdGNoKGFuaW1hdGlvbkZyYW1lQ2hhbmdlZChwZXJmb3JtYW5jZS5ub3coKSwgaXhQYXJhbWV0ZXJzKSk7XG4gIGNvbnN0IHtpeEluc3RhbmNlc30gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBoYW5kbGVJbnN0YW5jZUNoYW5nZShpeEluc3RhbmNlc1tpbnN0YW5jZUlkXSwgc3RvcmUpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVJbnN0YW5jZUNoYW5nZShpbnN0YW5jZTogYW55LCBzdG9yZTogSVgyRW5naW5lUmVkdWNlclN0b3JlKSB7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmUsXG4gICAgY29udGludW91cyxcbiAgICBjb21wbGV0ZSxcbiAgICBlbGVtZW50SWQsXG4gICAgYWN0aW9uSXRlbSxcbiAgICBhY3Rpb25UeXBlSWQsXG4gICAgcmVuZGVyVHlwZSxcbiAgICBjdXJyZW50LFxuICAgIGdyb3VwSW5kZXgsXG4gICAgZXZlbnRJZCxcbiAgICBldmVudFRhcmdldCxcbiAgICBldmVudFN0YXRlS2V5LFxuICAgIGFjdGlvbkxpc3RJZCxcbiAgICBpc0NhcnJpZXIsXG4gICAgc3R5bGVQcm9wLFxuICAgIHZlcmJvc2UsXG4gICAgcGx1Z2luSW5zdGFuY2UsXG4gIH0gPSBpbnN0YW5jZTtcblxuICAvLyBCeXBhc3MgcmVuZGVyIGlmIGN1cnJlbnQgbWVkaWEgcXVlcnkgaXMgbm90IGxpc3RlZCBpbiBldmVudCBjb25maWdcbiAgY29uc3Qge2l4RGF0YSwgaXhTZXNzaW9ufSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IHtldmVudHN9ID0gaXhEYXRhO1xuICBjb25zdCBldmVudCA9IGV2ZW50cyAmJiBldmVudHNbZXZlbnRJZF0gPyBldmVudHNbZXZlbnRJZF0gOiB7fTtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMzOSAtICBQcm9wZXJ0eSAnbWVkaWFRdWVyaWVzJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICd7fSB8IHVuZGVmaW5lZCcuXG4gIGNvbnN0IHttZWRpYVF1ZXJpZXMgPSBpeERhdGEubWVkaWFRdWVyeUtleXN9ID0gZXZlbnQ7XG4gIGlmICghc2hvdWxkQWxsb3dNZWRpYVF1ZXJ5KG1lZGlhUXVlcmllcywgaXhTZXNzaW9uLm1lZGlhUXVlcnlLZXkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbnRpbnVvdXMgfHwgYWN0aXZlIHx8IGNvbXBsZXRlKSB7XG4gICAgaWYgKGN1cnJlbnQgfHwgKHJlbmRlclR5cGUgPT09IFJFTkRFUl9HRU5FUkFMICYmIGNvbXBsZXRlKSkge1xuICAgICAgLy8gUmVuZGVyIGN1cnJlbnQgdmFsdWVzIHRvIHJlZiBzdGF0ZSBhbmQgZ3JhYiBsYXRlc3RcbiAgICAgIHN0b3JlLmRpc3BhdGNoKFxuICAgICAgICBlbGVtZW50U3RhdGVDaGFuZ2VkKGVsZW1lbnRJZCwgYWN0aW9uVHlwZUlkLCBjdXJyZW50LCBhY3Rpb25JdGVtKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHtpeEVsZW1lbnRzfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgICBjb25zdCB7cmVmLCByZWZUeXBlLCByZWZTdGF0ZX0gPSBpeEVsZW1lbnRzW2VsZW1lbnRJZF0gfHwge307XG4gICAgICBjb25zdCBhY3Rpb25TdGF0ZSA9IHJlZlN0YXRlICYmIHJlZlN0YXRlW2FjdGlvblR5cGVJZF07XG5cbiAgICAgIC8vIFJlbmRlciBIVE1MIGFuZCBwbHVnaW4gZWxlbWVudHNcbiAgICAgIGlmIChyZWZUeXBlID09PSBIVE1MX0VMRU1FTlQgfHwgaXNQbHVnaW5UeXBlKGFjdGlvblR5cGVJZCkpIHtcbiAgICAgICAgcmVuZGVySFRNTEVsZW1lbnQoXG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHJlZiBjYW4gYmUgdW5kZWZpbmVkXG4gICAgICAgICAgcmVmLFxuICAgICAgICAgIHJlZlN0YXRlLFxuICAgICAgICAgIGFjdGlvblN0YXRlLFxuICAgICAgICAgIGV2ZW50SWQsXG4gICAgICAgICAgYWN0aW9uSXRlbSxcbiAgICAgICAgICBzdHlsZVByb3AsXG4gICAgICAgICAgZWxlbWVudEFwaSxcbiAgICAgICAgICByZW5kZXJUeXBlLFxuICAgICAgICAgIHBsdWdpbkluc3RhbmNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbXBsZXRlKSB7XG4gICAgICBpZiAoaXNDYXJyaWVyKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICd7IHN0b3JlOiBhbnk7IGV2ZW50SWQ6IGFueTsgZXZlbnRUYXJnZXQ6IGFueTsgZXZlbnRTdGF0ZUtleTogYW55OyBhY3Rpb25MaXN0SWQ6IGFueTsgZ3JvdXBJbmRleDogYW55OyB2ZXJib3NlOiBhbnk7IH0nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICd7IHN0b3JlOiBhbnk7IGV2ZW50SWQ6IGFueTsgZXZlbnRUYXJnZXQ6IGFueTsgZXZlbnRTdGF0ZUtleTogYW55OyBhY3Rpb25MaXN0SWQ6IGFueTsgZ3JvdXBJbmRleD86IG51bWJlciB8IHVuZGVmaW5lZDsgaW1tZWRpYXRlOiBhbnk7IHZlcmJvc2U6IGFueTsgfScuXG4gICAgICAgIGNvbnN0IHN0YXJ0ZWQgPSBzdGFydEFjdGlvbkdyb3VwKHtcbiAgICAgICAgICBzdG9yZSxcbiAgICAgICAgICBldmVudElkLFxuICAgICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICAgIGV2ZW50U3RhdGVLZXksXG4gICAgICAgICAgYWN0aW9uTGlzdElkLFxuICAgICAgICAgIGdyb3VwSW5kZXg6IGdyb3VwSW5kZXggKyAxLFxuICAgICAgICAgIHZlcmJvc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodmVyYm9zZSAmJiAhc3RhcnRlZCkge1xuICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgYWN0aW9uTGlzdFBsYXliYWNrQ2hhbmdlZCh7YWN0aW9uTGlzdElkLCBpc1BsYXlpbmc6IGZhbHNlfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlbW92ZUluc3RhbmNlKGluc3RhbmNlLCBzdG9yZSk7XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOlsib2JzZXJ2ZVJlcXVlc3RzIiwic3RhcnRBY3Rpb25Hcm91cCIsInN0YXJ0RW5naW5lIiwic3RvcEFjdGlvbkdyb3VwIiwic3RvcEFsbEFjdGlvbkdyb3VwcyIsInN0b3BFbmdpbmUiLCJRdWlja0VmZmVjdHNJZExpc3QiLCJPYmplY3QiLCJrZXlzIiwiUXVpY2tFZmZlY3RJZHMiLCJpc1F1aWNrRWZmZWN0IiwiYWN0aW9uVHlwZUlkIiwiaW5jbHVkZXMiLCJDT0xPTl9ERUxJTUlURVIiLCJCT1VOREFSWV9TRUxFQ1RPUiIsIkhUTUxfRUxFTUVOVCIsIlJFTkRFUl9HRU5FUkFMIiwiV19NT0RfSVgiLCJJWDJFbmdpbmVDb25zdGFudHMiLCJnZXRBZmZlY3RlZEVsZW1lbnRzIiwiZ2V0RWxlbWVudElkIiwiZ2V0RGVzdGluYXRpb25WYWx1ZXMiLCJvYnNlcnZlU3RvcmUiLCJnZXRJbnN0YW5jZUlkIiwicmVuZGVySFRNTEVsZW1lbnQiLCJjbGVhckFsbFN0eWxlcyIsImdldE1heER1cmF0aW9uSXRlbUluZGV4IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImdldEluc3RhbmNlT3JpZ2luIiwicmVkdWNlTGlzdFRvR3JvdXAiLCJzaG91bGROYW1lc3BhY2VFdmVudFBhcmFtZXRlciIsImdldE5hbWVzcGFjZWRQYXJhbWV0ZXJJZCIsInNob3VsZEFsbG93TWVkaWFRdWVyeSIsImNsZWFudXBIVE1MRWxlbWVudCIsImNsZWFyT2JqZWN0Q2FjaGUiLCJzdHJpbmdpZnlUYXJnZXQiLCJtZWRpYVF1ZXJpZXNFcXVhbCIsInNoYWxsb3dFcXVhbCIsIklYMlZhbmlsbGFVdGlscyIsImlzUGx1Z2luVHlwZSIsImNyZWF0ZVBsdWdpbkluc3RhbmNlIiwiZ2V0UGx1Z2luRHVyYXRpb24iLCJJWDJWYW5pbGxhUGx1Z2lucyIsInVhIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiSVNfTU9CSUxFX1NBRkFSSSIsIm1hdGNoIiwiVEhST1RUTEVEX0VWRU5UX1dBSVQiLCJzdG9yZSIsInNlbGVjdCIsIml4UmVxdWVzdCIsInByZXZpZXciLCJvbkNoYW5nZSIsImhhbmRsZVByZXZpZXdSZXF1ZXN0IiwicGxheWJhY2siLCJoYW5kbGVQbGF5YmFja1JlcXVlc3QiLCJzdG9wIiwiaGFuZGxlU3RvcFJlcXVlc3QiLCJjbGVhciIsImhhbmRsZUNsZWFyUmVxdWVzdCIsIm9ic2VydmVNZWRpYVF1ZXJ5Q2hhbmdlIiwiaXhTZXNzaW9uIiwibWVkaWFRdWVyeUtleSIsImVsZW1lbnRBcGkiLCJhbGxvd0V2ZW50cyIsImRpc3BhdGNoUGFnZVVwZGF0ZUV2ZW50Iiwib2JzZXJ2ZU9uZVJlbmRlclRpY2siLCJvblRpY2siLCJ1bnN1YnNjcmliZSIsInRpY2siLCJyYXdEYXRhIiwiZGVmZXIiLCJzdGFydCIsInNldFRpbWVvdXQiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImFjdGlvbkxpc3RJZCIsImFjdGlvbkl0ZW1JZCIsImV2ZW50SWQiLCJpbW1lZGlhdGUiLCJ0ZXN0TWFudWFsIiwidmVyYm9zZSIsImFjdGlvbkxpc3QiLCJhY3Rpb25MaXN0cyIsIkFjdGlvblR5cGVDb25zdHMiLCJHRU5FUkFMX1NUQVJUX0FDVElPTiIsInJlbmRlckluaXRpYWxHcm91cCIsInN0YXJ0ZWQiLCJkaXNwYXRjaCIsImFjdGlvbkxpc3RQbGF5YmFja0NoYW5nZWQiLCJpc1BsYXlpbmciLCJzdGF0ZSIsImdldFN0YXRlIiwicmF3RGF0YUltcG9ydGVkIiwiYWN0aXZlIiwic2Vzc2lvbkluaXRpYWxpemVkIiwiaGFzQm91bmRhcnlOb2RlcyIsIkJvb2xlYW4iLCJxdWVyeVNlbGVjdG9yIiwicmVkdWNlZE1vdGlvbiIsImJvZHkiLCJoYXNBdHRyaWJ1dGUiLCJ3aW5kb3ciLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsImJpbmRFdmVudHMiLCJhZGREb2N1bWVudENsYXNzIiwiaGFzRGVmaW5lZE1lZGlhUXVlcmllcyIsInNlc3Npb25TdGFydGVkIiwic3RhcnRSZW5kZXJMb29wIiwiZG9jdW1lbnRFbGVtZW50IiwiY2xhc3NOYW1lIiwiaW5kZXhPZiIsImhhbmRsZUZyYW1lIiwibm93IiwiaXhQYXJhbWV0ZXJzIiwiYW5pbWF0aW9uRnJhbWVDaGFuZ2VkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicGVyZm9ybWFuY2UiLCJldmVudExpc3RlbmVycyIsImZvckVhY2giLCJjbGVhckV2ZW50TGlzdGVuZXIiLCJzZXNzaW9uU3RvcHBlZCIsInRhcmdldCIsImxpc3RlbmVyUGFyYW1zIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImFwcGx5IiwiY3JlYXRlR3JvdXBJbnN0YW5jZXMiLCJldmVudFN0YXRlS2V5IiwiZXZlbnRUYXJnZXQiLCJldmVudENvbmZpZyIsInBhcmFtZXRlckdyb3VwIiwic21vb3RoaW5nIiwicmVzdGluZ1ZhbHVlIiwiaXhEYXRhIiwiZXZlbnRzIiwiZXZlbnQiLCJldmVudFR5cGVJZCIsInRhcmdldENhY2hlIiwiaW5zdGFuY2VBY3Rpb25Hcm91cHMiLCJpbnN0YW5jZUNvbmZpZ3MiLCJjb250aW51b3VzQWN0aW9uR3JvdXBzIiwiaWQiLCJwYXJhbWV0ZXJJZCIsImV2ZW50RWxlbWVudFJvb3QiLCJnZXRDbG9zZXN0RWxlbWVudCIsImFjdGlvbkdyb3VwIiwia2V5ZnJhbWUiLCJhY3Rpb25JdGVtcyIsImFjdGlvbkl0ZW0iLCJjb25maWciLCJlbGVtZW50Um9vdCIsImJvdW5kYXJ5TW9kZSIsImtleSIsImFwcGVuZEFjdGlvbkl0ZW0iLCJlbGVtZW50IiwicHVzaCIsImFjdGlvbkdyb3VwcyIsImdldCIsInNob3VsZFVzZVBsdWdpbiIsIlBMVUdJTl9SSVZFIiwic2VsZWN0b3JHdWlkcyIsImxlbmd0aCIsInBsdWdpbkluc3RhbmNlIiwiZGVzdGluYXRpb24iLCJjcmVhdGVJbnN0YW5jZSIsImNvbnRpbnVvdXMiLCJuZXdBY3Rpb25Hcm91cHMiLCJncm91cEluZGV4Iiwic29tZSIsImdyb3VwIiwiaW5kZXgiLCJldmVudFR5cGVNYXAiLCJ1cGRhdGVWaWV3cG9ydFdpZHRoIiwibG9naWMiLCJJWDJWYW5pbGxhRXZlbnRzIiwiY29uc29sZSIsIndhcm4iLCJiaW5kRXZlbnRUeXBlIiwiYmluZFJlc2l6ZUV2ZW50cyIsIldJTkRPV19SRVNJWkVfRVZFTlRTIiwiaGFuZGxlUmVzaXplIiwidHlwZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudExpc3RlbmVyQWRkZWQiLCJ3aWR0aCIsImlubmVyV2lkdGgiLCJ2aWV3cG9ydFdpZHRoIiwibWVkaWFRdWVyaWVzIiwidmlld3BvcnRXaWR0aENoYW5nZWQiLCJtYXBGb3VuZFZhbHVlcyIsIm9iamVjdCIsIml0ZXJhdGVlIiwib21pdEJ5IiwibWFwVmFsdWVzIiwiaXNFbXB0eSIsImZvckVhY2hFdmVudFRhcmdldCIsImV2ZW50VGFyZ2V0cyIsImV2ZW50Q2FsbGJhY2siLCJlbGVtZW50cyIsImdldEFmZmVjdGVkRm9yRXZlbnQiLCJ0YXJnZXRzIiwiaW5qZWN0QmVoYXZpb3JDU1NGaXhlcyIsInR5cGVzIiwiZXZlbnRUeXBlcyIsImhhbmRsZXIiLCJldmVudEhhbmRsZXIiLCJzaXplIiwiYWN0aW9uIiwiZXZlbnRBY3Rpb24iLCJtZWRpYVF1ZXJ5S2V5cyIsIm1lZGlhUXVlcmllc0RlZmluZWQiLCJHRU5FUkFMX0NPTlRJTlVPVVNfQUNUSU9OIiwiY29uZmlncyIsIkFycmF5IiwiaXNBcnJheSIsImNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkIiwicGFyYW1Hcm91cHMiLCJmaW5kIiwicmVzdGluZ1N0YXRlIiwiaGFuZGxlRXZlbnQiLCJuYXRpdmVFdmVudCIsIm9sZFN0YXRlIiwiZXZlbnRTdGF0ZSIsImhhbmRsZUV2ZW50V2l0aENvbmZpZyIsIm5ld1N0YXRlIiwiZXZlbnRTdGF0ZUNoYW5nZWQiLCJoYW5kbGVFdmVudFRocm90dGxlZCIsInRocm90dGxlIiwiYWRkTGlzdGVuZXJzIiwic2hvdWxkVGhyb3R0bGUiLCJzcGxpdCIsImZpbHRlciIsImhhbmRsZXJGdW5jIiwiaW5qZWN0ZWRTZWxlY3RvcnMiLCJjc3NUZXh0Iiwic2VsZWN0b3IiLCJnZXRRdWVyeVNlbGVjdG9yIiwiRXZlbnRUeXBlQ29uc3RzIiwiTU9VU0VfQ0xJQ0siLCJNT1VTRV9TRUNPTkRfQ0xJQ0siLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJ0ZXh0Q29udGVudCIsImFwcGVuZENoaWxkIiwidXNlRmlyc3RHcm91cEFzSW5pdGlhbFN0YXRlIiwiaW5pdGlhbFN0YXRlSXRlbXMiLCJpdGVtQ29uZmlnIiwidXNlRXZlbnRUYXJnZXQiLCJvYmplY3RJZCIsIml0ZW1FbGVtZW50cyIsIml4SW5zdGFuY2VzIiwiaW5zdGFuY2UiLCJyZW1vdmVJbnN0YW5jZSIsInZhbGlkRXZlbnRLZXkiLCJlbGVtZW50Q29udGFpbnMiLCJhY3Rpb25JdGVtR3JvdXBzIiwiaXNGaXJzdEdyb3VwIiwiaW5zdGFuY2VEZWxheSIsImRlbGF5IiwidW5kZWZpbmVkIiwiY2FycmllckluZGV4IiwiZ3JvdXBTdGFydFJlc3VsdCIsImFjdGlvbkluZGV4IiwiZWxlbWVudEluZGV4IiwicGx1Z2luRHVyYXRpb24iLCJpc0NhcnJpZXIiLCJjb21wdXRlZFN0eWxlIiwib3B0aW9ucyIsInJlc3QiLCJhdXRvU3RhcnQiLCJpbnN0YW5jZUlkIiwiaXhFbGVtZW50cyIsImVsZW1lbnRJZCIsInJlZlN0YXRlIiwicmVmVHlwZSIsImdldFJlZlR5cGUiLCJza2lwTW90aW9uIiwiUmVkdWNlZE1vdGlvblR5cGVzIiwic2tpcFRvVmFsdWUiLCJNT1VTRV9NT1ZFIiwiTU9VU0VfTU9WRV9JTl9WSUVXUE9SVCIsIm9yaWdpbiIsImluc3RhbmNlQWRkZWQiLCJkaXNwYXRjaEN1c3RvbUV2ZW50IiwicmVuZGVySW1tZWRpYXRlSW5zdGFuY2UiLCJoYW5kbGVJbnN0YW5jZUNoYW5nZSIsImluc3RhbmNlU3RhcnRlZCIsInJlZiIsImluc3RhbmNlUmVtb3ZlZCIsImV2ZW50TmFtZSIsImRldGFpbCIsImNyZWF0ZUV2ZW50IiwiaW5pdEN1c3RvbUV2ZW50IiwiY29tcGxldGUiLCJyZW5kZXJUeXBlIiwiY3VycmVudCIsInN0eWxlUHJvcCIsImVsZW1lbnRTdGF0ZUNoYW5nZWQiLCJhY3Rpb25TdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUF3RmdCQSxlQUFlO2VBQWZBOztJQW13QkFDLGdCQUFnQjtlQUFoQkE7O0lBcm1CQUMsV0FBVztlQUFYQTs7SUFnakJBQyxlQUFlO2VBQWZBOztJQWZBQyxtQkFBbUI7ZUFBbkJBOztJQXRlQUMsVUFBVTtlQUFWQTs7OzZEQWpUQzs0REFDRDs2REFDQzsrREFDRTtnRUFDQztrRUFDRTtnRUFDRjtpRUFDQztpQ0FPZDt3QkFPMEM7a0NBa0QxQzt1RUFFcUI7eUVBRUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBM0Q3QixNQUFNQyxxQkFBcUJDLE9BQU9DLElBQUksQ0FBQ0MsK0JBQWM7QUFFckQsTUFBTUMsZ0JBQWdCLENBQUNDLGVBQ3JCTCxtQkFBbUJNLFFBQVEsQ0FBQ0Q7QUFJOUIsTUFBTSxFQUNKRSxlQUFlLEVBQ2ZDLGlCQUFpQixFQUNqQkMsWUFBWSxFQUNaQyxjQUFjLEVBQ2RDLFFBQVEsRUFDVCxHQUFHQyxtQ0FBa0I7QUFFdEIsTUFBTSxFQUNKQyxtQkFBbUIsRUFDbkJDLFlBQVksRUFDWkMsb0JBQW9CLEVBQ3BCQyxZQUFZLEVBQ1pDLGFBQWEsRUFDYkMsaUJBQWlCLEVBQ2pCQyxjQUFjLEVBQ2RDLHVCQUF1QixFQUN2QkMsZ0JBQWdCLEVBQ2hCQyxpQkFBaUIsRUFDakJDLGlCQUFpQixFQUNqQkMsNkJBQTZCLEVBQzdCQyx3QkFBd0IsRUFDeEJDLHFCQUFxQixFQUNyQkMsa0JBQWtCLEVBQ2xCQyxnQkFBZ0IsRUFDaEJDLGVBQWUsRUFDZkMsaUJBQWlCLEVBQ2pCQyxZQUFZLEVBQ2IsR0FBR0MsdUJBQWU7QUFDbkIsTUFBTSxFQUFDQyxZQUFZLEVBQUVDLG9CQUFvQixFQUFFQyxp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 }), 8955: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "default", ({ enumerable: true, get: function() { return _default; } })); const _flow = /*#__PURE__*/ _interop_require_default(__webpack_require__(5801)); const _get = /*#__PURE__*/ _interop_require_default(__webpack_require__(4738)); const _clamp = /*#__PURE__*/ _interop_require_default(__webpack_require__(3789)); const _sharedconstants = __webpack_require__(7087); const _IX2VanillaEngine = __webpack_require__(1970); const _IX2EngineActions = __webpack_require__(3946); const _shared = __webpack_require__(9468); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const { MOUSE_CLICK, MOUSE_SECOND_CLICK, MOUSE_DOWN, MOUSE_UP, MOUSE_OVER, MOUSE_OUT, DROPDOWN_CLOSE, DROPDOWN_OPEN, SLIDER_ACTIVE, SLIDER_INACTIVE, TAB_ACTIVE, TAB_INACTIVE, NAVBAR_CLOSE, NAVBAR_OPEN, MOUSE_MOVE, PAGE_SCROLL_DOWN, SCROLL_INTO_VIEW, SCROLL_OUT_OF_VIEW, PAGE_SCROLL_UP, SCROLLING_IN_VIEW, PAGE_FINISH, ECOMMERCE_CART_CLOSE, ECOMMERCE_CART_OPEN, PAGE_START, PAGE_SCROLL } = _sharedconstants.EventTypeConsts; const COMPONENT_ACTIVE = 'COMPONENT_ACTIVE'; const COMPONENT_INACTIVE = 'COMPONENT_INACTIVE'; const { COLON_DELIMITER } = _sharedconstants.IX2EngineConstants; const { getNamespacedParameterId } = _shared.IX2VanillaUtils; const composableFilter = (predicate)=>(options)=>{ if (typeof options === 'object' && predicate(options)) { return true; } return options; }; const isElement = composableFilter(({ element, nativeEvent })=>{ return element === nativeEvent.target; }); const containsElement = composableFilter(({ element, nativeEvent })=>{ return element.contains(nativeEvent.target); }); const isOrContainsElement = (0, _flow.default)([ isElement, containsElement ]); const getAutoStopEvent = (store, autoStopEventId)=>{ if (autoStopEventId) { const { ixData } = store.getState(); const { events } = ixData; const eventToStop = events[autoStopEventId]; // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ readonly PAGE_START: "PAGE_START"; readonly PAGE_FINISH: "PAGE_FINISH"; }'. if (eventToStop && !AUTO_STOP_DISABLED_EVENTS[eventToStop.eventTypeId]) { return eventToStop; } } return null; }; // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type. | TS7031 - Binding element 'event' implicitly has an 'any' type. const hasAutoStopEvent = ({ store, event })=>{ const { action: eventAction } = event; const { autoStopEventId } = eventAction.config; return Boolean(getAutoStopEvent(store, autoStopEventId)); }; // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type. | TS7031 - Binding element 'event' implicitly has an 'any' type. | TS7031 - Binding element 'element' implicitly has an 'any' type. | TS7031 - Binding element 'eventStateKey' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type. const actionGroupCreator = ({ store, event, element, eventStateKey }, state)=>{ const { action: eventAction, id: eventId } = event; const { actionListId, autoStopEventId } = eventAction.config; const eventToStop = getAutoStopEvent(store, autoStopEventId); if (eventToStop) { (0, _IX2VanillaEngine.stopActionGroup)({ store, eventId: autoStopEventId, eventTarget: element, eventStateKey: autoStopEventId + COLON_DELIMITER + eventStateKey.split(COLON_DELIMITER)[1], actionListId: (0, _get.default)(eventToStop, 'action.config.actionListId') }); } (0, _IX2VanillaEngine.stopActionGroup)({ store, eventId, eventTarget: element, eventStateKey, actionListId }); // @ts-expect-error - TS2345 - Argument of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; }' is not assignable to parameter of type '{ store: any; eventId: any; eventTarget: any; eventStateKey: any; actionListId: any; groupIndex?: number | undefined; immediate: any; verbose: any; }'. (0, _IX2VanillaEngine.startActionGroup)({ store, eventId, eventTarget: element, eventStateKey, actionListId }); return state; }; // @ts-expect-error - TS7006 - Parameter 'filter' implicitly has an 'any' type. | TS7006 - Parameter 'handler' implicitly has an 'any' type. const withFilter = (filter, handler)=>(options, state)=>filter(options, state) === true ? handler(options, state) : state; const baseActionGroupOptions = { handler: withFilter(isOrContainsElement, actionGroupCreator) }; const baseActivityActionGroupOptions = { ...baseActionGroupOptions, types: [ COMPONENT_ACTIVE, COMPONENT_INACTIVE ].join(' ') }; const SCROLL_EVENT_TYPES = [ { target: window, types: 'resize orientationchange', throttle: true }, { target: document, types: 'scroll wheel readystatechange IX2_PAGE_UPDATE', throttle: true } ]; const MOUSE_OVER_OUT_TYPES = 'mouseover mouseout'; const baseScrollActionGroupOptions = { types: SCROLL_EVENT_TYPES }; const AUTO_STOP_DISABLED_EVENTS = { PAGE_START, PAGE_FINISH }; const getDocumentState = (()=>{ const supportOffset = window.pageXOffset !== undefined; const isCSS1Compat = document.compatMode === 'CSS1Compat'; const rootElement = isCSS1Compat ? document.documentElement : document.body; return ()=>({ scrollLeft: supportOffset ? window.pageXOffset : rootElement.scrollLeft, scrollTop: supportOffset ? window.pageYOffset : rootElement.scrollTop, // required to remove elasticity in Safari scrolling. stiffScrollTop: (0, _clamp.default)(supportOffset ? window.pageYOffset : rootElement.scrollTop, 0, rootElement.scrollHeight - window.innerHeight), scrollWidth: rootElement.scrollWidth, scrollHeight: rootElement.scrollHeight, clientWidth: rootElement.clientWidth, clientHeight: rootElement.clientHeight, innerWidth: window.innerWidth, innerHeight: window.innerHeight }); })(); const areBoxesIntersecting = (a, b)=>!(a.left > b.right || a.right < b.left || a.top > b.bottom || a.bottom < b.top); // @ts-expect-error - TS7031 - Binding element 'element' implicitly has an 'any' type. | TS7031 - Binding element 'nativeEvent' implicitly has an 'any' type. const isElementHovered = ({ element, nativeEvent })=>{ const { type, target, relatedTarget } = nativeEvent; const containsTarget = element.contains(target); if (type === 'mouseover' && containsTarget) { return true; } const containsRelated = element.contains(relatedTarget); if (type === 'mouseout' && containsTarget && containsRelated) { return true; } return false; }; const isElementVisible = (options)=>{ const { element, event: { config } } = options; const { clientWidth, clientHeight } = getDocumentState(); const scrollOffsetValue = config.scrollOffsetValue; const scrollOffsetUnit = config.scrollOffsetUnit; const isPX = scrollOffsetUnit === 'PX'; const offsetPadding = isPX ? scrollOffsetValue : clientHeight * (scrollOffsetValue || 0) / 100; return areBoxesIntersecting(element.getBoundingClientRect(), { left: 0, top: offsetPadding, right: clientWidth, bottom: clientHeight - offsetPadding }); }; const whenComponentActiveChange = // @ts-expect-error - TS7006 - Parameter 'handler' implicitly has an 'any' type. (handler)=>(options, oldState)=>{ const { type } = options.nativeEvent; // prettier-ignore const isActive = [ COMPONENT_ACTIVE, COMPONENT_INACTIVE ].indexOf(type) !== -1 ? type === COMPONENT_ACTIVE : oldState.isActive; const newState = { ...oldState, isActive }; if (!oldState || newState.isActive !== oldState.isActive) { return handler(options, newState) || newState; } return newState; }; const whenElementHoverChange = (handler)=>(options, oldState)=>{ const newState = { elementHovered: isElementHovered(options) }; if (oldState ? newState.elementHovered !== oldState.elementHovered : newState.elementHovered) { // @ts-expect-error - TS1345 - An expression of type 'void' cannot be tested for truthiness. return handler(options, newState) || newState; } return newState; }; const whenElementVisibiltyChange = (handler)=>(options, oldState)=>{ const newState = { ...oldState, elementVisible: isElementVisible(options) }; if (oldState ? newState.elementVisible !== oldState.elementVisible : newState.elementVisible) { return handler(options, newState) || newState; } return newState; }; const whenScrollDirectionChange = // @ts-expect-error - TS7006 - Parameter 'handler' implicitly has an 'any' type. (handler)=>(options, oldState = {})=>{ const { stiffScrollTop: scrollTop, scrollHeight, innerHeight } = getDocumentState(); const { event: { config, eventTypeId } } = options; const { scrollOffsetValue, scrollOffsetUnit } = config; const isPX = scrollOffsetUnit === 'PX'; const scrollHeightBounds = scrollHeight - innerHeight; // percent top since innerHeight may change for mobile devices which also changes the scrollTop value. const percentTop = Number((scrollTop / scrollHeightBounds).toFixed(2)); // no state change // @ts-expect-error - TS2339 - Property 'percentTop' does not exist on type '{}'. if (oldState && oldState.percentTop === percentTop) { return oldState; } const scrollTopPadding = (isPX ? scrollOffsetValue : innerHeight * (scrollOffsetValue || 0) / 100) / scrollHeightBounds; let scrollingDown; let scrollDirectionChanged; let anchorTop = 0; if (oldState) { // @ts-expect-error - TS2339 - Property 'percentTop' does not exist on type '{}'. scrollingDown = percentTop > oldState.percentTop; // @ts-expect-error - TS2339 - Property 'scrollingDown' does not exist on type '{}'. scrollDirectionChanged = oldState.scrollingDown !== scrollingDown; // @ts-expect-error - TS2339 - Property 'anchorTop' does not exist on type '{}'. anchorTop = scrollDirectionChanged ? percentTop : oldState.anchorTop; } const inBounds = eventTypeId === PAGE_SCROLL_DOWN ? percentTop >= anchorTop + scrollTopPadding : percentTop <= anchorTop - scrollTopPadding; const newState = { ...oldState, percentTop, inBounds, anchorTop, scrollingDown }; if (oldState && inBounds && // @ts-expect-error - TS2339 - Property 'inBounds' does not exist on type '{}'. (scrollDirectionChanged || newState.inBounds !== oldState.inBounds)) { return handler(options, newState) || newState; } return newState; }; const pointIntersects = (point, rect)=>point.left > rect.left && point.left < rect.right && point.top > rect.top && point.top < rect.bottom; const whenPageLoadFinish = (handler)=>(options, oldState)=>{ const newState = { finished: document.readyState === 'complete' }; if (newState.finished && !(oldState && oldState.finshed)) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. handler(options); } return newState; }; const whenPageLoadStart = (handler)=>(options, oldState)=>{ const newState = { started: true }; if (!oldState) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. handler(options); } return newState; }; const whenClickCountChange = (handler)=>(options, oldState = { clickCount: 0 })=>{ const newState = { clickCount: oldState.clickCount % 2 + 1 }; if (newState.clickCount !== oldState.clickCount) { // @ts-expect-error - TS1345 - An expression of type 'void' cannot be tested for truthiness. return handler(options, newState) || newState; } return newState; }; const getComponentActiveOptions = (allowNestedChildrenEvents = true)=>({ ...baseActivityActionGroupOptions, handler: withFilter(allowNestedChildrenEvents ? isOrContainsElement : isElement, // @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type. whenComponentActiveChange((options, state)=>{ return state.isActive ? baseActionGroupOptions.handler(options, state) : state; })) }); const getComponentInactiveOptions = (allowNestedChildrenEvents = true)=>({ ...baseActivityActionGroupOptions, handler: withFilter(allowNestedChildrenEvents ? isOrContainsElement : isElement, // @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type. whenComponentActiveChange((options, state)=>{ return !state.isActive ? baseActionGroupOptions.handler(options, state) : state; })) }); const scrollIntoOutOfViewOptions = { ...baseScrollActionGroupOptions, handler: whenElementVisibiltyChange((options, state)=>{ const { elementVisible } = state; const { event, store } = options; const { ixData } = store.getState(); const { events } = ixData; // trigger the handler only once if only one of SCROLL_INTO or SCROLL_OUT_OF event types // are registered. if (!events[event.action.config.autoStopEventId] && state.triggered) { return state; } if (event.eventTypeId === SCROLL_INTO_VIEW === elementVisible) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. actionGroupCreator(options); return { ...state, triggered: true }; } else { return state; } }) }; const MOUSE_OUT_ROUND_THRESHOLD = 0.05; const _default = { [SLIDER_ACTIVE]: getComponentActiveOptions(), [SLIDER_INACTIVE]: getComponentInactiveOptions(), [DROPDOWN_OPEN]: getComponentActiveOptions(), [DROPDOWN_CLOSE]: getComponentInactiveOptions(), // navbar elements may contain nested components in the menu. To prevent activity misfires, only listed for activity // events where the target is the navbar element, and ignore children that dispatch activitiy events. [NAVBAR_OPEN]: getComponentActiveOptions(false), [NAVBAR_CLOSE]: getComponentInactiveOptions(false), [TAB_ACTIVE]: getComponentActiveOptions(), [TAB_INACTIVE]: getComponentInactiveOptions(), [ECOMMERCE_CART_OPEN]: { types: 'ecommerce-cart-open', handler: withFilter(isOrContainsElement, actionGroupCreator) }, [ECOMMERCE_CART_CLOSE]: { types: 'ecommerce-cart-close', handler: withFilter(isOrContainsElement, actionGroupCreator) }, [MOUSE_CLICK]: { types: 'click', handler: withFilter(isOrContainsElement, whenClickCountChange((options, { clickCount })=>{ if (hasAutoStopEvent(options)) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. clickCount === 1 && actionGroupCreator(options); } else { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. actionGroupCreator(options); } })) }, [MOUSE_SECOND_CLICK]: { types: 'click', handler: withFilter(isOrContainsElement, whenClickCountChange((options, { clickCount })=>{ if (clickCount === 2) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. actionGroupCreator(options); } })) }, [MOUSE_DOWN]: { ...baseActionGroupOptions, types: 'mousedown' }, [MOUSE_UP]: { ...baseActionGroupOptions, types: 'mouseup' }, [MOUSE_OVER]: { types: MOUSE_OVER_OUT_TYPES, handler: withFilter(isOrContainsElement, whenElementHoverChange((options, state)=>{ if (state.elementHovered) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. actionGroupCreator(options); } })) }, [MOUSE_OUT]: { types: MOUSE_OVER_OUT_TYPES, handler: withFilter(isOrContainsElement, whenElementHoverChange((options, state)=>{ if (!state.elementHovered) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. actionGroupCreator(options); } })) }, [MOUSE_MOVE]: { types: 'mousemove mouseout scroll', handler: (// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error { store, element, eventConfig, nativeEvent, eventStateKey }, state = { clientX: 0, clientY: 0, pageX: 0, pageY: 0 })=>{ const { basedOn, selectedAxis, continuousParameterGroupId, reverse, restingState = 0 } = eventConfig; const { clientX = state.clientX, clientY = state.clientY, pageX = state.pageX, pageY = state.pageY } = nativeEvent; const isXAxis = selectedAxis === 'X_AXIS'; const isMouseOut = nativeEvent.type === 'mouseout'; let value = restingState / 100; let namespacedParameterId = continuousParameterGroupId; let elementHovered = false; switch(basedOn){ case _sharedconstants.EventBasedOn.VIEWPORT: { value = isXAxis ? Math.min(clientX, window.innerWidth) / window.innerWidth : Math.min(clientY, window.innerHeight) / window.innerHeight; break; } // @ts-expect-error - TS2339 - Property 'PAGE' does not exist on type '{ readonly ELEMENT: "ELEMENT"; readonly VIEWPORT: "VIEWPORT"; }'. case _sharedconstants.EventBasedOn.PAGE: { const { scrollLeft, scrollTop, scrollWidth, scrollHeight } = getDocumentState(); value = isXAxis ? Math.min(scrollLeft + pageX, scrollWidth) / scrollWidth : Math.min(scrollTop + pageY, scrollHeight) / scrollHeight; break; } case _sharedconstants.EventBasedOn.ELEMENT: default: { namespacedParameterId = getNamespacedParameterId(eventStateKey, continuousParameterGroupId); const isMouseEvent = nativeEvent.type.indexOf('mouse') === 0; // Use isOrContainsElement for mouse events since they are fired from the target if (isMouseEvent && isOrContainsElement({ element, nativeEvent }) !== true) { break; } const rect = element.getBoundingClientRect(); const { left, top, width, height } = rect; // Otherwise we'll need to calculate the mouse position from the previous handler state // against the target element's rect if (!isMouseEvent && !pointIntersects({ left: clientX, top: clientY }, rect)) { break; } elementHovered = true; value = isXAxis ? (clientX - left) / width : (clientY - top) / height; break; } } // cover case where the event is a mouse out, but the value is not quite at 100% if (isMouseOut && (value > 1 - MOUSE_OUT_ROUND_THRESHOLD || value < MOUSE_OUT_ROUND_THRESHOLD)) { value = Math.round(value); } // Only update based on element if the mouse is moving over or has just left the element if (basedOn !== _sharedconstants.EventBasedOn.ELEMENT || elementHovered || // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error elementHovered !== state.elementHovered) { value = reverse ? 1 - value : value; store.dispatch((0, _IX2EngineActions.parameterChanged)(namespacedParameterId, value)); } return { elementHovered, clientX, clientY, pageX, pageY }; } }, [PAGE_SCROLL]: { types: SCROLL_EVENT_TYPES, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error handler: ({ store, eventConfig })=>{ const { continuousParameterGroupId, reverse } = eventConfig; const { scrollTop, scrollHeight, clientHeight } = getDocumentState(); let value = scrollTop / (scrollHeight - clientHeight); value = reverse ? 1 - value : value; store.dispatch((0, _IX2EngineActions.parameterChanged)(continuousParameterGroupId, value)); } }, [SCROLLING_IN_VIEW]: { types: SCROLL_EVENT_TYPES, handler: (// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error { element, store, eventConfig, eventStateKey }, state = { scrollPercent: 0 })=>{ const { scrollLeft, scrollTop, scrollWidth, scrollHeight, clientHeight: visibleHeight } = getDocumentState(); const { basedOn, selectedAxis, continuousParameterGroupId, startsEntering, startsExiting, addEndOffset, addStartOffset, addOffsetValue = 0, endOffsetValue = 0 } = eventConfig; const isXAxis = selectedAxis === 'X_AXIS'; if (basedOn === _sharedconstants.EventBasedOn.VIEWPORT) { const value = isXAxis ? scrollLeft / scrollWidth : scrollTop / scrollHeight; if (value !== state.scrollPercent) { store.dispatch((0, _IX2EngineActions.parameterChanged)(continuousParameterGroupId, value)); } return { scrollPercent: value }; } else { const namespacedParameterId = getNamespacedParameterId(eventStateKey, continuousParameterGroupId); const elementRect = element.getBoundingClientRect(); let offsetStartPerc = (addStartOffset ? addOffsetValue : 0) / 100; let offsetEndPerc = (addEndOffset ? endOffsetValue : 0) / 100; // flip the offset percentages depending on start / exit type offsetStartPerc = startsEntering ? offsetStartPerc : 1 - offsetStartPerc; offsetEndPerc = startsExiting ? offsetEndPerc : 1 - offsetEndPerc; const offsetElementTop = elementRect.top + Math.min(elementRect.height * offsetStartPerc, visibleHeight); const offsetElementBottom = elementRect.top + elementRect.height * offsetEndPerc; const offsetHeight = offsetElementBottom - offsetElementTop; const fixedScrollHeight = Math.min(visibleHeight + offsetHeight, scrollHeight); const fixedScrollTop = Math.min(Math.max(0, visibleHeight - offsetElementTop), fixedScrollHeight); const fixedScrollPerc = fixedScrollTop / fixedScrollHeight; if (fixedScrollPerc !== state.scrollPercent) { store.dispatch((0, _IX2EngineActions.parameterChanged)(namespacedParameterId, fixedScrollPerc)); } return { scrollPercent: fixedScrollPerc }; } } }, [SCROLL_INTO_VIEW]: scrollIntoOutOfViewOptions, [SCROLL_OUT_OF_VIEW]: scrollIntoOutOfViewOptions, [PAGE_SCROLL_DOWN]: { ...baseScrollActionGroupOptions, // @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type. handler: whenScrollDirectionChange((options, state)=>{ if (state.scrollingDown) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. actionGroupCreator(options); } }) }, [PAGE_SCROLL_UP]: { ...baseScrollActionGroupOptions, // @ts-expect-error - TS7006 - Parameter 'options' implicitly has an 'any' type. | TS7006 - Parameter 'state' implicitly has an 'any' type. handler: whenScrollDirectionChange((options, state)=>{ if (!state.scrollingDown) { // @ts-expect-error - TS2554 - Expected 2 arguments, but got 1. actionGroupCreator(options); } }) }, [PAGE_FINISH]: { types: 'readystatechange IX2_PAGE_UPDATE', handler: withFilter(isElement, whenPageLoadFinish(actionGroupCreator)) }, [PAGE_START]: { types: 'readystatechange IX2_PAGE_UPDATE', handler: withFilter(isElement, whenPageLoadStart(actionGroupCreator)) } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZS9sb2dpYy9JWDJWYW5pbGxhRXZlbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmbG93IGZyb20gJ2xvZGFzaC9mbG93JztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgY2xhbXAgZnJvbSAnbG9kYXNoL2NsYW1wJztcblxuaW1wb3J0IHtcbiAgRXZlbnRUeXBlQ29uc3RzLFxuICBFdmVudEJhc2VkT24sXG4gIElYMkVuZ2luZUNvbnN0YW50cyxcbn0gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC1jb25zdGFudHMnO1xuXG5pbXBvcnQge3N0b3BBY3Rpb25Hcm91cCwgc3RhcnRBY3Rpb25Hcm91cH0gZnJvbSAnLi9JWDJWYW5pbGxhRW5naW5lJztcbmltcG9ydCB7cGFyYW1ldGVyQ2hhbmdlZH0gZnJvbSAnLi4vYWN0aW9ucy9JWDJFbmdpbmVBY3Rpb25zJztcbmltcG9ydCB7SVgyVmFuaWxsYVV0aWxzfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkJztcblxuY29uc3Qge1xuICBNT1VTRV9DTElDSyxcbiAgTU9VU0VfU0VDT05EX0NMSUNLLFxuICBNT1VTRV9ET1dOLFxuICBNT1VTRV9VUCxcbiAgTU9VU0VfT1ZFUixcbiAgTU9VU0VfT1VULFxuICBEUk9QRE9XTl9DTE9TRSxcbiAgRFJPUERPV05fT1BFTixcbiAgU0xJREVSX0FDVElWRSxcbiAgU0xJREVSX0lOQUNUSVZFLFxuICBUQUJfQUNUSVZFLFxuICBUQUJfSU5BQ1RJVkUsXG4gIE5BVkJBUl9DTE9TRSxcbiAgTkFWQkFSX09QRU4sXG4gIE1PVVNFX01PVkUsXG4gIFBBR0VfU0NST0xMX0RPV04sXG4gIFNDUk9MTF9JTlRPX1ZJRVcsXG4gIFNDUk9MTF9PVVRfT0ZfVklFVyxcbiAgUEFHRV9TQ1JPTExfVVAsXG4gIFNDUk9MTElOR19JTl9WSUVXLFxuICBQQUdFX0ZJTklTSCxcbiAgRUNPTU1FUkNFX0NBUlRfQ0xPU0UsXG4gIEVDT01NRVJDRV9DQVJUX09QRU4sXG4gIFBBR0VfU1RBUlQsXG4gIFBBR0VfU0NST0xMLFxufSA9IEV2ZW50VHlwZUNvbnN0cztcblxuY29uc3QgQ09NUE9ORU5UX0FDVElWRSA9ICdDT01QT05FTlRfQUNUSVZFJztcbmNvbnN0IENPTVBPTkVOVF9JTkFDVElWRSA9ICdDT01QT05FTlRfSU5BQ1RJVkUnO1xuXG5jb25zdCB7Q09MT05fREVMSU1JVEVSfSA9IElYMkVuZ2luZUNvbnN0YW50cztcblxuY29uc3Qge2dldE5hbWVzcGFjZWRQYXJhbWV0ZXJJZH0gPSBJWDJWYW5pbGxhVXRpbHM7XG5cbmNvbnN0IGNvbXBvc2FibGVGaWx0ZXIgPVxuICAocHJlZGljYXRlOiAoKGFyZzE/OiBhbnkpID0+IGFueSkgfCAoKGFyZzE/OiBhbnkpID0+IGJvb2xlYW4pKSA9PlxuICAob3B0aW9uczogYW55KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyAmJiBwcmVkaWNhdGUob3B0aW9ucykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfTtcblxuY29uc3QgaXNFbGVtZW50ID0gY29tcG9zYWJsZUZpbHRlcigoe2VsZW1lbnQsIG5hdGl2ZUV2ZW50fSkgPT4ge1xuICByZXR1cm4gZWxlbWVudCA9PT0gbmF0aXZlRXZlbnQudGFyZ2V0O1xufSk7XG5cbmNvbnN0IGNvbnRhaW5zRWxlbWVudCA9IGNvbXBvc2FibGVGaWx0ZXIoKHtlbGVtZW50LCBuYXRpdmVFdmVudH0pID0+IHtcbiAgcmV0dXJuIGVsZW1lbnQuY29udGFpbnMobmF0aXZlRXZlbnQudGFyZ2V0KTtcbn0pO1xuXG5jb25zdCBpc09yQ29udGFpbnNFbGVtZW50ID0gZmxvdyhbaXNFbGVtZW50LCBjb250YWluc0VsZW1lbnRdKTtcblxuY29uc3QgZ2V0QXV0b1N0b3BFdmVudCA9IChzdG9yZTogYW55LCBhdXRvU3RvcEV2ZW50SWQ6IGFueSkgPT4ge1xuICBpZiAoYXV0b1N0b3BFdmVudElkKSB7XG4gICAgY29uc3Qge2l4RGF0YX0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHtldmVudHN9ID0gaXhEYXRhO1xuICAgIGNvbnN0IGV2ZW50VG9TdG9wID0gZXZlbnRzW2F1dG9TdG9wRXZlbnRJZF07XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnYW55JyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ3sgcmVhZG9ubHkgUEFHRV9TVEFSVDogXCJQQUdFX1NUQVJUXCI7IHJlYWRvbmx5IFBBR0VfRklOSVNIOiBcIlBBR0VfRklOSVNIXCI7IH0nLlxuICAgIGlmIChldmVudFRvU3RvcCAmJiAhQVVUT19TVE9QX0RJU0FCTEVEX0VWRU5UU1tldmVudFRvU3RvcC5ldmVudFR5cGVJZF0pIHtcbiAgICAgIHJldHVybiBldmVudFRvU3RvcDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzdG9yZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2V2ZW50JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuY29uc3QgaGFzQXV0b1N0b3BFdmVudCA9ICh7c3RvcmUsIGV2ZW50fSkgPT4ge1xuICBjb25zdCB7YWN0aW9uOiBldmVudEFjdGlvbn0gPSBldmVudDtcbiAgY29uc3Qge2F1dG9TdG9wRXZlbnRJZH0gPSBldmVudEFjdGlvbi5jb25maWc7XG4gIHJldHVybiBCb29sZWFuKGdldEF1dG9TdG9wRXZlbnQoc3RvcmUsIGF1dG9TdG9wRXZlbnRJZCkpO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnc3RvcmUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdldmVudCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2VsZW1lbnQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdldmVudFN0YXRlS2V5JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciAnc3RhdGUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5jb25zdCBhY3Rpb25Hcm91cENyZWF0b3IgPSAoe3N0b3JlLCBldmVudCwgZWxlbWVudCwgZXZlbnRTdGF0ZUtleX0sIHN0YXRlKSA9PiB7XG4gIGNvbnN0IHthY3Rpb246IGV2ZW50QWN0aW9uLCBpZDogZXZlbnRJZH0gPSBldmVudDtcbiAgY29uc3Qge2FjdGlvbkxpc3RJZCwgYXV0b1N0b3BFdmVudElkfSA9IGV2ZW50QWN0aW9uLmNvbmZpZztcbiAgY29uc3QgZXZlbnRUb1N0b3AgPSBnZXRBdXRvU3RvcEV2ZW50KHN0b3JlLCBhdXRvU3RvcEV2ZW50SWQpO1xuICBpZiAoZXZlbnRUb1N0b3ApIHtcbiAgICBzdG9wQWN0aW9uR3JvdXAoe1xuICAgICAgc3RvcmUsXG4gICAgICBldmVudElkOiBhdXRvU3RvcEV2ZW50SWQsXG4gICAgICBldmVudFRhcmdldDogZWxlbWVudCxcbiAgICAgIGV2ZW50U3RhdGVLZXk6XG4gICAgICAgIGF1dG9TdG9wRXZlbnRJZCArXG4gICAgICAgIENPTE9OX0RFTElNSVRFUiArXG4gICAgICAgIGV2ZW50U3RhdGVLZXkuc3BsaXQoQ09MT05fREVMSU1JVEVSKVsxXSxcbiAgICAgIGFjdGlvbkxpc3RJZDogZ2V0KGV2ZW50VG9TdG9wLCAnYWN0aW9uLmNvbmZpZy5hY3Rpb25MaXN0SWQnKSxcbiAgICB9KTtcbiAgfVxuICBzdG9wQWN0aW9uR3JvdXAoe1xuICAgIHN0b3JlLFxuICAgIGV2ZW50SWQsXG4gICAgZXZlbnRUYXJnZXQ6IGVsZW1lbnQsXG4gICAgZXZlbnRTdGF0ZUtleSxcbiAgICBhY3Rpb25MaXN0SWQsXG4gIH0pO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAneyBzdG9yZTogYW55OyBldmVudElkOiBhbnk7IGV2ZW50VGFyZ2V0OiBhbnk7IGV2ZW50U3RhdGVLZXk6IGFueTsgYWN0aW9uTGlzdElkOiBhbnk7IH0nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICd7IHN0b3JlOiBhbnk7IGV2ZW50SWQ6IGFueTsgZXZlbnRUYXJnZXQ6IGFueTsgZXZlbnRTdGF0ZUtleTogYW55OyBhY3Rpb25MaXN0SWQ6IGFueTsgZ3JvdXBJbmRleD86IG51bWJlciB8IHVuZGVmaW5lZDsgaW1tZWRpYXRlOiBhbnk7IHZlcmJvc2U6IGFueTsgfScuXG4gIHN0YXJ0QWN0aW9uR3JvdXAoe1xuICAgIHN0b3JlLFxuICAgIGV2ZW50SWQsXG4gICAgZXZlbnRUYXJnZXQ6IGVsZW1lbnQsXG4gICAgZXZlbnRTdGF0ZUtleSxcbiAgICBhY3Rpb25MaXN0SWQsXG4gIH0pO1xuICByZXR1cm4gc3RhdGU7XG59O1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdmaWx0ZXInIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDA2IC0gUGFyYW1ldGVyICdoYW5kbGVyJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuY29uc3Qgd2l0aEZpbHRlciA9IChmaWx0ZXIsIGhhbmRsZXIpID0+IChvcHRpb25zOiBhbnksIHN0YXRlOiBhbnkpID0+XG4gIGZpbHRlcihvcHRpb25zLCBzdGF0ZSkgPT09IHRydWUgPyBoYW5kbGVyKG9wdGlvbnMsIHN0YXRlKSA6IHN0YXRlO1xuXG5jb25zdCBiYXNlQWN0aW9uR3JvdXBPcHRpb25zID0ge1xuICBoYW5kbGVyOiB3aXRoRmlsdGVyKGlzT3JDb250YWluc0VsZW1lbnQsIGFjdGlvbkdyb3VwQ3JlYXRvciksXG59IGFzIGNvbnN0O1xuXG5jb25zdCBiYXNlQWN0aXZpdHlBY3Rpb25Hcm91cE9wdGlvbnMgPSB7XG4gIC4uLmJhc2VBY3Rpb25Hcm91cE9wdGlvbnMsXG4gIHR5cGVzOiBbQ09NUE9ORU5UX0FDVElWRSwgQ09NUE9ORU5UX0lOQUNUSVZFXS5qb2luKCcgJyksXG59IGFzIGNvbnN0O1xuXG5jb25zdCBTQ1JPTExfRVZFTlRfVFlQRVMgPSBbXG4gIHt0YXJnZXQ6IHdpbmRvdywgdHlwZXM6ICdyZXNpemUgb3JpZW50YXRpb25jaGFuZ2UnLCB0aHJvdHRsZTogdHJ1ZX0sXG4gIHtcbiAgICB0YXJnZXQ6IGRvY3VtZW50LFxuICAgIHR5cGVzOiAnc2Nyb2xsIHdoZWVsIHJlYWR5c3RhdGVjaGFuZ2UgSVgyX1BBR0VfVVBEQVRFJyxcbiAgICB0aHJvdHRsZTogdHJ1ZSxcbiAgfSxcbl07XG5cbmNvbnN0IE1PVVNFX09WRVJfT1VUX1RZUEVTID0gJ21vdXNlb3ZlciBtb3VzZW91dCc7XG5cbmNvbnN0IGJhc2VTY3JvbGxBY3Rpb25Hcm91cE9wdGlvbnMgPSB7XG4gIHR5cGVzOiBTQ1JPTExfRVZFTlRfVFlQRVMsXG59IGFzIGNvbnN0O1xuXG5jb25zdCBBVVRPX1NUT1BfRElTQUJMRURfRVZFTlRTID0ge1xuICBQQUdFX1NUQVJULFxuICBQQUdFX0ZJTklTSCxcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IGdldERvY3VtZW50U3RhdGUgPSAoKCkgPT4ge1xuICBjb25zdCBzdXBwb3J0T2Zmc2V0ID0gd2luZG93LnBhZ2VYT2Zmc2V0ICE9PSB1bmRlZmluZWQ7XG4gIGNvbnN0IGlzQ1NTMUNvbXBhdCA9IGRvY3VtZW50LmNvbXBhdE1vZGUgPT09ICdDU1MxQ29tcGF0JztcbiAgY29uc3Qgcm9vdEVsZW1lbnQgPSBpc0NTUzFDb21wYXQgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBkb2N1bWVudC5ib2R5O1xuICByZXR1cm4gKCkgPT4gKHtcbiAgICBzY3JvbGxMZWZ0OiBzdXBwb3J0T2Zmc2V0ID8gd2luZG93LnBhZ2VYT2Zmc2V0IDogcm9vdEVsZW1lbnQuc2Nyb2xsTGVmdCxcblxuICAgIHNjcm9sbFRvcDogc3VwcG9ydE9mZnNldCA/IHdpbmRvdy5wYWdlWU9mZnNldCA6IHJvb3RFbGVtZW50LnNjcm9sbFRvcCxcblxuICAgIC8vIHJlcXVpcmVkIHRvIHJlbW92ZSBlbGFzdGljaXR5IGluIFNhZmFyaSBzY3JvbGxpbmcuXG4gICAgc3RpZmZTY3JvbGxUb3A6IGNsYW1wKFxuICAgICAgc3VwcG9ydE9mZnNldCA/IHdpbmRvdy5wYWdlWU9mZnNldCA6IHJvb3RFbGVtZW50LnNjcm9sbFRvcCxcbiAgICAgIDAsXG5cbiAgICAgIHJvb3RFbGVtZW50LnNjcm9sbEhlaWdodCAtIHdpbmRvdy5pbm5lckhlaWdodFxuICAgICksXG5cbiAgICBzY3JvbGxXaWR0aDogcm9vdEVsZW1lbnQuc2Nyb2xsV2lkdGgsXG5cbiAgICBzY3JvbGxIZWlnaHQ6IHJvb3RFbGVtZW50LnNjcm9sbEhlaWdodCxcblxuICAgIGNsaWVudFdpZHRoOiByb290RWxlbWVudC5jbGllbnRXaWR0aCxcblxuICAgIGNsaWVudEhlaWdodDogcm9vdEVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgIGlubmVyV2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuICAgIGlubmVySGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gIH0pO1xufSkoKTtcblxuY29uc3QgYXJlQm94ZXNJbnRlcnNlY3RpbmcgPSAoXG4gIGE6IGFueSxcbiAgYjoge1xuICAgIGJvdHRvbTogbnVtYmVyO1xuICAgIGxlZnQ6IG51bWJlcjtcbiAgICByaWdodDogbnVtYmVyO1xuICAgIHRvcDogYW55IHwgbnVtYmVyO1xuICB9XG4pID0+XG4gICEoXG4gICAgYS5sZWZ0ID4gYi5yaWdodCB8fFxuICAgIGEucmlnaHQgPCBiLmxlZnQgfHxcbiAgICBhLnRvcCA+IGIuYm90dG9tIHx8XG4gICAgYS5ib3R0b20gPCBiLnRvcFxuICApO1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdlbGVtZW50JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnbmF0aXZlRXZlbnQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5jb25zdCBpc0VsZW1lbnRIb3ZlcmVkID0gKHtlbGVtZW50LCBuYXRpdmVFdmVudH0pID0+IHtcbiAgY29uc3Qge3R5cGUsIHRhcmdldCwgcmVsYXRlZFRhcmdldH0gPSBuYXRpdmVFdmVudDtcbiAgY29uc3QgY29udGFpbnNUYXJnZXQgPSBlbGVtZW50LmNvbnRhaW5zKHRhcmdldCk7XG4gIGlmICh0eXBlID09PSAnbW91c2VvdmVyJyAmJiBjb250YWluc1RhcmdldCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGNvbnRhaW5zUmVsYXRlZCA9IGVsZW1lbnQuY29udGFpbnMocmVsYXRlZFRhcmdldCk7XG4gIGlmICh0eXBlID09PSAnbW91c2VvdXQnICYmIGNvbnRhaW5zVGFyZ2V0ICYmIGNvbnRhaW5zUmVsYXRlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGlzRWxlbWVudFZpc2libGUgPSAob3B0aW9uczogYW55KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGV2ZW50OiB7Y29uZmlnfSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3Qge2NsaWVudFdpZHRoLCBjbGllbnRIZWlnaHR9ID0gZ2V0RG9jdW1lbnRTdGF0ZSgpO1xuICBjb25zdCBzY3JvbGxPZmZzZXRWYWx1ZSA9IGNvbmZpZy5zY3JvbGxPZmZzZXRWYWx1ZTtcbiAgY29uc3Qgc2Nyb2xsT2Zmc2V0VW5pdCA9IGNvbmZpZy5zY3JvbGxPZmZzZXRVbml0O1xuICBjb25zdCBpc1BYID0gc2Nyb2xsT2Zmc2V0VW5pdCA9PT0gJ1BYJztcblxuICBjb25zdCBvZmZzZXRQYWRkaW5nID0gaXNQWFxuICAgID8gc2Nyb2xsT2Zmc2V0VmFsdWVcbiAgICA6IChjbGllbnRIZWlnaHQgKiAoc2Nyb2xsT2Zmc2V0VmFsdWUgfHwgMCkpIC8gMTAwO1xuXG4gIHJldHVybiBhcmVCb3hlc0ludGVyc2VjdGluZyhlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCB7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IG9mZnNldFBhZGRpbmcsXG4gICAgcmlnaHQ6IGNsaWVudFdpZHRoLFxuICAgIGJvdHRvbTogY2xpZW50SGVpZ2h0IC0gb2Zmc2V0UGFkZGluZyxcbiAgfSk7XG59O1xuXG5jb25zdCB3aGVuQ29tcG9uZW50QWN0aXZlQ2hhbmdlID1cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnaGFuZGxlcicgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgKGhhbmRsZXIpID0+IChvcHRpb25zOiBhbnksIG9sZFN0YXRlOiBhbnkpID0+IHtcbiAgICBjb25zdCB7dHlwZX0gPSBvcHRpb25zLm5hdGl2ZUV2ZW50O1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIGNvbnN0IGlzQWN0aXZlID0gW0NPTVBPTkVOVF9BQ1RJVkUsIENPTVBPTkVOVF9JTkFDVElWRV0uaW5kZXhPZih0eXBlKSAhPT0gLTFcbiAgICA/IHR5cGUgPT09IENPTVBPTkVOVF9BQ1RJVkVcbiAgICA6IG9sZFN0YXRlLmlzQWN0aXZlO1xuXG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5vbGRTdGF0ZSxcbiAgICAgIGlzQWN0aXZlLFxuICAgIH0gYXMgY29uc3Q7XG5cbiAgICBpZiAoIW9sZFN0YXRlIHx8IG5ld1N0YXRlLmlzQWN0aXZlICE9PSBvbGRTdGF0ZS5pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIGhhbmRsZXIob3B0aW9ucywgbmV3U3RhdGUpIHx8IG5ld1N0YXRlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfTtcblxuY29uc3Qgd2hlbkVsZW1lbnRIb3ZlckNoYW5nZSA9XG4gIChcbiAgICBoYW5kbGVyOiAoXG4gICAgICBvcHRpb25zOiBhbnksXG4gICAgICBzdGF0ZToge1xuICAgICAgICBlbGVtZW50SG92ZXJlZDogYm9vbGVhbjtcbiAgICAgIH1cbiAgICApID0+IHZvaWRcbiAgKSA9PlxuICAob3B0aW9uczogYW55LCBvbGRTdGF0ZTogYW55KSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBlbGVtZW50SG92ZXJlZDogaXNFbGVtZW50SG92ZXJlZChvcHRpb25zKSxcbiAgICB9IGFzIGNvbnN0O1xuICAgIGlmIChcbiAgICAgIG9sZFN0YXRlXG4gICAgICAgID8gbmV3U3RhdGUuZWxlbWVudEhvdmVyZWQgIT09IG9sZFN0YXRlLmVsZW1lbnRIb3ZlcmVkXG4gICAgICAgIDogbmV3U3RhdGUuZWxlbWVudEhvdmVyZWRcbiAgICApIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzEzNDUgLSBBbiBleHByZXNzaW9uIG9mIHR5cGUgJ3ZvaWQnIGNhbm5vdCBiZSB0ZXN0ZWQgZm9yIHRydXRoaW5lc3MuXG4gICAgICByZXR1cm4gaGFuZGxlcihvcHRpb25zLCBuZXdTdGF0ZSkgfHwgbmV3U3RhdGU7XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfTtcblxuY29uc3Qgd2hlbkVsZW1lbnRWaXNpYmlsdHlDaGFuZ2UgPVxuICAoaGFuZGxlcjogKG9wdGlvbnM/OiBhbnksIHN0YXRlPzogYW55KSA9PiBhbnkpID0+XG4gIChvcHRpb25zOiBhbnksIG9sZFN0YXRlOiBhbnkpID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm9sZFN0YXRlLFxuICAgICAgZWxlbWVudFZpc2libGU6IGlzRWxlbWVudFZpc2libGUob3B0aW9ucyksXG4gICAgfSBhcyBjb25zdDtcbiAgICBpZiAoXG4gICAgICBvbGRTdGF0ZVxuICAgICAgICA/IG5ld1N0YXRlLmVsZW1lbnRWaXNpYmxlICE9PSBvbGRTdGF0ZS5lbGVtZW50VmlzaWJsZVxuICAgICAgICA6IG5ld1N0YXRlLmVsZW1lbnRWaXNpYmxlXG4gICAgKSB7XG4gICAgICByZXR1cm4gaGFuZGxlcihvcHRpb25zLCBuZXdTdGF0ZSkgfHwgbmV3U3RhdGU7XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfTtcblxuY29uc3Qgd2hlblNjcm9sbERpcmVjdGlvbkNoYW5nZSA9XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2hhbmRsZXInIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5cbiAgKGhhbmRsZXIpID0+XG4gICAgKG9wdGlvbnM6IGFueSwgb2xkU3RhdGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzdGlmZlNjcm9sbFRvcDogc2Nyb2xsVG9wLFxuICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgIGlubmVySGVpZ2h0LFxuICAgICAgfSA9IGdldERvY3VtZW50U3RhdGUoKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZXZlbnQ6IHtjb25maWcsIGV2ZW50VHlwZUlkfSxcbiAgICAgIH0gPSBvcHRpb25zO1xuICAgICAgY29uc3Qge3Njcm9sbE9mZnNldFZhbHVlLCBzY3JvbGxPZmZzZXRVbml0fSA9IGNvbmZpZztcbiAgICAgIGNvbnN0IGlzUFggPSBzY3JvbGxPZmZzZXRVbml0ID09PSAnUFgnO1xuXG4gICAgICBjb25zdCBzY3JvbGxIZWlnaHRCb3VuZHMgPSBzY3JvbGxIZWlnaHQgLSBpbm5lckhlaWdodDtcbiAgICAgIC8vIHBlcmNlbnQgdG9wIHNpbmNlIGlubmVySGVpZ2h0IG1heSBjaGFuZ2UgZm9yIG1vYmlsZSBkZXZpY2VzIHdoaWNoIGFsc28gY2hhbmdlcyB0aGUgc2Nyb2xsVG9wIHZhbHVlLlxuICAgICAgY29uc3QgcGVyY2VudFRvcCA9IE51bWJlcigoc2Nyb2xsVG9wIC8gc2Nyb2xsSGVpZ2h0Qm91bmRzKS50b0ZpeGVkKDIpKTtcblxuICAgICAgLy8gbm8gc3RhdGUgY2hhbmdlXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzM5IC0gUHJvcGVydHkgJ3BlcmNlbnRUb3AnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ3t9Jy5cbiAgICAgIGlmIChvbGRTdGF0ZSAmJiBvbGRTdGF0ZS5wZXJjZW50VG9wID09PSBwZXJjZW50VG9wKSB7XG4gICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Nyb2xsVG9wUGFkZGluZyA9XG4gICAgICAgIChpc1BYXG4gICAgICAgICAgPyBzY3JvbGxPZmZzZXRWYWx1ZVxuICAgICAgICAgIDogKGlubmVySGVpZ2h0ICogKHNjcm9sbE9mZnNldFZhbHVlIHx8IDApKSAvIDEwMCkgL1xuICAgICAgICBzY3JvbGxIZWlnaHRCb3VuZHM7XG5cbiAgICAgIGxldCBzY3JvbGxpbmdEb3duO1xuICAgICAgbGV0IHNjcm9sbERpcmVjdGlvbkNoYW5nZWQ7XG4gICAgICBsZXQgYW5jaG9yVG9wID0gMDtcblxuICAgICAgaWYgKG9sZFN0YXRlKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAncGVyY2VudFRvcCcgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAne30nLlxuICAgICAgICBzY3JvbGxpbmdEb3duID0gcGVyY2VudFRvcCA+IG9sZFN0YXRlLnBlcmNlbnRUb3A7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAnc2Nyb2xsaW5nRG93bicgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAne30nLlxuICAgICAgICBzY3JvbGxEaXJlY3Rpb25DaGFuZ2VkID0gb2xkU3RhdGUuc2Nyb2xsaW5nRG93biAhPT0gc2Nyb2xsaW5nRG93bjtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMzOSAtIFByb3BlcnR5ICdhbmNob3JUb3AnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ3t9Jy5cbiAgICAgICAgYW5jaG9yVG9wID0gc2Nyb2xsRGlyZWN0aW9uQ2hhbmdlZCA/IHBlcmNlbnRUb3AgOiBvbGRTdGF0ZS5hbmNob3JUb3A7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluQm91bmRzID1cbiAgICAgICAgZXZlbnRUeXBlSWQgPT09IFBBR0VfU0NST0xMX0RPV05cbiAgICAgICAgICA/IHBlcmNlbnRUb3AgPj0gYW5jaG9yVG9wICsgc2Nyb2xsVG9wUGFkZGluZ1xuICAgICAgICAgIDogcGVyY2VudFRvcCA8PSBhbmNob3JUb3AgLSBzY3JvbGxUb3BQYWRkaW5nO1xuXG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ub2xkU3RhdGUsXG4gICAgICAgIHBlcmNlbnRUb3AsXG4gICAgICAgIGluQm91bmRzLFxuICAgICAgICBhbmNob3JUb3AsXG4gICAgICAgIHNjcm9sbGluZ0Rvd24sXG4gICAgICB9IGFzIGNvbnN0O1xuXG4gICAgICBpZiAoXG4gICAgICAgIG9sZFN0YXRlICYmXG4gICAgICAgIGluQm91bmRzICYmXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAnaW5Cb3VuZHMnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ3t9Jy5cbiAgICAgICAgKHNjcm9sbERpcmVjdGlvbkNoYW5nZWQgfHwgbmV3U3RhdGUuaW5Cb3VuZHMgIT09IG9sZFN0YXRlLmluQm91bmRzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVyKG9wdGlvbnMsIG5ld1N0YXRlKSB8fCBuZXdTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH07XG5cbmNvbnN0IHBvaW50SW50ZXJzZWN0cyA9IChcbiAgcG9pbnQ6IHtcbiAgICBsZWZ0OiBhbnkgfCBudW1iZXI7XG4gICAgdG9wOiBhbnkgfCBudW1iZXI7XG4gIH0sXG4gIHJlY3Q6IGFueVxuKSA9PlxuICBwb2ludC5sZWZ0ID4gcmVjdC5sZWZ0ICYmXG4gIHBvaW50LmxlZnQgPCByZWN0LnJpZ2h0ICYmXG4gIHBvaW50LnRvcCA+IHJlY3QudG9wICYmXG4gIHBvaW50LnRvcCA8IHJlY3QuYm90dG9tO1xuXG5jb25zdCB3aGVuUGFnZUxvYWRGaW5pc2ggPVxuICAoaGFuZGxlcjogKGFyZzE6IGFueSwgc3RhdGU6IHVuZGVmaW5lZCB8IGFueSkgPT4gdW5kZWZpbmVkIHwgYW55KSA9PlxuICAob3B0aW9uczogYW55LCBvbGRTdGF0ZTogYW55KSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBmaW5pc2hlZDogZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJyxcbiAgICB9IGFzIGNvbnN0O1xuICAgIGlmIChuZXdTdGF0ZS5maW5pc2hlZCAmJiAhKG9sZFN0YXRlICYmIG9sZFN0YXRlLmZpbnNoZWQpKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTU0IC0gRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBnb3QgMS5cbiAgICAgIGhhbmRsZXIob3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfTtcblxuY29uc3Qgd2hlblBhZ2VMb2FkU3RhcnQgPVxuICAoaGFuZGxlcjogKGFyZzE6IGFueSwgc3RhdGU6IHVuZGVmaW5lZCB8IGFueSkgPT4gdW5kZWZpbmVkIHwgYW55KSA9PlxuICAob3B0aW9uczogYW55LCBvbGRTdGF0ZTogYW55KSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBzdGFydGVkOiB0cnVlLFxuICAgIH0gYXMgY29uc3Q7XG4gICAgaWYgKCFvbGRTdGF0ZSkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjU1NCAtIEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZ290IDEuXG4gICAgICBoYW5kbGVyKG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH07XG5cbmNvbnN0IHdoZW5DbGlja0NvdW50Q2hhbmdlID1cbiAgKFxuICAgIGhhbmRsZXI6IChcbiAgICAgIG9wdGlvbnM6IGFueSxcbiAgICAgIGFyZzI6IHtcbiAgICAgICAgY2xpY2tDb3VudDogbnVtYmVyO1xuICAgICAgfVxuICAgICkgPT4gdm9pZFxuICApID0+XG4gIChvcHRpb25zOiBhbnksIG9sZFN0YXRlID0ge2NsaWNrQ291bnQ6IDB9KSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBjbGlja0NvdW50OiAob2xkU3RhdGUuY2xpY2tDb3VudCAlIDIpICsgMSxcbiAgICB9IGFzIGNvbnN0O1xuICAgIGlmIChuZXdTdGF0ZS5jbGlja0NvdW50ICE9PSBvbGRTdGF0ZS5jbGlja0NvdW50KSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMxMzQ1IC0gQW4gZXhwcmVzc2lvbiBvZiB0eXBlICd2b2lkJyBjYW5ub3QgYmUgdGVzdGVkIGZvciB0cnV0aGluZXNzLlxuICAgICAgcmV0dXJuIGhhbmRsZXIob3B0aW9ucywgbmV3U3RhdGUpIHx8IG5ld1N0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH07XG5cbmNvbnN0IGdldENvbXBvbmVudEFjdGl2ZU9wdGlvbnMgPSAoYWxsb3dOZXN0ZWRDaGlsZHJlbkV2ZW50cyA9IHRydWUpID0+ICh7XG4gIC4uLmJhc2VBY3Rpdml0eUFjdGlvbkdyb3VwT3B0aW9ucyxcbiAgaGFuZGxlcjogd2l0aEZpbHRlcihcbiAgICBhbGxvd05lc3RlZENoaWxkcmVuRXZlbnRzID8gaXNPckNvbnRhaW5zRWxlbWVudCA6IGlzRWxlbWVudCxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdvcHRpb25zJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciAnc3RhdGUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgd2hlbkNvbXBvbmVudEFjdGl2ZUNoYW5nZSgob3B0aW9ucywgc3RhdGUpID0+IHtcbiAgICAgIHJldHVybiBzdGF0ZS5pc0FjdGl2ZVxuICAgICAgICA/IGJhc2VBY3Rpb25Hcm91cE9wdGlvbnMuaGFuZGxlcihvcHRpb25zLCBzdGF0ZSlcbiAgICAgICAgOiBzdGF0ZTtcbiAgICB9KVxuICApLFxufSk7XG5cbmNvbnN0IGdldENvbXBvbmVudEluYWN0aXZlT3B0aW9ucyA9IChhbGxvd05lc3RlZENoaWxkcmVuRXZlbnRzID0gdHJ1ZSkgPT4gKHtcbiAgLi4uYmFzZUFjdGl2aXR5QWN0aW9uR3JvdXBPcHRpb25zLFxuICBoYW5kbGVyOiB3aXRoRmlsdGVyKFxuICAgIGFsbG93TmVzdGVkQ2hpbGRyZW5FdmVudHMgPyBpc09yQ29udGFpbnNFbGVtZW50IDogaXNFbGVtZW50LFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ29wdGlvbnMnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDA2IC0gUGFyYW1ldGVyICdzdGF0ZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICB3aGVuQ29tcG9uZW50QWN0aXZlQ2hhbmdlKChvcHRpb25zLCBzdGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuICFzdGF0ZS5pc0FjdGl2ZVxuICAgICAgICA/IGJhc2VBY3Rpb25Hcm91cE9wdGlvbnMuaGFuZGxlcihvcHRpb25zLCBzdGF0ZSlcbiAgICAgICAgOiBzdGF0ZTtcbiAgICB9KVxuICApLFxufSk7XG5cbmNvbnN0IHNjcm9sbEludG9PdXRPZlZpZXdPcHRpb25zID0ge1xuICAuLi5iYXNlU2Nyb2xsQWN0aW9uR3JvdXBPcHRpb25zLFxuICBoYW5kbGVyOiB3aGVuRWxlbWVudFZpc2liaWx0eUNoYW5nZSgob3B0aW9ucywgc3RhdGUpID0+IHtcbiAgICBjb25zdCB7ZWxlbWVudFZpc2libGV9ID0gc3RhdGU7XG4gICAgY29uc3Qge2V2ZW50LCBzdG9yZX0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHtpeERhdGF9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCB7ZXZlbnRzfSA9IGl4RGF0YTtcblxuICAgIC8vIHRyaWdnZXIgdGhlIGhhbmRsZXIgb25seSBvbmNlIGlmIG9ubHkgb25lIG9mIFNDUk9MTF9JTlRPIG9yIFNDUk9MTF9PVVRfT0YgZXZlbnQgdHlwZXNcbiAgICAvLyBhcmUgcmVnaXN0ZXJlZC5cbiAgICBpZiAoIWV2ZW50c1tldmVudC5hY3Rpb24uY29uZmlnLmF1dG9TdG9wRXZlbnRJZF0gJiYgc3RhdGUudHJpZ2dlcmVkKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKChldmVudC5ldmVudFR5cGVJZCA9PT0gU0NST0xMX0lOVE9fVklFVykgPT09IGVsZW1lbnRWaXNpYmxlKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTU0IC0gRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBnb3QgMS5cbiAgICAgIGFjdGlvbkdyb3VwQ3JlYXRvcihvcHRpb25zKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB0cmlnZ2VyZWQ6IHRydWUsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9KSxcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IE1PVVNFX09VVF9ST1VORF9USFJFU0hPTEQgPSAwLjA1O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFtTTElERVJfQUNUSVZFXTogZ2V0Q29tcG9uZW50QWN0aXZlT3B0aW9ucygpLFxuICBbU0xJREVSX0lOQUNUSVZFXTogZ2V0Q29tcG9uZW50SW5hY3RpdmVPcHRpb25zKCksXG4gIFtEUk9QRE9XTl9PUEVOXTogZ2V0Q29tcG9uZW50QWN0aXZlT3B0aW9ucygpLFxuICBbRFJPUERPV05fQ0xPU0VdOiBnZXRDb21wb25lbnRJbmFjdGl2ZU9wdGlvbnMoKSxcblxuICAvLyBuYXZiYXIgZWxlbWVudHMgbWF5IGNvbnRhaW4gbmVzdGVkIGNvbXBvbmVudHMgaW4gdGhlIG1lbnUuIFRvIHByZXZlbnQgYWN0aXZpdHkgbWlzZmlyZXMsIG9ubHkgbGlzdGVkIGZvciBhY3Rpdml0eVxuICAvLyBldmVudHMgd2hlcmUgdGhlIHRhcmdldCBpcyB0aGUgbmF2YmFyIGVsZW1lbnQsIGFuZCBpZ25vcmUgY2hpbGRyZW4gdGhhdCBkaXNwYXRjaCBhY3Rpdml0aXkgZXZlbnRzLlxuICBbTkFWQkFSX09QRU5dOiBnZXRDb21wb25lbnRBY3RpdmVPcHRpb25zKGZhbHNlKSxcbiAgW05BVkJBUl9DTE9TRV06IGdldENvbXBvbmVudEluYWN0aXZlT3B0aW9ucyhmYWxzZSksXG4gIFtUQUJfQUNUSVZFXTogZ2V0Q29tcG9uZW50QWN0aXZlT3B0aW9ucygpLFxuICBbVEFCX0lOQUNUSVZFXTogZ2V0Q29tcG9uZW50SW5hY3RpdmVPcHRpb25zKCksXG4gIFtFQ09NTUVSQ0VfQ0FSVF9PUEVOXToge1xuICAgIHR5cGVzOiAnZWNvbW1lcmNlLWNhcnQtb3BlbicsXG4gICAgaGFuZGxlcjogd2l0aEZpbHRlcihpc09yQ29udGFpbnNFbGVtZW50LCBhY3Rpb25Hcm91cENyZWF0b3IpLFxuICB9LFxuICBbRUNPTU1FUkNFX0NBUlRfQ0xPU0VdOiB7XG4gICAgdHlwZXM6ICdlY29tbWVyY2UtY2FydC1jbG9zZScsXG4gICAgaGFuZGxlcjogd2l0aEZpbHRlcihpc09yQ29udGFpbnNFbGVtZW50LCBhY3Rpb25Hcm91cENyZWF0b3IpLFxuICB9LFxuICBbTU9VU0VfQ0xJQ0tdOiB7XG4gICAgdHlwZXM6ICdjbGljaycsXG4gICAgaGFuZGxlcjogd2l0aEZpbHRlcihcbiAgICAgIGlzT3JDb250YWluc0VsZW1lbnQsXG4gICAgICB3aGVuQ2xpY2tDb3VudENoYW5nZSgob3B0aW9ucywge2NsaWNrQ291bnR9KSA9PiB7XG4gICAgICAgIGlmIChoYXNBdXRvU3RvcEV2ZW50KG9wdGlvbnMpKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjU1NCAtIEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZ290IDEuXG4gICAgICAgICAgY2xpY2tDb3VudCA9PT0gMSAmJiBhY3Rpb25Hcm91cENyZWF0b3Iob3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjU1NCAtIEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZ290IDEuXG4gICAgICAgICAgYWN0aW9uR3JvdXBDcmVhdG9yKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICksXG4gIH0sXG4gIFtNT1VTRV9TRUNPTkRfQ0xJQ0tdOiB7XG4gICAgdHlwZXM6ICdjbGljaycsXG4gICAgaGFuZGxlcjogd2l0aEZpbHRlcihcbiAgICAgIGlzT3JDb250YWluc0VsZW1lbnQsXG4gICAgICB3aGVuQ2xpY2tDb3VudENoYW5nZSgob3B0aW9ucywge2NsaWNrQ291bnR9KSA9PiB7XG4gICAgICAgIGlmIChjbGlja0NvdW50ID09PSAyKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjU1NCAtIEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZ290IDEuXG4gICAgICAgICAgYWN0aW9uR3JvdXBDcmVhdG9yKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICksXG4gIH0sXG4gIFtNT1VTRV9ET1dOXToge1xuICAgIC4uLmJhc2VBY3Rpb25Hcm91cE9wdGlvbnMsXG4gICAgdHlwZXM6ICdtb3VzZWRvd24nLFxuICB9LFxuICBbTU9VU0VfVVBdOiB7XG4gICAgLi4uYmFzZUFjdGlvbkdyb3VwT3B0aW9ucyxcbiAgICB0eXBlczogJ21vdXNldXAnLFxuICB9LFxuICBbTU9VU0VfT1ZFUl06IHtcbiAgICB0eXBlczogTU9VU0VfT1ZFUl9PVVRfVFlQRVMsXG4gICAgaGFuZGxlcjogd2l0aEZpbHRlcihcbiAgICAgIGlzT3JDb250YWluc0VsZW1lbnQsXG4gICAgICB3aGVuRWxlbWVudEhvdmVyQ2hhbmdlKChvcHRpb25zLCBzdGF0ZSkgPT4ge1xuICAgICAgICBpZiAoc3RhdGUuZWxlbWVudEhvdmVyZWQpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTU0IC0gRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBnb3QgMS5cbiAgICAgICAgICBhY3Rpb25Hcm91cENyZWF0b3Iob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKSxcbiAgfSxcbiAgW01PVVNFX09VVF06IHtcbiAgICB0eXBlczogTU9VU0VfT1ZFUl9PVVRfVFlQRVMsXG4gICAgaGFuZGxlcjogd2l0aEZpbHRlcihcbiAgICAgIGlzT3JDb250YWluc0VsZW1lbnQsXG4gICAgICB3aGVuRWxlbWVudEhvdmVyQ2hhbmdlKChvcHRpb25zLCBzdGF0ZSkgPT4ge1xuICAgICAgICBpZiAoIXN0YXRlLmVsZW1lbnRIb3ZlcmVkKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjU1NCAtIEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZ290IDEuXG4gICAgICAgICAgYWN0aW9uR3JvdXBDcmVhdG9yKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICksXG4gIH0sXG4gIFtNT1VTRV9NT1ZFXToge1xuICAgIHR5cGVzOiAnbW91c2Vtb3ZlIG1vdXNlb3V0IHNjcm9sbCcsXG4gICAgaGFuZGxlcjogKFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAge3N0b3JlLCBlbGVtZW50LCBldmVudENvbmZpZywgbmF0aXZlRXZlbnQsIGV2ZW50U3RhdGVLZXl9LFxuXG4gICAgICBzdGF0ZSA9IHtjbGllbnRYOiAwLCBjbGllbnRZOiAwLCBwYWdlWDogMCwgcGFnZVk6IDB9XG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGJhc2VkT24sXG4gICAgICAgIHNlbGVjdGVkQXhpcyxcbiAgICAgICAgY29udGludW91c1BhcmFtZXRlckdyb3VwSWQsXG4gICAgICAgIHJldmVyc2UsXG4gICAgICAgIHJlc3RpbmdTdGF0ZSA9IDAsXG4gICAgICB9ID0gZXZlbnRDb25maWc7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNsaWVudFggPSBzdGF0ZS5jbGllbnRYLFxuICAgICAgICBjbGllbnRZID0gc3RhdGUuY2xpZW50WSxcbiAgICAgICAgcGFnZVggPSBzdGF0ZS5wYWdlWCxcbiAgICAgICAgcGFnZVkgPSBzdGF0ZS5wYWdlWSxcbiAgICAgIH0gPSBuYXRpdmVFdmVudDtcbiAgICAgIGNvbnN0IGlzWEF4aXMgPSBzZWxlY3RlZEF4aXMgPT09ICdYX0FYSVMnO1xuICAgICAgY29uc3QgaXNNb3VzZU91dCA9IG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdtb3VzZW91dCc7XG5cbiAgICAgIGxldCB2YWx1ZSA9IHJlc3RpbmdTdGF0ZSAvIDEwMDtcbiAgICAgIGxldCBuYW1lc3BhY2VkUGFyYW1ldGVySWQgPSBjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZDtcbiAgICAgIGxldCBlbGVtZW50SG92ZXJlZCA9IGZhbHNlO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VkT24pIHtcbiAgICAgICAgY2FzZSBFdmVudEJhc2VkT24uVklFV1BPUlQ6IHtcbiAgICAgICAgICB2YWx1ZSA9IGlzWEF4aXNcbiAgICAgICAgICAgID8gTWF0aC5taW4oY2xpZW50WCwgd2luZG93LmlubmVyV2lkdGgpIC8gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICAgICAgIDogTWF0aC5taW4oY2xpZW50WSwgd2luZG93LmlubmVySGVpZ2h0KSAvIHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzM5IC0gUHJvcGVydHkgJ1BBR0UnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ3sgcmVhZG9ubHkgRUxFTUVOVDogXCJFTEVNRU5UXCI7IHJlYWRvbmx5IFZJRVdQT1JUOiBcIlZJRVdQT1JUXCI7IH0nLlxuICAgICAgICBjYXNlIEV2ZW50QmFzZWRPbi5QQUdFOiB7XG4gICAgICAgICAgY29uc3Qge3Njcm9sbExlZnQsIHNjcm9sbFRvcCwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodH0gPVxuICAgICAgICAgICAgZ2V0RG9jdW1lbnRTdGF0ZSgpO1xuICAgICAgICAgIHZhbHVlID0gaXNYQXhpc1xuICAgICAgICAgICAgPyBNYXRoLm1pbihzY3JvbGxMZWZ0ICsgcGFnZVgsIHNjcm9sbFdpZHRoKSAvIHNjcm9sbFdpZHRoXG4gICAgICAgICAgICA6IE1hdGgubWluKHNjcm9sbFRvcCArIHBhZ2VZLCBzY3JvbGxIZWlnaHQpIC8gc2Nyb2xsSGVpZ2h0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRXZlbnRCYXNlZE9uLkVMRU1FTlQ6XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBuYW1lc3BhY2VkUGFyYW1ldGVySWQgPSBnZXROYW1lc3BhY2VkUGFyYW1ldGVySWQoXG4gICAgICAgICAgICBldmVudFN0YXRlS2V5LFxuICAgICAgICAgICAgY29udGludW91c1BhcmFtZXRlckdyb3VwSWRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgaXNNb3VzZUV2ZW50ID0gbmF0aXZlRXZlbnQudHlwZS5pbmRleE9mKCdtb3VzZScpID09PSAwO1xuXG4gICAgICAgICAgLy8gVXNlIGlzT3JDb250YWluc0VsZW1lbnQgZm9yIG1vdXNlIGV2ZW50cyBzaW5jZSB0aGV5IGFyZSBmaXJlZCBmcm9tIHRoZSB0YXJnZXRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc01vdXNlRXZlbnQgJiZcbiAgICAgICAgICAgIGlzT3JDb250YWluc0VsZW1lbnQoe2VsZW1lbnQsIG5hdGl2ZUV2ZW50fSkgIT09IHRydWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIGNvbnN0IHtsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHR9ID0gcmVjdDtcblxuICAgICAgICAgIC8vIE90aGVyd2lzZSB3ZSdsbCBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgbW91c2UgcG9zaXRpb24gZnJvbSB0aGUgcHJldmlvdXMgaGFuZGxlciBzdGF0ZVxuICAgICAgICAgIC8vIGFnYWluc3QgdGhlIHRhcmdldCBlbGVtZW50J3MgcmVjdFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc01vdXNlRXZlbnQgJiZcbiAgICAgICAgICAgICFwb2ludEludGVyc2VjdHMoe2xlZnQ6IGNsaWVudFgsIHRvcDogY2xpZW50WX0sIHJlY3QpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbGVtZW50SG92ZXJlZCA9IHRydWU7XG5cbiAgICAgICAgICB2YWx1ZSA9IGlzWEF4aXMgPyAoY2xpZW50WCAtIGxlZnQpIC8gd2lkdGggOiAoY2xpZW50WSAtIHRvcCkgLyBoZWlnaHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gY292ZXIgY2FzZSB3aGVyZSB0aGUgZXZlbnQgaXMgYSBtb3VzZSBvdXQsIGJ1dCB0aGUgdmFsdWUgaXMgbm90IHF1aXRlIGF0IDEwMCVcbiAgICAgIGlmIChcbiAgICAgICAgaXNNb3VzZU91dCAmJlxuICAgICAgICAodmFsdWUgPiAxIC0gTU9VU0VfT1VUX1JPVU5EX1RIUkVTSE9MRCB8fFxuICAgICAgICAgIHZhbHVlIDwgTU9VU0VfT1VUX1JPVU5EX1RIUkVTSE9MRClcbiAgICAgICkge1xuICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHVwZGF0ZSBiYXNlZCBvbiBlbGVtZW50IGlmIHRoZSBtb3VzZSBpcyBtb3Zpbmcgb3ZlciBvciBoYXMganVzdCBsZWZ0IHRoZSBlbGVtZW50XG4gICAgICBpZiAoXG4gICAgICAgIGJhc2VkT24gIT09IEV2ZW50QmFzZWRPbi5FTEVNRU5UIHx8XG4gICAgICAgIGVsZW1lbnRIb3ZlcmVkIHx8XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBlbGVtZW50SG92ZXJlZCAhPT0gc3RhdGUuZWxlbWVudEhvdmVyZWRcbiAgICAgICkge1xuICAgICAgICB2YWx1ZSA9IHJldmVyc2UgPyAxIC0gdmFsdWUgOiB2YWx1ZTtcbiAgICAgICAgc3RvcmUuZGlzcGF0Y2gocGFyYW1ldGVyQ2hhbmdlZChuYW1lc3BhY2VkUGFyYW1ldGVySWQsIHZhbHVlKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZW1lbnRIb3ZlcmVkLFxuICAgICAgICBjbGllbnRYLFxuICAgICAgICBjbGllbnRZLFxuICAgICAgICBwYWdlWCxcbiAgICAgICAgcGFnZVksXG4gICAgICB9O1xuICAgIH0sXG4gIH0sXG5cbiAgW1BBR0VfU0NST0xMXToge1xuICAgIHR5cGVzOiBTQ1JPTExfRVZFTlRfVFlQRVMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBoYW5kbGVyOiAoe3N0b3JlLCBldmVudENvbmZpZ30pID0+IHtcbiAgICAgIGNvbnN0IHtjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCwgcmV2ZXJzZX0gPSBldmVudENvbmZpZztcbiAgICAgIGNvbnN0IHtzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0fSA9IGdldERvY3VtZW50U3RhdGUoKTtcbiAgICAgIGxldCB2YWx1ZSA9IHNjcm9sbFRvcCAvIChzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpO1xuICAgICAgdmFsdWUgPSByZXZlcnNlID8gMSAtIHZhbHVlIDogdmFsdWU7XG4gICAgICBzdG9yZS5kaXNwYXRjaChwYXJhbWV0ZXJDaGFuZ2VkKGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkLCB2YWx1ZSkpO1xuICAgIH0sXG4gIH0sXG5cbiAgW1NDUk9MTElOR19JTl9WSUVXXToge1xuICAgIHR5cGVzOiBTQ1JPTExfRVZFTlRfVFlQRVMsXG4gICAgaGFuZGxlcjogKFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAge2VsZW1lbnQsIHN0b3JlLCBldmVudENvbmZpZywgZXZlbnRTdGF0ZUtleX0sXG5cbiAgICAgIHN0YXRlID0ge3Njcm9sbFBlcmNlbnQ6IDB9XG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgc2Nyb2xsV2lkdGgsXG4gICAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgICAgY2xpZW50SGVpZ2h0OiB2aXNpYmxlSGVpZ2h0LFxuICAgICAgfSA9IGdldERvY3VtZW50U3RhdGUoKTtcblxuICAgICAgY29uc3Qge1xuICAgICAgICBiYXNlZE9uLFxuICAgICAgICBzZWxlY3RlZEF4aXMsXG4gICAgICAgIGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkLFxuICAgICAgICBzdGFydHNFbnRlcmluZyxcbiAgICAgICAgc3RhcnRzRXhpdGluZyxcbiAgICAgICAgYWRkRW5kT2Zmc2V0LFxuICAgICAgICBhZGRTdGFydE9mZnNldCxcbiAgICAgICAgYWRkT2Zmc2V0VmFsdWUgPSAwLFxuICAgICAgICBlbmRPZmZzZXRWYWx1ZSA9IDAsXG4gICAgICB9ID0gZXZlbnRDb25maWc7XG5cbiAgICAgIGNvbnN0IGlzWEF4aXMgPSBzZWxlY3RlZEF4aXMgPT09ICdYX0FYSVMnO1xuXG4gICAgICBpZiAoYmFzZWRPbiA9PT0gRXZlbnRCYXNlZE9uLlZJRVdQT1JUKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXNYQXhpc1xuICAgICAgICAgID8gc2Nyb2xsTGVmdCAvIHNjcm9sbFdpZHRoXG4gICAgICAgICAgOiBzY3JvbGxUb3AgLyBzY3JvbGxIZWlnaHQ7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gc3RhdGUuc2Nyb2xsUGVyY2VudCkge1xuICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKHBhcmFtZXRlckNoYW5nZWQoY29udGludW91c1BhcmFtZXRlckdyb3VwSWQsIHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzY3JvbGxQZXJjZW50OiB2YWx1ZSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZWRQYXJhbWV0ZXJJZCA9IGdldE5hbWVzcGFjZWRQYXJhbWV0ZXJJZChcbiAgICAgICAgICBldmVudFN0YXRlS2V5LFxuICAgICAgICAgIGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgbGV0IG9mZnNldFN0YXJ0UGVyYyA9IChhZGRTdGFydE9mZnNldCA/IGFkZE9mZnNldFZhbHVlIDogMCkgLyAxMDA7XG4gICAgICAgIGxldCBvZmZzZXRFbmRQZXJjID0gKGFkZEVuZE9mZnNldCA/IGVuZE9mZnNldFZhbHVlIDogMCkgLyAxMDA7XG5cbiAgICAgICAgLy8gZmxpcCB0aGUgb2Zmc2V0IHBlcmNlbnRhZ2VzIGRlcGVuZGluZyBvbiBzdGFydCAvIGV4aXQgdHlwZVxuICAgICAgICBvZmZzZXRTdGFydFBlcmMgPSBzdGFydHNFbnRlcmluZ1xuICAgICAgICAgID8gb2Zmc2V0U3RhcnRQZXJjXG4gICAgICAgICAgOiAxIC0gb2Zmc2V0U3RhcnRQZXJjO1xuICAgICAgICBvZmZzZXRFbmRQZXJjID0gc3RhcnRzRXhpdGluZyA/IG9mZnNldEVuZFBlcmMgOiAxIC0gb2Zmc2V0RW5kUGVyYztcblxuICAgICAgICBjb25zdCBvZmZzZXRFbGVtZW50VG9wID1cbiAgICAgICAgICBlbGVtZW50UmVjdC50b3AgK1xuICAgICAgICAgIE1hdGgubWluKGVsZW1lbnRSZWN0LmhlaWdodCAqIG9mZnNldFN0YXJ0UGVyYywgdmlzaWJsZUhlaWdodCk7XG4gICAgICAgIGNvbnN0IG9mZnNldEVsZW1lbnRCb3R0b20gPVxuICAgICAgICAgIGVsZW1lbnRSZWN0LnRvcCArIGVsZW1lbnRSZWN0LmhlaWdodCAqIG9mZnNldEVuZFBlcmM7XG4gICAgICAgIGNvbnN0IG9mZnNldEhlaWdodCA9IG9mZnNldEVsZW1lbnRCb3R0b20gLSBvZmZzZXRFbGVtZW50VG9wO1xuXG4gICAgICAgIGNvbnN0IGZpeGVkU2Nyb2xsSGVpZ2h0ID0gTWF0aC5taW4oXG4gICAgICAgICAgdmlzaWJsZUhlaWdodCArIG9mZnNldEhlaWdodCxcbiAgICAgICAgICBzY3JvbGxIZWlnaHRcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmaXhlZFNjcm9sbFRvcCA9IE1hdGgubWluKFxuICAgICAgICAgIE1hdGgubWF4KDAsIHZpc2libGVIZWlnaHQgLSBvZmZzZXRFbGVtZW50VG9wKSxcbiAgICAgICAgICBmaXhlZFNjcm9sbEhlaWdodFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBmaXhlZFNjcm9sbFBlcmMgPSBmaXhlZFNjcm9sbFRvcCAvIGZpeGVkU2Nyb2xsSGVpZ2h0O1xuXG4gICAgICAgIGlmIChmaXhlZFNjcm9sbFBlcmMgIT09IHN0YXRlLnNjcm9sbFBlcmNlbnQpIHtcbiAgICAgICAgICBzdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgIHBhcmFtZXRlckNoYW5nZWQobmFtZXNwYWNlZFBhcmFtZXRlcklkLCBmaXhlZFNjcm9sbFBlcmMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNjcm9sbFBlcmNlbnQ6IGZpeGVkU2Nyb2xsUGVyYyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBbU0NST0xMX0lOVE9fVklFV106IHNjcm9sbEludG9PdXRPZlZpZXdPcHRpb25zLFxuICBbU0NST0xMX09VVF9PRl9WSUVXXTogc2Nyb2xsSW50b091dE9mVmlld09wdGlvbnMsXG5cbiAgW1BBR0VfU0NST0xMX0RPV05dOiB7XG4gICAgLi4uYmFzZVNjcm9sbEFjdGlvbkdyb3VwT3B0aW9ucyxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdvcHRpb25zJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciAnc3RhdGUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgaGFuZGxlcjogd2hlblNjcm9sbERpcmVjdGlvbkNoYW5nZSgob3B0aW9ucywgc3RhdGUpID0+IHtcbiAgICAgIGlmIChzdGF0ZS5zY3JvbGxpbmdEb3duKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1NTQgLSBFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGdvdCAxLlxuICAgICAgICBhY3Rpb25Hcm91cENyZWF0b3Iob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSksXG4gIH0sXG5cbiAgW1BBR0VfU0NST0xMX1VQXToge1xuICAgIC4uLmJhc2VTY3JvbGxBY3Rpb25Hcm91cE9wdGlvbnMsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnb3B0aW9ucycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3N0YXRlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgIGhhbmRsZXI6IHdoZW5TY3JvbGxEaXJlY3Rpb25DaGFuZ2UoKG9wdGlvbnMsIHN0YXRlKSA9PiB7XG4gICAgICBpZiAoIXN0YXRlLnNjcm9sbGluZ0Rvd24pIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjU1NCAtIEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZ290IDEuXG4gICAgICAgIGFjdGlvbkdyb3VwQ3JlYXRvcihvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgfSxcblxuICBbUEFHRV9GSU5JU0hdOiB7XG4gICAgdHlwZXM6ICdyZWFkeXN0YXRlY2hhbmdlIElYMl9QQUdFX1VQREFURScsXG4gICAgaGFuZGxlcjogd2l0aEZpbHRlcihpc0VsZW1lbnQsIHdoZW5QYWdlTG9hZEZpbmlzaChhY3Rpb25Hcm91cENyZWF0b3IpKSxcbiAgfSxcblxuICBbUEFHRV9TVEFSVF06IHtcbiAgICB0eXBlczogJ3JlYWR5c3RhdGVjaGFuZ2UgSVgyX1BBR0VfVVBEQVRFJyxcbiAgICBoYW5kbGVyOiB3aXRoRmlsdGVyKGlzRWxlbWVudCwgd2hlblBhZ2VMb2FkU3RhcnQoYWN0aW9uR3JvdXBDcmVhdG9yKSksXG4gIH0sXG59O1xuIl0sIm5hbWVzIjpbIk1PVVNFX0NMSUNLIiwiTU9VU0VfU0VDT05EX0NMSUNLIiwiTU9VU0VfRE9XTiIsIk1PVVNFX1VQIiwiTU9VU0VfT1ZFUiIsIk1PVVNFX09VVCIsIkRST1BET1dOX0NMT1NFIiwiRFJPUERPV05fT1BFTiIsIlNMSURFUl9BQ1RJVkUiLCJTTElERVJfSU5BQ1RJVkUiLCJUQUJfQUNUSVZFIiwiVEFCX0lOQUNUSVZFIiwiTkFWQkFSX0NMT1NFIiwiTkFWQkFSX09QRU4iLCJNT1VTRV9NT1ZFIiwiUEFHRV9TQ1JPTExfRE9XTiIsIlNDUk9MTF9JTlRPX1ZJRVciLCJTQ1JPTExfT1VUX09GX1ZJRVciLCJQQUdFX1NDUk9MTF9VUCIsIlNDUk9MTElOR19JTl9WSUVXIiwiUEFHRV9GSU5JU0giLCJFQ09NTUVSQ0VfQ0FSVF9DTE9TRSIsIkVDT01NRVJDRV9DQVJUX09QRU4iLCJQQUdFX1NUQVJUIiwiUEFHRV9TQ1JPTEwiLCJFdmVudFR5cGVDb25zdHMiLCJDT01QT05FTlRfQUNUSVZFIiwiQ09NUE9ORU5UX0lOQUNUSVZFIiwiQ09MT05fREVMSU1JVEVSIiwiSVgyRW5naW5lQ29uc3RhbnRzIiwiZ2V0TmFtZXNwYWNlZFBhcmFtZXRlcklkIiwiSVgyVmFuaWxsYVV0aWxzIiwiY29tcG9zYWJsZUZpbHRlciIsInByZWRpY2F0ZSIsIm9wdGlvbnMiLCJpc0VsZW1lbnQiLCJlbGVtZW50IiwibmF0aXZlRXZlbnQiLCJ0YXJnZXQiLCJjb250YWluc0VsZW1lbnQiLCJjb250YWlucyIsImlzT3JDb250YWluc0VsZW1lbnQiLCJmbG93IiwiZ2V0QXV0b1N0b3BFdmVudCIsInN0b3JlIiwiYXV0b1N0b3BFdmVudElkIiwiaXhEYXRhIiwiZ2V0U3RhdGUiLCJldmVudHMiLCJldmVudFRvU3RvcCIsIkFVVE9fU1RPUF9ESVNBQkxFRF9FVkVOVFMiLCJldmVudFR5cGVJZCIsImhhc0F1dG9TdG9wRXZlbnQiLCJldmVudCIsImFjdGlvbiIsImV2ZW50QWN0aW9uIiwiY29uZmlnIiwiQm9vbGVhbiIsImFjdGlvbkdyb3VwQ3JlYXRvciIsImV2ZW50U3RhdGVLZXkiLCJzdGF0ZSIsImlkIiwiZXZlbnRJZCIsImFjdGlvbkxpc3RJZCIsInN0b3BBY3Rpb25Hcm91cCIsImV2ZW50VGFyZ2V0Iiwic3BsaXQiLCJnZXQiLCJzdGFydEFjdGlvbkdyb3VwIiwid2l0aEZpbHRlciIsImZpbHRlciIsImhhbmRsZXIiLCJiYXNlQWN0aW9uR3JvdXBPcHRpb25zIiwiYmFzZUFjdGl2aXR5QWN0aW9uR3JvdXBPcHRpb25zIiwidHlwZXMiLCJqb2luIiwiU0NST0xMX0VWRU5UX1RZUEVTIiwid2luZG93IiwidGhyb3R0bGUiLCJkb2N1bWVudCIsIk1PVVNFX09WRVJfT1VUX1RZUEVTIiwiYmFzZVNjcm9sbEFjdGlvbkdyb3VwT3B0aW9ucyIsImdldERvY3VtZW50U3RhdGUiLCJzdXBwb3J0T2Zmc2V0IiwicGFnZVhPZmZzZXQiLCJ1bmRlZmluZWQiLCJpc0NTUzFDb21wYXQiLCJjb21wYXRNb2RlIiwicm9vdEVsZW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJib2R5Iiwic2Nyb2xsTGVmdCIsInNjcm9sbFRvcCIsInBhZ2VZT2Zmc2V0Iiwic3RpZmZTY3JvbGxUb3AiLCJjbGFtcCIsInNjcm9sbEhlaWdodCIsImlubmVySGVpZ2h0Iiwic2Nyb2xsV2lkdGgiLCJjbGllbnRXaWR0aCIsImNsaWVudEhlaWdodCIsImlubmVyV2lkdGgiLCJhcmVCb3hlc0ludGVyc2VjdGluZyIsImEiLCJiIiwibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaXNFbGVtZW50SG92ZXJlZCIsInR5cGUiLCJyZWxhdGVkVGFyZ2V0IiwiY29udGFpbnNUYXJnZXQiLCJjb250YWluc1JlbGF0ZWQiLCJpc0VsZW1lbnRWaXNpYmxlIiwic2Nyb2xsT2Zmc2V0VmFsdWUiLCJzY3JvbGxPZmZzZXRVbml0IiwiaXNQWCIsIm9mZnNldFBhZGRpbmciLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aGVuQ29tcG9uZW50QWN0aXZlQ2hhbmdlIiwib2xkU3RhdGUiLCJpc0FjdGl2ZSIsImluZGV4T2YiLCJuZXdTdGF0ZSIsIndoZW5FbGVtZW50SG92ZXJDaGFuZ2UiLCJlbGVtZW50SG92ZXJlZCIsIndoZW5FbGVtZW50VmlzaWJpbHR5Q2hhbmdlIiwiZWxlbWVudFZpc2libGUiLCJ3aGVuU2Nyb2xsRGlyZWN0aW9uQ2hhbmdlIiwic2Nyb2xsSGVpZ2h0Qm91bmRzIiwicGVyY2VudFRvcCIsIk51bWJlciIsInRvRml4ZWQiLCJzY3JvbGxUb3BQYWRkaW5nIiwic2Nyb2xsaW5nRG93biIsInNjcm9sbERpcmVjdGlvbkNoYW5nZWQiLCJhbmNob3JUb3AiLCJpbkJvdW5kcyIsInBvaW50SW50ZXJzZWN0cyIsInBvaW50IiwicmVjdCIsIndoZW5QYWdlTG9hZEZpbmlzaCIsImZpbmlzaGVkIiwicmVhZHlTdGF0ZSIsImZpbnNoZWQiLCJ3aGVuUGFnZUxvYWRTdGFydCIsInN0YXJ0ZWQiLCJ3aGVuQ2xpY2tDb3VudENoYW5nZSIsImNsaWNrQ291bnQiLCJnZXRDb21wb25lbnRBY3RpdmVPcHRpb25zIiwiYWxsb3dOZXN0ZWRDaGlsZHJlbkV2ZW50cyIsImdldENvbXBvbmVudEluYWN0aXZlT3B0aW9ucyIsInNjcm9sbEludG9PdXRPZlZpZXdPcHRpb25zIiwidHJpZ2dlcmVkIiwiTU9VU0VfT1VUX1JPVU5EX1RIUkVTSE9MRCIsImV2ZW50Q29uZmlnIiwiY2xpZW50WCIsImNsaWVudFkiLCJwYWdlWCIsInBhZ2VZIiwiYmFzZWRPbiIsInNlbGVjdGVkQXhpcyIsImNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkIiwicmV2ZXJzZSIsInJlc3RpbmdTdGF0ZSIsImlzWEF4aXMiLCJpc01vdXNlT3V0IiwidmFsdWUiLCJuYW1lc3BhY2VkUGFyYW1ldGVySWQiLCJFdmVudEJhc2VkT24iLCJWSUVXUE9SVCIsIk1hdGgiLCJtaW4iLCJQQUdFIiwiRUxFTUVOVCIsImlzTW91c2VFdmVudCIsIndpZHRoIiwiaGVpZ2h0Iiwicm91bmQiLCJkaXNwYXRjaCIsInBhcmFtZXRlckNoYW5nZWQiLCJzY3JvbGxQZXJjZW50IiwidmlzaWJsZUhlaWdodCIsInN0YXJ0c0VudGVyaW5nIiwic3RhcnRzRXhpdGluZyIsImFkZEVuZE9mZnNldCIsImFkZFN0YXJ0T2Zmc2V0IiwiYWRkT2Zmc2V0VmFsdWUiLCJlbmRPZmZzZXRWYWx1ZSIsImVsZW1lbnRSZWN0Iiwib2Zmc2V0U3RhcnRQZXJjIiwib2Zmc2V0RW5kUGVyYyIsIm9mZnNldEVsZW1lbnRUb3AiLCJvZmZzZXRFbGVtZW50Qm90dG9tIiwib2Zmc2V0SGVpZ2h0IiwiZml4ZWRTY3JvbGxIZWlnaHQiLCJmaXhlZFNjcm9sbFRvcCIsIm1heCIsImZpeGVkU2Nyb2xsUGVyYyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFtZUE7OztlQUFBOzs7NkRBbmVpQjs0REFDRDs4REFDRTtpQ0FNWDtrQ0FFeUM7a0NBQ2pCO3dCQUNEOzs7Ozs7QUFFOUIsTUFBTSxFQUNKQSxXQUFXLEVBQ1hDLGtCQUFrQixFQUNsQkMsVUFBVSxFQUNWQyxRQUFRLEVBQ1JDLFVBQVUsRUFDVkMsU0FBUyxFQUNUQyxjQUFjLEVBQ2RDLGFBQWEsRUFDYkMsYUFBYSxFQUNiQyxlQUFlLEVBQ2ZDLFVBQVUsRUFDVkMsWUFBWSxFQUNaQyxZQUFZLEVBQ1pDLFdBQVcsRUFDWEMsVUFBVSxFQUNWQyxnQkFBZ0IsRUFDaEJDLGdCQUFnQixFQUNoQkMsa0JBQWtCLEVBQ2xCQyxjQUFjLEVBQ2RDLGlCQUFpQixFQUNqQkMsV0FBVyxFQUNYQyxvQkFBb0IsRUFDcEJDLG1CQUFtQixFQUNuQkMsVUFBVSxFQUNWQyxXQUFXLEVBQ1osR0FBR0MsZ0NBQWU7QUFFbkIsTUFBTUMsbUJBQW1CO0FBQ3pCLE1BQU1DLHFCQUFxQjtBQUUzQixNQUFNLEVBQUNDLGVBQWUsRUFBQyxHQUFHQyxtQ0FBa0I7QUFFNUMsTUFBTSxFQUFDQyx3QkFBd0IsRUFBQyxHQUFHQyx1QkFBZTtBQUVsRCxNQUFNQyxtQkFDSixDQUFDQyxZQUNELENBQUNDO1FBQ0MsSUFBSSxPQUFPQSxZQUFZLFlBQVlELFVBQVVDLFVBQVU7WUFDckQsT0FBTztRQUNUO1FBQ0EsT0FBT0E7SUFDVDtBQUVGLE1BQU1DLFlBQVlILGlCQUFpQixDQUFDLEVBQUNJLE9BQU8sRUFBRUMsV0FBVyxFQUFDO0lBQ3hELE9BQU9ELFlBQVlDLFlBQVlDLE1BQU07QUFDdkM7QUFFQSxNQUFNQyxrQkFBa0JQLGlCQUFpQixDQUFDLEVBQUNJLE9BQU8sRUFBRUMsV0FBVyxFQUFDO0lBQzlELE9BQU9ELFFBQVFJLFFB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 }), 4609: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "ixData", ({ enumerable: true, get: function() { return ixData; } })); const _sharedconstants = __webpack_require__(7087); const { IX2_RAW_DATA_IMPORTED } = _sharedconstants.IX2EngineActionTypes; const ixData = (state = Object.freeze({}), action)=>{ switch(action.type){ case IX2_RAW_DATA_IMPORTED: { return action.payload.ixData || Object.freeze({}); } default: { return state; } } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZS9yZWR1Y2Vycy9JWDJEYXRhUmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lYMkVuZ2luZUFjdGlvblR5cGVzfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkLWNvbnN0YW50cyc7XG5pbXBvcnQge3Jhd0RhdGFJbXBvcnRlZFBheWxvYWR9IGZyb20gJy4uL2FjdGlvbnMvSVgyRW5naW5lQWN0aW9ucyc7XG5jb25zdCB7SVgyX1JBV19EQVRBX0lNUE9SVEVEfSA9IElYMkVuZ2luZUFjdGlvblR5cGVzO1xuXG50eXBlIGl4RGF0YVJlZHVjZXJBY3Rpb24gPSB7XG4gIHR5cGU6IHR5cGVvZiBJWDJfUkFXX0RBVEFfSU1QT1JURUQ7XG4gIHBheWxvYWQ6IHJhd0RhdGFJbXBvcnRlZFBheWxvYWQ7XG59O1xuXG5leHBvcnQgdHlwZSBpeERhdGFSZWR1Y2VyU3RhdGUgPSByYXdEYXRhSW1wb3J0ZWRQYXlsb2FkWydpeERhdGEnXTtcblxuZXhwb3J0IGNvbnN0IGl4RGF0YSA9IChcbiAgc3RhdGU6IGl4RGF0YVJlZHVjZXJTdGF0ZSA9IE9iamVjdC5mcmVlemUoXG4gICAge31cbiAgKSBhcyByYXdEYXRhSW1wb3J0ZWRQYXlsb2FkWydpeERhdGEnXSxcbiAgYWN0aW9uOiBpeERhdGFSZWR1Y2VyQWN0aW9uXG4pID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgSVgyX1JBV19EQVRBX0lNUE9SVEVEOiB7XG4gICAgICByZXR1cm4gYWN0aW9uLnBheWxvYWQuaXhEYXRhIHx8IE9iamVjdC5mcmVlemUoe30pO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG59O1xuIl0sIm5hbWVzIjpbIml4RGF0YSIsIklYMl9SQVdfREFUQV9JTVBPUlRFRCIsIklYMkVuZ2luZUFjdGlvblR5cGVzIiwic3RhdGUiLCJPYmplY3QiLCJmcmVlemUiLCJhY3Rpb24iLCJ0eXBlIiwicGF5bG9hZCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFXYUE7OztlQUFBQTs7O2lDQVhzQjtBQUVuQyxNQUFNLEVBQUNDLHFCQUFxQixFQUFDLEdBQUdDLHFDQUFvQjtBQVM3QyxNQUFNRixTQUFTLENBQ3BCRyxRQUE0QkMsT0FBT0MsTUFBTSxDQUN2QyxDQUFDLEVBQ2tDLEVBQ3JDQztJQUVBLE9BQVFBLE9BQU9DLElBQUk7UUFDakIsS0FBS047WUFBdUI7Z0JBQzFCLE9BQU9LLE9BQU9FLE9BQU8sQ0FBQ1IsTUFBTSxJQUFJSSxPQUFPQyxNQUFNLENBQUMsQ0FBQztZQUNqRDtRQUNBO1lBQVM7Z0JBQ1AsT0FBT0Y7WUFDVDtJQUNGO0FBQ0YifQ== }), 7718: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "ixInstances", ({ enumerable: true, get: function() { return ixInstances; } })); const _sharedconstants = __webpack_require__(7087); const _shared = __webpack_require__(9468); const _timm = __webpack_require__(1185); const { IX2_RAW_DATA_IMPORTED, IX2_SESSION_STOPPED, IX2_INSTANCE_ADDED, IX2_INSTANCE_STARTED, IX2_INSTANCE_REMOVED, IX2_ANIMATION_FRAME_CHANGED } = _sharedconstants.IX2EngineActionTypes; const { optimizeFloat, applyEasing, createBezierEasing } = _shared.IX2EasingUtils; const { RENDER_GENERAL } = _sharedconstants.IX2EngineConstants; const { getItemConfigByKey, getRenderType, getStyleProp } = _shared.IX2VanillaUtils; const continuousInstance = (state, action)=>{ const { position: lastPosition, parameterId, actionGroups, destinationKeys, smoothing, restingValue, actionTypeId, customEasingFn, skipMotion, skipToValue } = state; const { parameters } = action.payload; let velocity = Math.max(1 - smoothing, 0.01); let paramValue = parameters[parameterId]; if (paramValue == null) { velocity = 1; paramValue = restingValue; } const nextPosition = Math.max(paramValue, 0) || 0; const positionDiff = optimizeFloat(nextPosition - lastPosition); const position = skipMotion ? skipToValue : optimizeFloat(lastPosition + positionDiff * velocity); const keyframePosition = position * 100; if (position === lastPosition && state.current) { return state; } let fromActionItem; let toActionItem; let positionOffset; let positionRange; for(let i = 0, { length } = actionGroups; i < length; i++){ const { keyframe, actionItems } = actionGroups[i]; if (i === 0) { fromActionItem = actionItems[0]; } if (keyframePosition >= keyframe) { fromActionItem = actionItems[0]; const nextGroup = actionGroups[i + 1]; const hasNextItem = nextGroup && keyframePosition !== keyframe; toActionItem = hasNextItem ? nextGroup.actionItems[0] : null; if (hasNextItem) { positionOffset = keyframe / 100; positionRange = (nextGroup.keyframe - keyframe) / 100; } } } const current = {}; if (fromActionItem && !toActionItem) { for(let i = 0, { length } = destinationKeys; i < length; i++){ const key = destinationKeys[i]; current[key] = getItemConfigByKey(actionTypeId, key, fromActionItem.config); } } else if (fromActionItem && toActionItem && positionOffset !== undefined && positionRange !== undefined) { const localPosition = (position - positionOffset) / positionRange; const easing = fromActionItem.config.easing; const eased = applyEasing(easing, localPosition, customEasingFn); for(let i = 0, { length } = destinationKeys; i < length; i++){ const key = destinationKeys[i]; const fromVal = getItemConfigByKey(actionTypeId, key, fromActionItem.config); const toVal = getItemConfigByKey(actionTypeId, key, toActionItem.config); const diff = toVal - fromVal; const value = diff * eased + fromVal; current[key] = value; } } return (0, _timm.merge)(state, { position, current }); }; const timedInstance = (state, action)=>{ const { active, origin, start, immediate, renderType, verbose, actionItem, destination, destinationKeys, pluginDuration, instanceDelay, customEasingFn, skipMotion } = state; const easing = actionItem.config.easing; let { duration, delay } = actionItem.config; if (pluginDuration != null) { duration = pluginDuration; } delay = instanceDelay != null ? instanceDelay : delay; if (renderType === RENDER_GENERAL) { duration = 0; } else if (immediate || skipMotion) { duration = delay = 0; } const { now } = action.payload; if (active && origin) { const delta = now - (start + delay); if (verbose) { const verboseDelta = now - start; const verboseDuration = duration + delay; const verbosePosition = optimizeFloat(Math.min(Math.max(0, verboseDelta / verboseDuration), 1)); state = (0, _timm.set)(state, 'verboseTimeElapsed', verboseDuration * verbosePosition); } if (delta < 0) { return state; } const position = optimizeFloat(Math.min(Math.max(0, delta / duration), 1)); const eased = applyEasing(easing, position, customEasingFn); const newProps = {}; let current = null; if (destinationKeys.length) { // @ts-expect-error - TS2347 - Untyped function calls may not accept type arguments. | TS7006 - Parameter 'result' implicitly has an 'any' type. | TS7006 - Parameter 'key' implicitly has an 'any' type. current = destinationKeys.reduce((result, key)=>{ const destValue = destination[key]; const originVal = parseFloat(origin[key]) || 0; const diff = parseFloat(destValue) - originVal; const value = diff * eased + originVal; result[key] = value; return result; }, {}); } newProps.current = current; newProps.position = position; if (position === 1) { newProps.active = false; newProps.complete = true; } return (0, _timm.merge)(state, newProps); } return state; }; const ixInstances = (state = Object.freeze({}), action)=>{ switch(action.type){ case IX2_RAW_DATA_IMPORTED: { return action.payload.ixInstances || Object.freeze({}); } case IX2_SESSION_STOPPED: { return Object.freeze({}); } case IX2_INSTANCE_ADDED: { const { instanceId, elementId, actionItem, eventId, eventTarget, eventStateKey, actionListId, groupIndex, isCarrier, origin, destination, immediate, verbose, continuous, parameterId, actionGroups, smoothing, restingValue, pluginInstance, pluginDuration, instanceDelay, skipMotion, skipToValue } = action.payload; const { actionTypeId } = actionItem; const renderType = getRenderType(actionTypeId); const styleProp = getStyleProp(renderType, actionTypeId); const destinationKeys = Object.keys(destination).filter((key)=>// Skip null destination values destination[key] != null && // Skip string destination values typeof destination[key] !== 'string'); const { easing } = actionItem.config; return (0, _timm.set)(state, instanceId, { id: instanceId, elementId, active: false, position: 0, start: 0, origin, destination, destinationKeys, immediate, verbose, current: null, actionItem, actionTypeId, eventId, eventTarget, eventStateKey, actionListId, groupIndex, renderType, isCarrier, styleProp, continuous, parameterId, actionGroups, smoothing, restingValue, pluginInstance, pluginDuration, instanceDelay, skipMotion, skipToValue, customEasingFn: Array.isArray(easing) && easing.length === 4 ? createBezierEasing(easing) : undefined }); } case IX2_INSTANCE_STARTED: { const { instanceId, time } = action.payload; return (0, _timm.mergeIn)(state, [ instanceId ], { active: true, complete: false, start: time }); } case IX2_INSTANCE_REMOVED: { const { instanceId } = action.payload; if (!state[instanceId]) { return state; } const newState = {}; const keys = Object.keys(state); const { length } = keys; for(let i = 0; i < length; i++){ const key = keys[i]; if (key !== instanceId) { // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type. | TS2538 - Type 'undefined' cannot be used as an index type. newState[key] = state[key]; } } return newState; } case IX2_ANIMATION_FRAME_CHANGED: { let newState = state; const keys = Object.keys(state); const { length } = keys; for(let i = 0; i < length; i++){ const key = keys[i]; // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type. const instance = state[key]; const reducer = instance.continuous ? continuousInstance : timedInstance; // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'Key'. newState = (0, _timm.set)(newState, key, reducer(instance, action)); } return newState; } default: { return state; } } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZS9yZWR1Y2Vycy9JWDJJbnN0YW5jZXNSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIElYMkVuZ2luZUNvbnN0YW50cyxcbiAgSVgyRW5naW5lQWN0aW9uVHlwZXMsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcblxuaW1wb3J0IHtJWDJFYXNpbmdVdGlscywgSVgyVmFuaWxsYVV0aWxzfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkJztcblxuY29uc3Qge1xuICBJWDJfUkFXX0RBVEFfSU1QT1JURUQsXG4gIElYMl9TRVNTSU9OX1NUT1BQRUQsXG4gIElYMl9JTlNUQU5DRV9BRERFRCxcbiAgSVgyX0lOU1RBTkNFX1NUQVJURUQsXG4gIElYMl9JTlNUQU5DRV9SRU1PVkVELFxuICBJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQsXG59ID0gSVgyRW5naW5lQWN0aW9uVHlwZXM7XG5jb25zdCB7b3B0aW1pemVGbG9hdCwgYXBwbHlFYXNpbmcsIGNyZWF0ZUJlemllckVhc2luZ30gPSBJWDJFYXNpbmdVdGlscztcbmNvbnN0IHtSRU5ERVJfR0VORVJBTH0gPSBJWDJFbmdpbmVDb25zdGFudHM7XG5jb25zdCB7Z2V0SXRlbUNvbmZpZ0J5S2V5LCBnZXRSZW5kZXJUeXBlLCBnZXRTdHlsZVByb3B9ID0gSVgyVmFuaWxsYVV0aWxzO1xuXG5pbXBvcnQge3NldCwgbWVyZ2UsIG1lcmdlSW59IGZyb20gJ3RpbW0nO1xuXG5jb25zdCBjb250aW51b3VzSW5zdGFuY2UgPSAoc3RhdGU6IGFueSwgYWN0aW9uOiBhbnkpID0+IHtcbiAgY29uc3Qge1xuICAgIHBvc2l0aW9uOiBsYXN0UG9zaXRpb24sXG4gICAgcGFyYW1ldGVySWQsXG4gICAgYWN0aW9uR3JvdXBzLFxuICAgIGRlc3RpbmF0aW9uS2V5cyxcbiAgICBzbW9vdGhpbmcsXG4gICAgcmVzdGluZ1ZhbHVlLFxuICAgIGFjdGlvblR5cGVJZCxcbiAgICBjdXN0b21FYXNpbmdGbixcbiAgICBza2lwTW90aW9uLFxuICAgIHNraXBUb1ZhbHVlLFxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3Qge3BhcmFtZXRlcnN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGxldCB2ZWxvY2l0eSA9IE1hdGgubWF4KDEgLSBzbW9vdGhpbmcsIDAuMDEpO1xuICBsZXQgcGFyYW1WYWx1ZSA9IHBhcmFtZXRlcnNbcGFyYW1ldGVySWRdO1xuICBpZiAocGFyYW1WYWx1ZSA9PSBudWxsKSB7XG4gICAgdmVsb2NpdHkgPSAxO1xuICAgIHBhcmFtVmFsdWUgPSByZXN0aW5nVmFsdWU7XG4gIH1cbiAgY29uc3QgbmV4dFBvc2l0aW9uID0gTWF0aC5tYXgocGFyYW1WYWx1ZSwgMCkgfHwgMDtcbiAgY29uc3QgcG9zaXRpb25EaWZmID0gb3B0aW1pemVGbG9hdChuZXh0UG9zaXRpb24gLSBsYXN0UG9zaXRpb24pO1xuICBjb25zdCBwb3NpdGlvbiA9IHNraXBNb3Rpb25cbiAgICA/IHNraXBUb1ZhbHVlXG4gICAgOiBvcHRpbWl6ZUZsb2F0KGxhc3RQb3NpdGlvbiArIHBvc2l0aW9uRGlmZiAqIHZlbG9jaXR5KTtcbiAgY29uc3Qga2V5ZnJhbWVQb3NpdGlvbiA9IHBvc2l0aW9uICogMTAwO1xuXG4gIGlmIChwb3NpdGlvbiA9PT0gbGFzdFBvc2l0aW9uICYmIHN0YXRlLmN1cnJlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZnJvbUFjdGlvbkl0ZW07XG4gIGxldCB0b0FjdGlvbkl0ZW07XG4gIGxldCBwb3NpdGlvbk9mZnNldDtcbiAgbGV0IHBvc2l0aW9uUmFuZ2U7XG5cbiAgZm9yIChsZXQgaSA9IDAsIHtsZW5ndGh9ID0gYWN0aW9uR3JvdXBzOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7a2V5ZnJhbWUsIGFjdGlvbkl0ZW1zfSA9IGFjdGlvbkdyb3Vwc1tpXTtcblxuICAgIGlmIChpID09PSAwKSB7XG4gICAgICBmcm9tQWN0aW9uSXRlbSA9IGFjdGlvbkl0ZW1zWzBdO1xuICAgIH1cblxuICAgIGlmIChrZXlmcmFtZVBvc2l0aW9uID49IGtleWZyYW1lKSB7XG4gICAgICBmcm9tQWN0aW9uSXRlbSA9IGFjdGlvbkl0ZW1zWzBdO1xuXG4gICAgICBjb25zdCBuZXh0R3JvdXAgPSBhY3Rpb25Hcm91cHNbaSArIDFdO1xuICAgICAgY29uc3QgaGFzTmV4dEl0ZW0gPSBuZXh0R3JvdXAgJiYga2V5ZnJhbWVQb3NpdGlvbiAhPT0ga2V5ZnJhbWU7XG5cbiAgICAgIHRvQWN0aW9uSXRlbSA9IGhhc05leHRJdGVtID8gbmV4dEdyb3VwLmFjdGlvbkl0ZW1zWzBdIDogbnVsbDtcblxuICAgICAgaWYgKGhhc05leHRJdGVtKSB7XG4gICAgICAgIHBvc2l0aW9uT2Zmc2V0ID0ga2V5ZnJhbWUgLyAxMDA7XG4gICAgICAgIHBvc2l0aW9uUmFuZ2UgPSAobmV4dEdyb3VwLmtleWZyYW1lIC0ga2V5ZnJhbWUpIC8gMTAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICBpZiAoZnJvbUFjdGlvbkl0ZW0gJiYgIXRvQWN0aW9uSXRlbSkge1xuICAgIGZvciAobGV0IGkgPSAwLCB7bGVuZ3RofSA9IGRlc3RpbmF0aW9uS2V5czsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBkZXN0aW5hdGlvbktleXNbaV07XG4gICAgICBjdXJyZW50W2tleV0gPSBnZXRJdGVtQ29uZmlnQnlLZXkoXG4gICAgICAgIGFjdGlvblR5cGVJZCxcbiAgICAgICAga2V5LFxuICAgICAgICBmcm9tQWN0aW9uSXRlbS5jb25maWdcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIGZyb21BY3Rpb25JdGVtICYmXG4gICAgdG9BY3Rpb25JdGVtICYmXG4gICAgcG9zaXRpb25PZmZzZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHBvc2l0aW9uUmFuZ2UgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICBjb25zdCBsb2NhbFBvc2l0aW9uID0gKHBvc2l0aW9uIC0gcG9zaXRpb25PZmZzZXQpIC8gcG9zaXRpb25SYW5nZTtcbiAgICBjb25zdCBlYXNpbmcgPSBmcm9tQWN0aW9uSXRlbS5jb25maWcuZWFzaW5nO1xuICAgIGNvbnN0IGVhc2VkID0gYXBwbHlFYXNpbmcoZWFzaW5nLCBsb2NhbFBvc2l0aW9uLCBjdXN0b21FYXNpbmdGbik7XG4gICAgZm9yIChsZXQgaSA9IDAsIHtsZW5ndGh9ID0gZGVzdGluYXRpb25LZXlzOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGRlc3RpbmF0aW9uS2V5c1tpXTtcbiAgICAgIGNvbnN0IGZyb21WYWwgPSBnZXRJdGVtQ29uZmlnQnlLZXkoXG4gICAgICAgIGFjdGlvblR5cGVJZCxcbiAgICAgICAga2V5LFxuICAgICAgICBmcm9tQWN0aW9uSXRlbS5jb25maWdcbiAgICAgICk7XG4gICAgICBjb25zdCB0b1ZhbCA9IGdldEl0ZW1Db25maWdCeUtleShhY3Rpb25UeXBlSWQsIGtleSwgdG9BY3Rpb25JdGVtLmNvbmZpZyk7XG4gICAgICBjb25zdCBkaWZmID0gdG9WYWwgLSBmcm9tVmFsO1xuICAgICAgY29uc3QgdmFsdWUgPSBkaWZmICogZWFzZWQgKyBmcm9tVmFsO1xuICAgICAgY3VycmVudFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlKHN0YXRlLCB7XG4gICAgcG9zaXRpb24sXG4gICAgY3VycmVudCxcbiAgfSk7XG59O1xuXG5jb25zdCB0aW1lZEluc3RhbmNlID0gKHN0YXRlOiBhbnksIGFjdGlvbjogYW55KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmUsXG4gICAgb3JpZ2luLFxuICAgIHN0YXJ0LFxuICAgIGltbWVkaWF0ZSxcbiAgICByZW5kZXJUeXBlLFxuICAgIHZlcmJvc2UsXG4gICAgYWN0aW9uSXRlbSxcbiAgICBkZXN0aW5hdGlvbixcbiAgICBkZXN0aW5hdGlvbktleXMsXG4gICAgcGx1Z2luRHVyYXRpb24sXG4gICAgaW5zdGFuY2VEZWxheSxcbiAgICBjdXN0b21FYXNpbmdGbixcbiAgICBza2lwTW90aW9uLFxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgZWFzaW5nID0gYWN0aW9uSXRlbS5jb25maWcuZWFzaW5nO1xuICBsZXQge2R1cmF0aW9uLCBkZWxheX0gPSBhY3Rpb25JdGVtLmNvbmZpZztcblxuICBpZiAocGx1Z2luRHVyYXRpb24gIT0gbnVsbCkge1xuICAgIGR1cmF0aW9uID0gcGx1Z2luRHVyYXRpb247XG4gIH1cblxuICBkZWxheSA9IGluc3RhbmNlRGVsYXkgIT0gbnVsbCA/IGluc3RhbmNlRGVsYXkgOiBkZWxheTtcblxuICBpZiAocmVuZGVyVHlwZSA9PT0gUkVOREVSX0dFTkVSQUwpIHtcbiAgICBkdXJhdGlvbiA9IDA7XG4gIH0gZWxzZSBpZiAoaW1tZWRpYXRlIHx8IHNraXBNb3Rpb24pIHtcbiAgICBkdXJhdGlvbiA9IGRlbGF5ID0gMDtcbiAgfVxuICBjb25zdCB7bm93fSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGlmIChhY3RpdmUgJiYgb3JpZ2luKSB7XG4gICAgY29uc3QgZGVsdGEgPSBub3cgLSAoc3RhcnQgKyBkZWxheSk7XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgY29uc3QgdmVyYm9zZURlbHRhID0gbm93IC0gc3RhcnQ7XG4gICAgICBjb25zdCB2ZXJib3NlRHVyYXRpb24gPSBkdXJhdGlvbiArIGRlbGF5O1xuICAgICAgY29uc3QgdmVyYm9zZVBvc2l0aW9uID0gb3B0aW1pemVGbG9hdChcbiAgICAgICAgTWF0aC5taW4oTWF0aC5tYXgoMCwgdmVyYm9zZURlbHRhIC8gdmVyYm9zZUR1cmF0aW9uKSwgMSlcbiAgICAgICk7XG4gICAgICBzdGF0ZSA9IHNldChcbiAgICAgICAgc3RhdGUsXG4gICAgICAgICd2ZXJib3NlVGltZUVsYXBzZWQnLFxuICAgICAgICB2ZXJib3NlRHVyYXRpb24gKiB2ZXJib3NlUG9zaXRpb25cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGRlbHRhIDwgMCkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc2l0aW9uID0gb3B0aW1pemVGbG9hdChNYXRoLm1pbihNYXRoLm1heCgwLCBkZWx0YSAvIGR1cmF0aW9uKSwgMSkpO1xuICAgIGNvbnN0IGVhc2VkID0gYXBwbHlFYXNpbmcoZWFzaW5nLCBwb3NpdGlvbiwgY3VzdG9tRWFzaW5nRm4pO1xuXG4gICAgY29uc3QgbmV3UHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgIGxldCBjdXJyZW50ID0gbnVsbDtcblxuICAgIGlmIChkZXN0aW5hdGlvbktleXMubGVuZ3RoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ3IC0gVW50eXBlZCBmdW5jdGlvbiBjYWxscyBtYXkgbm90IGFjY2VwdCB0eXBlIGFyZ3VtZW50cy4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3Jlc3VsdCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2tleScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICAgIGN1cnJlbnQgPSBkZXN0aW5hdGlvbktleXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIGFueT4+KChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICBjb25zdCBkZXN0VmFsdWUgPSBkZXN0aW5hdGlvbltrZXldO1xuICAgICAgICBjb25zdCBvcmlnaW5WYWwgPSBwYXJzZUZsb2F0KG9yaWdpbltrZXldKSB8fCAwO1xuICAgICAgICBjb25zdCBkaWZmID0gcGFyc2VGbG9hdChkZXN0VmFsdWUpIC0gb3JpZ2luVmFsO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRpZmYgKiBlYXNlZCArIG9yaWdpblZhbDtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBuZXdQcm9wcy5jdXJyZW50ID0gY3VycmVudDtcbiAgICBuZXdQcm9wcy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuXG4gICAgaWYgKHBvc2l0aW9uID09PSAxKSB7XG4gICAgICBuZXdQcm9wcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIG5ld1Byb3BzLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2Uoc3RhdGUsIG5ld1Byb3BzKTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59O1xuXG50eXBlIGl4SW5zdGFuY2VzUmVkdWNlclN0YXRlID0gUmVjb3JkPFxuICBzdHJpbmcsXG4gIC8vIFRPRE86IG1hbnkgb2YgdGhlIHZhbGlkIGZpZWxkcyBhcmUgc3RpbGwgbWlzc2luZyBpbiB0aGlzIHNoYXBlIC0gYWRkIHRoZW0sIHBsZWFzZVxuICB7Y29udGludW91czogYm9vbGVhbjsgYWN0aW9uTGlzdElkOiBzdHJpbmc7IHZlcmJvc2U6IGJvb2xlYW59XG4+O1xuXG5leHBvcnQgY29uc3QgaXhJbnN0YW5jZXMgPSAoXG4gIHN0YXRlOiBpeEluc3RhbmNlc1JlZHVjZXJTdGF0ZSA9IE9iamVjdC5mcmVlemUoe30pLFxuICBhY3Rpb246IGFueVxuKTogaXhJbnN0YW5jZXNSZWR1Y2VyU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBJWDJfUkFXX0RBVEFfSU1QT1JURUQ6IHtcbiAgICAgIHJldHVybiBhY3Rpb24ucGF5bG9hZC5peEluc3RhbmNlcyB8fCBPYmplY3QuZnJlZXplKHt9KTtcbiAgICB9XG4gICAgY2FzZSBJWDJfU0VTU0lPTl9TVE9QUEVEOiB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgfVxuICAgIGNhc2UgSVgyX0lOU1RBTkNFX0FEREVEOiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAgYWN0aW9uSXRlbSxcbiAgICAgICAgZXZlbnRJZCxcbiAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgIGV2ZW50U3RhdGVLZXksXG4gICAgICAgIGFjdGlvbkxpc3RJZCxcbiAgICAgICAgZ3JvdXBJbmRleCxcbiAgICAgICAgaXNDYXJyaWVyLFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICBpbW1lZGlhdGUsXG4gICAgICAgIHZlcmJvc2UsXG4gICAgICAgIGNvbnRpbnVvdXMsXG4gICAgICAgIHBhcmFtZXRlcklkLFxuICAgICAgICBhY3Rpb25Hcm91cHMsXG4gICAgICAgIHNtb290aGluZyxcbiAgICAgICAgcmVzdGluZ1ZhbHVlLFxuICAgICAgICBwbHVnaW5JbnN0YW5jZSxcbiAgICAgICAgcGx1Z2luRHVyYXRpb24sXG4gICAgICAgIGluc3RhbmNlRGVsYXksXG4gICAgICAgIHNraXBNb3Rpb24sXG4gICAgICAgIHNraXBUb1ZhbHVlLFxuICAgICAgfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gICAgICBjb25zdCB7YWN0aW9uVHlwZUlkfSA9IGFjdGlvbkl0ZW07XG4gICAgICBjb25zdCByZW5kZXJUeXBlID0gZ2V0UmVuZGVyVHlwZShhY3Rpb25UeXBlSWQpO1xuICAgICAgY29uc3Qgc3R5bGVQcm9wID0gZ2V0U3R5bGVQcm9wKHJlbmRlclR5cGUsIGFjdGlvblR5cGVJZCk7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbktleXMgPSBPYmplY3Qua2V5cyhkZXN0aW5hdGlvbikuZmlsdGVyKFxuICAgICAgICAoa2V5KSA9PlxuICAgICAgICAgIC8vIFNraXAgbnVsbCBkZXN0aW5hdGlvbiB2YWx1ZXNcbiAgICAgICAgICBkZXN0aW5hdGlvbltrZXldICE9IG51bGwgJiZcbiAgICAgICAgICAvLyBTa2lwIHN0cmluZyBkZXN0aW5hdGlvbiB2YWx1ZXNcbiAgICAgICAgICB0eXBlb2YgZGVzdGluYXRpb25ba2V5XSAhPT0gJ3N0cmluZydcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHtlYXNpbmd9ID0gYWN0aW9uSXRlbS5jb25maWc7XG5cbiAgICAgIHJldHVybiBzZXQoc3RhdGUsIGluc3RhbmNlSWQsIHtcbiAgICAgICAgaWQ6IGluc3RhbmNlSWQsXG4gICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgcG9zaXRpb246IDAsXG4gICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICBkZXN0aW5hdGlvbktleXMsXG4gICAgICAgIGltbWVkaWF0ZSxcbiAgICAgICAgdmVyYm9zZSxcbiAgICAgICAgY3VycmVudDogbnVsbCxcbiAgICAgICAgYWN0aW9uSXRlbSxcbiAgICAgICAgYWN0aW9uVHlwZUlkLFxuICAgICAgICBldmVudElkLFxuICAgICAgICBldmVudFRhcmdldCxcbiAgICAgICAgZXZlbnRTdGF0ZUtleSxcbiAgICAgICAgYWN0aW9uTGlzdElkLFxuICAgICAgICBncm91cEluZGV4LFxuICAgICAgICByZW5kZXJUeXBlLFxuICAgICAgICBpc0NhcnJpZXIsXG4gICAgICAgIHN0eWxlUHJvcCxcbiAgICAgICAgY29udGludW91cyxcbiAgICAgICAgcGFyYW1ldGVySWQsXG4gICAgICAgIGFjdGlvbkdyb3VwcyxcbiAgICAgICAgc21vb3RoaW5nLFxuICAgICAgICByZXN0aW5nVmFsdWUsXG4gICAgICAgIHBsdWdpbkluc3RhbmNlLFxuICAgICAgICBwbHVnaW5EdXJhdGlvbixcbiAgICAgICAgaW5zdGFuY2VEZWxheSxcbiAgICAgICAgc2tpcE1vdGlvbixcbiAgICAgICAgc2tpcFRvVmFsdWUsXG4gICAgICAgIGN1c3RvbUVhc2luZ0ZuOlxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoZWFzaW5nKSAmJiBlYXNpbmcubGVuZ3RoID09PSA0XG4gICAgICAgICAgICA/IC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdhbnlbXScgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ0lYMkVhc2luZ0N1c3RvbVR5cGUnLlxuICAgICAgICAgICAgICBjcmVhdGVCZXppZXJFYXNpbmcoZWFzaW5nKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY2FzZSBJWDJfSU5TVEFOQ0VfU1RBUlRFRDoge1xuICAgICAgY29uc3Qge2luc3RhbmNlSWQsIHRpbWV9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICByZXR1cm4gbWVyZ2VJbihzdGF0ZSwgW2luc3RhbmNlSWRdLCB7XG4gICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgY29tcGxldGU6IGZhbHNlLFxuICAgICAgICBzdGFydDogdGltZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjYXNlIElYMl9JTlNUQU5DRV9SRU1PVkVEOiB7XG4gICAgICBjb25zdCB7aW5zdGFuY2VJZH0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIGlmICghc3RhdGVbaW5zdGFuY2VJZF0pIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzdGF0ZSk7XG4gICAgICBjb25zdCB7bGVuZ3RofSA9IGtleXM7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmIChrZXkgIT09IGluc3RhbmNlSWQpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTM4IC0gVHlwZSAndW5kZWZpbmVkJyBjYW5ub3QgYmUgdXNlZCBhcyBhbiBpbmRleCB0eXBlLiB8IFRTMjUzOCAtIFR5cGUgJ3VuZGVmaW5lZCcgY2Fubm90IGJlIHVzZWQgYXMgYW4gaW5kZXggdHlwZS5cbiAgICAgICAgICBuZXdTdGF0ZVtrZXldID0gc3RhdGVba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cbiAgICBjYXNlIElYMl9BTklNQVRJT05fRlJBTUVfQ0hBTkdFRDoge1xuICAgICAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc3RhdGUpO1xuICAgICAgY29uc3Qge2xlbmd0aH0gPSBrZXlzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTM4IC0gVHlwZSAndW5kZWZpbmVkJyBjYW5ub3QgYmUgdXNlZCBhcyBhbiBpbmRleCB0eXBlLlxuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHN0YXRlW2tleV07XG4gICAgICAgIGNvbnN0IHJlZHVjZXIgPSBpbnN0YW5jZS5jb250aW51b3VzXG4gICAgICAgICAgPyBjb250aW51b3VzSW5zdGFuY2VcbiAgICAgICAgICA6IHRpbWVkSW5zdGFuY2U7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdzdHJpbmcgfCB1bmRlZmluZWQnIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdLZXknLlxuICAgICAgICBuZXdTdGF0ZSA9IHNldChuZXdTdGF0ZSwga2V5LCByZWR1Y2VyKGluc3RhbmNlLCBhY3Rpb24pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJpeEluc3RhbmNlcyIsIklYMl9SQVdfREFUQV9JTVBPUlRFRCIsIklYMl9TRVNTSU9OX1NUT1BQRUQiLCJJWDJfSU5TVEFOQ0VfQURERUQiLCJJWDJfSU5TVEFOQ0VfU1RBUlRFRCIsIklYMl9JTlNUQU5DRV9SRU1PVkVEIiwiSVgyX0FOSU1BVElPTl9GUkFNRV9DSEFOR0VEIiwiSVgyRW5naW5lQWN0aW9uVHlwZXMiLCJvcHRpbWl6ZUZsb2F0IiwiYXBwbHlFYXNpbmciLCJjcmVhdGVCZXppZXJFYXNpbmciLCJJWDJFYXNpbmdVdGlscyIsIlJFTkRFUl9HRU5FUkFMIiwiSVgyRW5naW5lQ29uc3RhbnRzIiwiZ2V0SXRlbUNvbmZpZ0J5S2V5IiwiZ2V0UmVuZGVyVHlwZSIsImdldFN0eWxlUHJvcCIsIklYMlZhbmlsbGFVdGlscyIsImNvbnRpbnVvdXNJbnN0YW5jZSIsInN0YXRlIiwiYWN0aW9uIiwicG9zaXRpb24iLCJsYXN0UG9zaXRpb24iLCJwYXJhbWV0ZXJJZCIsImFjdGlvbkdyb3VwcyIsImRlc3RpbmF0aW9uS2V5cyIsInNtb290aGluZyIsInJlc3RpbmdWYWx1ZSIsImFjdGlvblR5cGVJZCIsImN1c3RvbUVhc2luZ0ZuIiwic2tpcE1vdGlvbiIsInNraXBUb1ZhbHVlIiwicGFyYW1ldGVycyIsInBheWxvYWQiLCJ2ZWxvY2l0eSIsIk1hdGgiLCJtYXgiLCJwYXJhbVZhbHVlIiwibmV4dFBvc2l0aW9uIiwicG9zaXRpb25EaWZmIiwia2V5ZnJhbWVQb3NpdGlvbiIsImN1cnJlbnQiLCJmcm9tQWN0aW9uSXRlbSIsInRvQWN0aW9uSXRlbSIsInBvc2l0aW9uT2Zmc2V0IiwicG9zaXRpb25SYW5nZSIsImkiLCJsZW5ndGgiLCJrZXlmcmFtZSIsImFjdGlvbkl0ZW1zIiwibmV4dEdyb3VwIiwiaGFzTmV4dEl0ZW0iLCJrZXkiLCJjb25maWciLCJ1bmRlZmluZWQiLCJsb2NhbFBvc2l0aW9uIiwiZWFzaW5nIiwiZWFzZWQiLCJmcm9tVmFsIiwidG9WYWwiLCJkaWZmIiwidmFsdWUiLCJtZXJnZSIsInRpbWVkSW5zdGFuY2UiLCJhY3RpdmUiLCJvcmlnaW4iLCJzdGFydCIsImltbWVkaWF0ZSIsInJlbmRlclR5cGUiLCJ2ZXJib3NlIiwiYWN0aW9uSXRlbSIsImRlc3RpbmF0aW9uIiwicGx1Z2luRHVyYXRpb24iLCJpbnN0YW5jZURlbGF5IiwiZHVyYXRpb24iLCJkZWxheSIsIm5vdyIsImRlbHRhIiwidmVyYm9zZURlbHRhIiwidmVyYm9zZUR1cmF0aW9uIiwidmVyYm9zZVBvc2l0aW9uIiwibWluIiwic2V0IiwibmV3UHJvcHMiLCJyZWR1Y2UiLCJyZXN1bHQiLCJkZXN0VmFsdWUiLCJvcmlnaW5WYWwiLCJwYXJzZUZsb2F0IiwiY29tcGxldGUiLCJPYmplY3QiLCJmcmVlemUiLCJ0eXBlIiwiaW5zdGFuY2VJZCIsImVsZW1lbnRJZCIsImV2ZW50SWQiLCJldmVudFRhcmdldCIsImV2ZW50U3RhdGVLZXkiLCJhY3Rpb25MaXN0SWQiLCJncm91cEluZGV4IiwiaXNDYXJyaWVyIiwiY29udGludW91cyIsInBsdWdpbkluc3RhbmNlIiwic3R5bGVQcm9wIiwia2V5cyIsImZpbHRlciIsImlkIiwiQXJyYXkiLCJpc0FycmF5IiwidGltZSIsIm1lcmdlSW4iLCJuZXdTdGF0ZSIsImluc3RhbmNlIiwicmVkdWNlciJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFtTmFBOzs7ZUFBQUE7OztpQ0FoTk47d0JBRXVDO3NCQWNaO0FBWmxDLE1BQU0sRUFDSkMscUJBQXFCLEVBQ3JCQyxtQkFBbUIsRUFDbkJDLGtCQUFrQixFQUNsQkMsb0JBQW9CLEVBQ3BCQyxvQkFBb0IsRUFDcEJDLDJCQUEyQixFQUM1QixHQUFHQyxxQ0FBb0I7QUFDeEIsTUFBTSxFQUFDQyxhQUFhLEVBQUVDLFdBQVcsRUFBRUMsa0JBQWtCLEVBQUMsR0FBR0Msc0JBQWM7QUFDdkUsTUFBTSxFQUFDQyxjQUFjLEVBQUMsR0FBR0MsbUNBQWtCO0FBQzNDLE1BQU0sRUFBQ0Msa0JBQWtCLEVBQUVDLGFBQWEsRUFBRUMsWUFBWSxFQUFDLEdBQUdDLHVCQUFl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 }), 1540: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "ixParameters", ({ enumerable: true, get: function() { return ixParameters; } })); const _sharedconstants = __webpack_require__(7087); const { IX2_RAW_DATA_IMPORTED, IX2_SESSION_STOPPED, IX2_PARAMETER_CHANGED } = _sharedconstants.IX2EngineActionTypes; const ixParameters = (state = {}, action)=>{ switch(action.type){ case IX2_RAW_DATA_IMPORTED: { return(// @ts-expect-error - Further investigation is needed as looks like IX2_RAW_DATA_IMPORTED is never triggered with ixParameters action.payload.ixParameters || {}); } case IX2_SESSION_STOPPED: { return {}; } case IX2_PARAMETER_CHANGED: { const { key, value } = action.payload; state[key] = value; return state; } default: { return state; } } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZS9yZWR1Y2Vycy9JWDJQYXJhbWV0ZXJzUmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lYMkVuZ2luZUFjdGlvblR5cGVzfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkLWNvbnN0YW50cyc7XG5pbXBvcnQge3Jhd0RhdGFJbXBvcnRlZFBheWxvYWR9IGZyb20gJy4uL2FjdGlvbnMvSVgyRW5naW5lQWN0aW9ucyc7XG5jb25zdCB7SVgyX1JBV19EQVRBX0lNUE9SVEVELCBJWDJfU0VTU0lPTl9TVE9QUEVELCBJWDJfUEFSQU1FVEVSX0NIQU5HRUR9ID1cbiAgSVgyRW5naW5lQWN0aW9uVHlwZXM7XG5cbnR5cGUgaXhQYXJhbWV0ZXJzQWN0aW9uID1cbiAgfCB7XG4gICAgICB0eXBlOiB0eXBlb2YgSVgyX1JBV19EQVRBX0lNUE9SVEVEO1xuICAgICAgcGF5bG9hZDogcmF3RGF0YUltcG9ydGVkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9TRVNTSU9OX1NUT1BQRUQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfUEFSQU1FVEVSX0NIQU5HRUQ7XG4gICAgICBwYXlsb2FkOiB7a2V5OiBzdHJpbmc7IHZhbHVlOiBudW1iZXJ9O1xuICAgIH07XG5cbnR5cGUgaXhQYXJhbWV0ZXJzUmVkdWNlclN0YXRlID0gUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcblxuLy8gcHJldHRpZXItaWdub3JlXG5leHBvcnQgY29uc3QgaXhQYXJhbWV0ZXJzID0gKFxuICBzdGF0ZTogaXhQYXJhbWV0ZXJzUmVkdWNlclN0YXRlID0gey8qbXV0YWJsZSBmbGF0IHN0YXRlKi99LFxuICBhY3Rpb246IGl4UGFyYW1ldGVyc0FjdGlvblxuKTogaXhQYXJhbWV0ZXJzUmVkdWNlclN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgSVgyX1JBV19EQVRBX0lNUE9SVEVEOiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gRnVydGhlciBpbnZlc3RpZ2F0aW9uIGlzIG5lZWRlZCBhcyBsb29rcyBsaWtlIElYMl9SQVdfREFUQV9JTVBPUlRFRCBpcyBuZXZlciB0cmlnZ2VyZWQgd2l0aCBpeFBhcmFtZXRlcnNcbiAgICAgICAgYWN0aW9uLnBheWxvYWQuaXhQYXJhbWV0ZXJzIHx8IHsvKm11dGFibGUgZmxhdCBzdGF0ZSovfVxuICAgICAgKTtcbiAgICB9XG4gICAgY2FzZSBJWDJfU0VTU0lPTl9TVE9QUEVEOiB7XG4gICAgICByZXR1cm4gey8qbXV0YWJsZSBmbGF0IHN0YXRlKi99O1xuICAgIH1cbiAgICBjYXNlIElYMl9QQVJBTUVURVJfQ0hBTkdFRDoge1xuICAgICAgY29uc3Qge2tleSwgdmFsdWV9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICBzdGF0ZVtrZXldID0gdmFsdWU7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiaXhQYXJhbWV0ZXJzIiwiSVgyX1JBV19EQVRBX0lNUE9SVEVEIiwiSVgyX1NFU1NJT05fU1RPUFBFRCIsIklYMl9QQVJBTUVURVJfQ0hBTkdFRCIsIklYMkVuZ2luZUFjdGlvblR5cGVzIiwic3RhdGUiLCJhY3Rpb24iLCJ0eXBlIiwicGF5bG9hZCIsImtleSIsInZhbHVlIl0sIm1hcHBpbmdzIjoiOzs7OytCQXFCYUE7OztlQUFBQTs7O2lDQXJCc0I7QUFFbkMsTUFBTSxFQUFDQyxxQkFBcUIsRUFBRUMsbUJBQW1CLEVBQUVDLHFCQUFxQixFQUFDLEdBQ3ZFQyxxQ0FBb0I7QUFrQmYsTUFBTUosZUFBZSxDQUMxQkssUUFBa0MsQ0FBdUIsQ0FBQyxFQUMxREM7SUFFQSxPQUFRQSxPQUFPQyxJQUFJO1FBQ2pCLEtBQUtOO1lBQXVCO2dCQUMxQixPQUNFLDhIQUE4SDtnQkFDOUhLLE9BQU9FLE9BQU8sQ0FBQ1IsWUFBWSxJQUFJLENBQXVCO1lBRTFEO1FBQ0EsS0FBS0U7WUFBcUI7Z0JBQ3hCLE9BQU8sQ0FBdUI7WUFDaEM7UUFDQSxLQUFLQztZQUF1QjtnQkFDMUIsTUFBTSxFQUFDTSxHQUFHLEVBQUVDLEtBQUssRUFBQyxHQUFHSixPQUFPRSxPQUFPO2dCQUNuQ0gsS0FBSyxDQUFDSSxJQUFJLEdBQUdDO2dCQUNiLE9BQU9MO1lBQ1Q7UUFDQTtZQUFTO2dCQUNQLE9BQU9BO1lBQ1Q7SUFDRjtBQUNGIn0= }), 7243: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "default", ({ enumerable: true, get: function() { return _default; } })); const _redux = __webpack_require__(9516); const _IX2DataReducer = __webpack_require__(4609); const _IX2RequestReducer = __webpack_require__(628); const _IX2SessionReducer = __webpack_require__(5862); const _shared = __webpack_require__(9468); const _IX2InstancesReducer = __webpack_require__(7718); const _IX2ParametersReducer = __webpack_require__(1540); const { ixElements } = _shared.IX2ElementsReducer; const _default = (0, _redux.combineReducers)({ ixData: _IX2DataReducer.ixData, ixRequest: _IX2RequestReducer.ixRequest, ixSession: _IX2SessionReducer.ixSession, ixElements, ixInstances: _IX2InstancesReducer.ixInstances, ixParameters: _IX2ParametersReducer.ixParameters }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZS9yZWR1Y2Vycy9JWDJSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3RvcmUsIGNvbWJpbmVSZWR1Y2VycywgdHlwZSBSZWR1Y2VyfSBmcm9tICdyZWR1eCc7XG5cbmltcG9ydCB7aXhEYXRhLCB0eXBlIGl4RGF0YVJlZHVjZXJTdGF0ZX0gZnJvbSAnLi9JWDJEYXRhUmVkdWNlcic7XG5pbXBvcnQge2l4UmVxdWVzdH0gZnJvbSAnLi9JWDJSZXF1ZXN0UmVkdWNlcic7XG5pbXBvcnQge2l4U2Vzc2lvbn0gZnJvbSAnLi9JWDJTZXNzaW9uUmVkdWNlcic7XG5pbXBvcnQge0lYMkVsZW1lbnRzUmVkdWNlcn0gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZCc7XG5jb25zdCB7aXhFbGVtZW50c30gPSBJWDJFbGVtZW50c1JlZHVjZXI7XG5pbXBvcnQge2l4SW5zdGFuY2VzfSBmcm9tICcuL0lYMkluc3RhbmNlc1JlZHVjZXInO1xuaW1wb3J0IHtpeFBhcmFtZXRlcnN9IGZyb20gJy4vSVgyUGFyYW1ldGVyc1JlZHVjZXInO1xuXG50eXBlIElYMkJyb3dzZXJSZWYgPSBIVE1MRWxlbWVudCB8IERvY3VtZW50IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlID0ge1xuICBpeERhdGE6IFJldHVyblR5cGU8dHlwZW9mIGl4RGF0YT47XG4gIGl4UGFyYW1ldGVyczogUmV0dXJuVHlwZTx0eXBlb2YgaXhQYXJhbWV0ZXJzPjtcbiAgaXhTZXNzaW9uOiBSZXR1cm5UeXBlPHR5cGVvZiBpeFNlc3Npb24+O1xuICBpeEVsZW1lbnRzOiBJWDJFbGVtZW50c1JlZHVjZXIuRWxlbWVudHNTdGF0ZTxJWDJCcm93c2VyUmVmPjtcbiAgaXhJbnN0YW5jZXM6IFJldHVyblR5cGU8dHlwZW9mIGl4SW5zdGFuY2VzPjtcbiAgaXhSZXF1ZXN0OiBSZXR1cm5UeXBlPHR5cGVvZiBpeFJlcXVlc3Q+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tYmluZVJlZHVjZXJzPElYMkVuZ2luZVJlZHVjZXJTdGF0ZVNoYXBlPih7XG4gIGl4RGF0YTogaXhEYXRhIGFzIFJlZHVjZXI8aXhEYXRhUmVkdWNlclN0YXRlPixcbiAgaXhSZXF1ZXN0LFxuICBpeFNlc3Npb24sXG4gIGl4RWxlbWVudHMsXG4gIGl4SW5zdGFuY2VzLFxuICBpeFBhcmFtZXRlcnMsXG59KTtcblxuZXhwb3J0IHR5cGUgSVgyRW5naW5lUmVkdWNlclN0b3JlID0gU3RvcmU8SVgyRW5naW5lUmVkdWNlclN0YXRlU2hhcGU+O1xuIl0sIm5hbWVzIjpbIml4RWxlbWVudHMiLCJJWDJFbGVtZW50c1JlZHVjZXIiLCJjb21iaW5lUmVkdWNlcnMiLCJpeERhdGEiLCJpeFJlcXVlc3QiLCJpeFNlc3Npb24iLCJpeEluc3RhbmNlcyIsIml4UGFyYW1ldGVycyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFxQkE7OztlQUFBOzs7dUJBckJtRDtnQ0FFTDttQ0FDdEI7bUNBQ0E7d0JBQ1M7cUNBRVA7c0NBQ0M7QUFGM0IsTUFBTSxFQUFDQSxVQUFVLEVBQUMsR0FBR0MsMEJBQWtCO01BZXZDLFdBQWVDLElBQUFBLHNCQUFlLEVBQTZCO0lBQ3pEQyxRQUFRQSxzQkFBTTtJQUNkQyxXQUFBQSw0QkFBUztJQUNUQyxXQUFBQSw0QkFBUztJQUNUTDtJQUNBTSxhQUFBQSxnQ0FBVztJQUNYQyxjQUFBQSxrQ0FBWTtBQUNkIn0= }), 628: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "ixRequest", ({ enumerable: true, get: function() { return ixRequest; } })); const _sharedconstants = __webpack_require__(7087); const _timm = __webpack_require__(1185); const { IX2_PREVIEW_REQUESTED, IX2_PLAYBACK_REQUESTED, IX2_STOP_REQUESTED, IX2_CLEAR_REQUESTED } = _sharedconstants.IX2EngineActionTypes; const initialState = { preview: {}, playback: {}, stop: {}, clear: {} }; const stateKeys = Object.create(null, { [IX2_PREVIEW_REQUESTED]: { value: 'preview' }, [IX2_PLAYBACK_REQUESTED]: { value: 'playback' }, [IX2_STOP_REQUESTED]: { value: 'stop' }, [IX2_CLEAR_REQUESTED]: { value: 'clear' } }); const ixRequest = (state = initialState, action)=>{ if (action.type in stateKeys) { const key = [ stateKeys[action.type] ]; return (0, _timm.setIn)(state, [ key ], { ...action.payload }); } return state; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZS9yZWR1Y2Vycy9JWDJSZXF1ZXN0UmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lYMkVuZ2luZUFjdGlvblR5cGVzfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkLWNvbnN0YW50cyc7XG5jb25zdCB7XG4gIElYMl9QUkVWSUVXX1JFUVVFU1RFRCxcbiAgSVgyX1BMQVlCQUNLX1JFUVVFU1RFRCxcbiAgSVgyX1NUT1BfUkVRVUVTVEVELFxuICBJWDJfQ0xFQVJfUkVRVUVTVEVELFxufSA9IElYMkVuZ2luZUFjdGlvblR5cGVzO1xuaW1wb3J0IHtzZXRJbn0gZnJvbSAndGltbSc7XG5pbXBvcnQge1xuICBwbGF5YmFja1JlcXVlc3RlZFBheWxvYWQsXG4gIHByZXZpZXdSZXF1ZXN0ZWRQYXlsb2FkLFxuICBzdG9wUmVxdWVzdGVkUGF5bG9hZCxcbn0gZnJvbSAnLi4vYWN0aW9ucy9JWDJFbmdpbmVBY3Rpb25zJztcblxuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBwcmV2aWV3OiB7fSBhcyBwcmV2aWV3UmVxdWVzdGVkUGF5bG9hZCxcbiAgcGxheWJhY2s6IHt9IGFzIHBsYXliYWNrUmVxdWVzdGVkUGF5bG9hZCxcbiAgc3RvcDoge30gYXMgc3RvcFJlcXVlc3RlZFBheWxvYWQsXG4gIGNsZWFyOiB7fSxcbn07XG5cbmNvbnN0IHN0YXRlS2V5cyA9IE9iamVjdC5jcmVhdGUobnVsbCwge1xuICBbSVgyX1BSRVZJRVdfUkVRVUVTVEVEXToge3ZhbHVlOiAncHJldmlldyd9LFxuICBbSVgyX1BMQVlCQUNLX1JFUVVFU1RFRF06IHt2YWx1ZTogJ3BsYXliYWNrJ30sXG4gIFtJWDJfU1RPUF9SRVFVRVNURURdOiB7dmFsdWU6ICdzdG9wJ30sXG4gIFtJWDJfQ0xFQVJfUkVRVUVTVEVEXToge3ZhbHVlOiAnY2xlYXInfSxcbn0pO1xuXG50eXBlIGl4UmVxdWVzdFN0YXRlID0ge1xuICBwcmV2aWV3OiBwcmV2aWV3UmVxdWVzdGVkUGF5bG9hZDtcbiAgcGxheWJhY2s6IHBsYXliYWNrUmVxdWVzdGVkUGF5bG9hZDtcbiAgc3RvcDogc3RvcFJlcXVlc3RlZFBheWxvYWQ7XG4gIGNsZWFyOiBSZWNvcmQ8bmV2ZXIsIG5ldmVyPjtcbn07XG5cbnR5cGUgaXhSZXF1ZXN0QWN0aW9uID1cbiAgfCB7XG4gICAgICB0eXBlOiB0eXBlb2YgSVgyX1BSRVZJRVdfUkVRVUVTVEVEO1xuICAgICAgcGF5bG9hZDogcHJldmlld1JlcXVlc3RlZFBheWxvYWQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfUExBWUJBQ0tfUkVRVUVTVEVEO1xuICAgICAgcGF5bG9hZDogcGxheWJhY2tSZXF1ZXN0ZWRQYXlsb2FkO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiB0eXBlb2YgSVgyX1NUT1BfUkVRVUVTVEVEO1xuICAgICAgcGF5bG9hZDogc3RvcFJlcXVlc3RlZFBheWxvYWQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfQ0xFQVJfUkVRVUVTVEVEO1xuICAgICAgcGF5bG9hZD86IG5ldmVyO1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCBpeFJlcXVlc3QgPSAoXG4gIHN0YXRlOiBpeFJlcXVlc3RTdGF0ZSA9IGluaXRpYWxTdGF0ZSxcbiAgYWN0aW9uOiBpeFJlcXVlc3RBY3Rpb25cbik6IGl4UmVxdWVzdFN0YXRlID0+IHtcbiAgaWYgKGFjdGlvbi50eXBlIGluIHN0YXRlS2V5cykge1xuICAgIGNvbnN0IGtleSA9IFtzdGF0ZUtleXNbYWN0aW9uLnR5cGVdXSBhcyBhbnk7XG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCBba2V5XSwgey4uLmFjdGlvbi5wYXlsb2FkfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufTtcbiJdLCJuYW1lcyI6WyJpeFJlcXVlc3QiLCJJWDJfUFJFVklFV19SRVFVRVNURUQiLCJJWDJfUExBWUJBQ0tfUkVRVUVTVEVEIiwiSVgyX1NUT1BfUkVRVUVTVEVEIiwiSVgyX0NMRUFSX1JFUVVFU1RFRCIsIklYMkVuZ2luZUFjdGlvblR5cGVzIiwiaW5pdGlhbFN0YXRlIiwicHJldmlldyIsInBsYXliYWNrIiwic3RvcCIsImNsZWFyIiwic3RhdGVLZXlzIiwiT2JqZWN0IiwiY3JlYXRlIiwidmFsdWUiLCJzdGF0ZSIsImFjdGlvbiIsInR5cGUiLCJrZXkiLCJzZXRJbiIsInBheWxvYWQiXSwibWFwcGluZ3MiOiI7Ozs7K0JBcURhQTs7O2VBQUFBOzs7aUNBckRzQjtzQkFPZjtBQU5wQixNQUFNLEVBQ0pDLHFCQUFxQixFQUNyQkMsc0JBQXNCLEVBQ3RCQyxrQkFBa0IsRUFDbEJDLG1CQUFtQixFQUNwQixHQUFHQyxxQ0FBb0I7QUFReEIsTUFBTUMsZUFBZTtJQUNuQkMsU0FBUyxDQUFDO0lBQ1ZDLFVBQVUsQ0FBQztJQUNYQyxNQUFNLENBQUM7SUFDUEMsT0FBTyxDQUFDO0FBQ1Y7QUFFQSxNQUFNQyxZQUFZQyxPQUFPQyxNQUFNLENBQUMsTUFBTTtJQUNwQyxDQUFDWixzQkFBc0IsRUFBRTtRQUFDYSxPQUFPO0lBQVM7SUFDMUMsQ0FBQ1osdUJBQXVCLEVBQUU7UUFBQ1ksT0FBTztJQUFVO0lBQzVDLENBQUNYLG1CQUFtQixFQUFFO1FBQUNXLE9BQU87SUFBTTtJQUNwQyxDQUFDVixvQkFBb0IsRUFBRTtRQUFDVSxPQUFPO0lBQU87QUFDeEM7QUEyQk8sTUFBTWQsWUFBWSxDQUN2QmUsUUFBd0JULFlBQVksRUFDcENVO0lBRUEsSUFBSUEsT0FBT0MsSUFBSSxJQUFJTixXQUFXO1FBQzVCLE1BQU1PLE1BQU07WUFBQ1AsU0FBUyxDQUFDSyxPQUFPQyxJQUFJLENBQUM7U0FBQztRQUNwQyxPQUFPRSxJQUFBQSxXQUFLLEVBQUNKLE9BQU87WUFBQ0c7U0FBSSxFQUFFO1lBQUMsR0FBR0YsT0FBT0ksT0FBTztRQUFBO0lBQy9DO0lBQ0EsT0FBT0w7QUFDVCJ9 }), 5862: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "ixSession", ({ enumerable: true, get: function() { return ixSession; } })); const _sharedconstants = __webpack_require__(7087); const _timm = __webpack_require__(1185); const { IX2_SESSION_INITIALIZED, IX2_SESSION_STARTED, IX2_TEST_FRAME_RENDERED, IX2_SESSION_STOPPED, IX2_EVENT_LISTENER_ADDED, IX2_EVENT_STATE_CHANGED, IX2_ANIMATION_FRAME_CHANGED, IX2_ACTION_LIST_PLAYBACK_CHANGED, IX2_VIEWPORT_WIDTH_CHANGED, IX2_MEDIA_QUERIES_DEFINED } = _sharedconstants.IX2EngineActionTypes; const initialState = { active: false, tick: 0, eventListeners: [], eventState: {}, playbackState: {}, viewportWidth: 0, mediaQueryKey: null, hasBoundaryNodes: false, hasDefinedMediaQueries: false, reducedMotion: false }; const TEST_FRAME_STEPS_SIZE = 20; const ixSession = (state = initialState, action)=>{ switch(action.type){ case IX2_SESSION_INITIALIZED: { const { hasBoundaryNodes, reducedMotion } = action.payload; return (0, _timm.merge)(state, { hasBoundaryNodes, reducedMotion }); } case IX2_SESSION_STARTED: { return (0, _timm.set)(state, 'active', true); } case IX2_TEST_FRAME_RENDERED: { const { payload: { step = TEST_FRAME_STEPS_SIZE } } = action; return (0, _timm.set)(state, 'tick', state.tick + step); } case IX2_SESSION_STOPPED: { return initialState; } case IX2_ANIMATION_FRAME_CHANGED: { const { payload: { now } } = action; return (0, _timm.set)(state, 'tick', now); } case IX2_EVENT_LISTENER_ADDED: { const eventListeners = (0, _timm.addLast)(state.eventListeners, action.payload); return (0, _timm.set)(state, 'eventListeners', eventListeners); } case IX2_EVENT_STATE_CHANGED: { const { stateKey, newState } = action.payload; return (0, _timm.setIn)(state, [ 'eventState', stateKey ], newState); } case IX2_ACTION_LIST_PLAYBACK_CHANGED: { const { actionListId, isPlaying } = action.payload; return (0, _timm.setIn)(state, [ 'playbackState', actionListId ], isPlaying); } case IX2_VIEWPORT_WIDTH_CHANGED: { const { width, mediaQueries } = action.payload; const mediaQueryCount = mediaQueries.length; let mediaQueryKey = null; for(let i = 0; i < mediaQueryCount; i++){ const { key, min, max } = mediaQueries[i]; if (width >= min && width <= max) { mediaQueryKey = key; break; } } return (0, _timm.merge)(state, { viewportWidth: width, mediaQueryKey }); } case IX2_MEDIA_QUERIES_DEFINED: { return (0, _timm.set)(state, 'hasDefinedMediaQueries', true); } default: { return state; } } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZS9yZWR1Y2Vycy9JWDJTZXNzaW9uUmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lYMkVuZ2luZUFjdGlvblR5cGVzfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkLWNvbnN0YW50cyc7XG5jb25zdCB7XG4gIElYMl9TRVNTSU9OX0lOSVRJQUxJWkVELFxuICBJWDJfU0VTU0lPTl9TVEFSVEVELFxuICBJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCxcbiAgSVgyX1NFU1NJT05fU1RPUFBFRCxcbiAgSVgyX0VWRU5UX0xJU1RFTkVSX0FEREVELFxuICBJWDJfRVZFTlRfU1RBVEVfQ0hBTkdFRCxcbiAgSVgyX0FOSU1BVElPTl9GUkFNRV9DSEFOR0VELFxuICBJWDJfQUNUSU9OX0xJU1RfUExBWUJBQ0tfQ0hBTkdFRCxcbiAgSVgyX1ZJRVdQT1JUX1dJRFRIX0NIQU5HRUQsXG4gIElYMl9NRURJQV9RVUVSSUVTX0RFRklORUQsXG59ID0gSVgyRW5naW5lQWN0aW9uVHlwZXM7XG5pbXBvcnQge3NldCwgc2V0SW4sIGFkZExhc3QsIG1lcmdlfSBmcm9tICd0aW1tJztcbmltcG9ydCB7XG4gIGFjdGlvbkxpc3RQbGF5YmFja0NoYW5nZWRQYXlsb2FkLFxuICBhbmltYXRpb25GcmFtZUNoYW5nZWRQYXlsb2FkLFxuICBldmVudExpc3RlbmVyQWRkZWRQYXlsb2FkLFxuICBldmVudFN0YXRlQ2hhbmdlZFBheWxvYWQsXG4gIHNlc3Npb25Jbml0aWFsaXplZFBheWxvYWQsXG4gIHRlc3RGcmFtZVJlbmRlcmVkUGF5bG9hZCxcbiAgdmlld3BvcnRXaWR0aENoYW5nZWRQYXlsb2FkLFxufSBmcm9tICcuLi9hY3Rpb25zL0lYMkVuZ2luZUFjdGlvbnMnO1xuXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGFjdGl2ZTogZmFsc2UsXG4gIHRpY2s6IDAsXG4gIGV2ZW50TGlzdGVuZXJzOiBbXSxcbiAgZXZlbnRTdGF0ZToge30sXG4gIHBsYXliYWNrU3RhdGU6IHt9LFxuICB2aWV3cG9ydFdpZHRoOiAwLFxuICBtZWRpYVF1ZXJ5S2V5OiBudWxsLFxuICBoYXNCb3VuZGFyeU5vZGVzOiBmYWxzZSxcbiAgaGFzRGVmaW5lZE1lZGlhUXVlcmllczogZmFsc2UsXG4gIHJlZHVjZWRNb3Rpb246IGZhbHNlLFxufTtcblxuY29uc3QgVEVTVF9GUkFNRV9TVEVQU19TSVpFID0gMjA7XG5cbnR5cGUgaXhTZXNzaW9uUmVkdWNlclN0YXRlID0ge1xuICBhY3RpdmU6IGJvb2xlYW47XG4gIHRpY2s6IG51bWJlcjtcbiAgZXZlbnRMaXN0ZW5lcnM6IGFueVtdO1xuICBldmVudFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBwbGF5YmFja1N0YXRlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB2aWV3cG9ydFdpZHRoOiBudW1iZXI7XG4gIG1lZGlhUXVlcnlLZXk6IG51bGw7XG4gIGhhc0JvdW5kYXJ5Tm9kZXM6IGJvb2xlYW47XG4gIGhhc0RlZmluZWRNZWRpYVF1ZXJpZXM6IGJvb2xlYW47XG4gIHJlZHVjZWRNb3Rpb246IGJvb2xlYW47XG59O1xuXG50eXBlIGl4U2Vzc2lvblJlZHVjZXJBY3Rpb24gPVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfU0VTU0lPTl9JTklUSUFMSVpFRDtcbiAgICAgIHBheWxvYWQ6IHNlc3Npb25Jbml0aWFsaXplZFBheWxvYWQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfU0VTU0lPTl9TVEFSVEVEO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiB0eXBlb2YgSVgyX1RFU1RfRlJBTUVfUkVOREVSRUQ7XG4gICAgICBwYXlsb2FkOiB0ZXN0RnJhbWVSZW5kZXJlZFBheWxvYWQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfU0VTU0lPTl9TVE9QUEVEO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiB0eXBlb2YgSVgyX0FOSU1BVElPTl9GUkFNRV9DSEFOR0VEO1xuICAgICAgcGF5bG9hZDogYW5pbWF0aW9uRnJhbWVDaGFuZ2VkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9FVkVOVF9MSVNURU5FUl9BRERFRDtcbiAgICAgIHBheWxvYWQ6IGV2ZW50TGlzdGVuZXJBZGRlZFBheWxvYWQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfRVZFTlRfU1RBVEVfQ0hBTkdFRDtcbiAgICAgIHBheWxvYWQ6IGV2ZW50U3RhdGVDaGFuZ2VkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9BQ1RJT05fTElTVF9QTEFZQkFDS19DSEFOR0VEO1xuICAgICAgcGF5bG9hZDogYWN0aW9uTGlzdFBsYXliYWNrQ2hhbmdlZFBheWxvYWQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBJWDJfVklFV1BPUlRfV0lEVEhfQ0hBTkdFRDtcbiAgICAgIHBheWxvYWQ6IHZpZXdwb3J0V2lkdGhDaGFuZ2VkUGF5bG9hZDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogdHlwZW9mIElYMl9NRURJQV9RVUVSSUVTX0RFRklORUQ7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IGl4U2Vzc2lvbiA9IChcbiAgc3RhdGU6IGl4U2Vzc2lvblJlZHVjZXJTdGF0ZSA9IGluaXRpYWxTdGF0ZSxcbiAgYWN0aW9uOiBpeFNlc3Npb25SZWR1Y2VyQWN0aW9uXG4pOiBpeFNlc3Npb25SZWR1Y2VyU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBJWDJfU0VTU0lPTl9JTklUSUFMSVpFRDoge1xuICAgICAgY29uc3Qge2hhc0JvdW5kYXJ5Tm9kZXMsIHJlZHVjZWRNb3Rpb259ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICByZXR1cm4gbWVyZ2Uoc3RhdGUsIHtcbiAgICAgICAgaGFzQm91bmRhcnlOb2RlcyxcbiAgICAgICAgcmVkdWNlZE1vdGlvbixcbiAgICAgIH0pIGFzIGl4U2Vzc2lvblJlZHVjZXJTdGF0ZTtcbiAgICB9XG4gICAgY2FzZSBJWDJfU0VTU0lPTl9TVEFSVEVEOiB7XG4gICAgICByZXR1cm4gc2V0KHN0YXRlLCAnYWN0aXZlJywgdHJ1ZSk7XG4gICAgfVxuICAgIGNhc2UgSVgyX1RFU1RfRlJBTUVfUkVOREVSRUQ6IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGF5bG9hZDoge3N0ZXAgPSBURVNUX0ZSQU1FX1NURVBTX1NJWkV9LFxuICAgICAgfSA9IGFjdGlvbjtcbiAgICAgIHJldHVybiBzZXQoc3RhdGUsICd0aWNrJywgc3RhdGUudGljayArIHN0ZXApO1xuICAgIH1cbiAgICBjYXNlIElYMl9TRVNTSU9OX1NUT1BQRUQ6IHtcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgfVxuICAgIGNhc2UgSVgyX0FOSU1BVElPTl9GUkFNRV9DSEFOR0VEOiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBheWxvYWQ6IHtub3d9LFxuICAgICAgfSA9IGFjdGlvbjtcbiAgICAgIHJldHVybiBzZXQoc3RhdGUsICd0aWNrJywgbm93KTtcbiAgICB9XG4gICAgY2FzZSBJWDJfRVZFTlRfTElTVEVORVJfQURERUQ6IHtcbiAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXJzID0gYWRkTGFzdChzdGF0ZS5ldmVudExpc3RlbmVycywgYWN0aW9uLnBheWxvYWQpO1xuICAgICAgcmV0dXJuIHNldChzdGF0ZSwgJ2V2ZW50TGlzdGVuZXJzJywgZXZlbnRMaXN0ZW5lcnMpO1xuICAgIH1cbiAgICBjYXNlIElYMl9FVkVOVF9TVEFURV9DSEFOR0VEOiB7XG4gICAgICBjb25zdCB7c3RhdGVLZXksIG5ld1N0YXRlfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgcmV0dXJuIHNldEluKHN0YXRlLCBbJ2V2ZW50U3RhdGUnLCBzdGF0ZUtleV0sIG5ld1N0YXRlKTtcbiAgICB9XG4gICAgY2FzZSBJWDJfQUNUSU9OX0xJU1RfUExBWUJBQ0tfQ0hBTkdFRDoge1xuICAgICAgY29uc3Qge2FjdGlvbkxpc3RJZCwgaXNQbGF5aW5nfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgcmV0dXJuIHNldEluKHN0YXRlLCBbJ3BsYXliYWNrU3RhdGUnLCBhY3Rpb25MaXN0SWRdLCBpc1BsYXlpbmcpO1xuICAgIH1cbiAgICBjYXNlIElYMl9WSUVXUE9SVF9XSURUSF9DSEFOR0VEOiB7XG4gICAgICBjb25zdCB7d2lkdGgsIG1lZGlhUXVlcmllc30gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIGNvbnN0IG1lZGlhUXVlcnlDb3VudCA9IG1lZGlhUXVlcmllcy5sZW5ndGg7XG4gICAgICBsZXQgbWVkaWFRdWVyeUtleSA9IG51bGw7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lZGlhUXVlcnlDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHtrZXksIG1pbiwgbWF4fSA9IG1lZGlhUXVlcmllc1tpXTtcbiAgICAgICAgaWYgKHdpZHRoID49IG1pbiAmJiB3aWR0aCA8PSBtYXgpIHtcbiAgICAgICAgICBtZWRpYVF1ZXJ5S2V5ID0ga2V5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVyZ2Uoc3RhdGUsIHtcbiAgICAgICAgdmlld3BvcnRXaWR0aDogd2lkdGgsXG4gICAgICAgIG1lZGlhUXVlcnlLZXksXG4gICAgICB9KSBhcyBpeFNlc3Npb25SZWR1Y2VyU3RhdGU7XG4gICAgfVxuICAgIGNhc2UgSVgyX01FRElBX1FVRVJJRVNfREVGSU5FRDoge1xuICAgICAgcmV0dXJuIHNldChzdGF0ZSwgJ2hhc0RlZmluZWRNZWRpYVF1ZXJpZXMnLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJpeFNlc3Npb24iLCJJWDJfU0VTU0lPTl9JTklUSUFMSVpFRCIsIklYMl9TRVNTSU9OX1NUQVJURUQiLCJJWDJfVEVTVF9GUkFNRV9SRU5ERVJFRCIsIklYMl9TRVNTSU9OX1NUT1BQRUQiLCJJWDJfRVZFTlRfTElTVEVORVJfQURERUQiLCJJWDJfRVZFTlRfU1RBVEVfQ0hBTkdFRCIsIklYMl9BTklNQVRJT05fRlJBTUVfQ0hBTkdFRCIsIklYMl9BQ1RJT05fTElTVF9QTEFZQkFDS19DSEFOR0VEIiwiSVgyX1ZJRVdQT1JUX1dJRFRIX0NIQU5HRUQiLCJJWDJfTUVESUFfUVVFUklFU19ERUZJTkVEIiwiSVgyRW5naW5lQWN0aW9uVHlwZXMiLCJpbml0aWFsU3RhdGUiLCJhY3RpdmUiLCJ0aWNrIiwiZXZlbnRMaXN0ZW5lcnMiLCJldmVudFN0YXRlIiwicGxheWJhY2tTdGF0ZSIsInZpZXdwb3J0V2lkdGgiLCJtZWRpYVF1ZXJ5S2V5IiwiaGFzQm91bmRhcnlOb2RlcyIsImhhc0RlZmluZWRNZWRpYVF1ZXJpZXMiLCJyZWR1Y2VkTW90aW9uIiwiVEVTVF9GUkFNRV9TVEVQU19TSVpFIiwic3RhdGUiLCJhY3Rpb24iLCJ0eXBlIiwicGF5bG9hZCIsIm1lcmdlIiwic2V0Iiwic3RlcCIsIm5vdyIsImFkZExhc3QiLCJzdGF0ZUtleSIsIm5ld1N0YXRlIiwic2V0SW4iLCJhY3Rpb25MaXN0SWQiLCJpc1BsYXlpbmciLCJ3aWR0aCIsIm1lZGlhUXVlcmllcyIsIm1lZGlhUXVlcnlDb3VudCIsImxlbmd0aCIsImkiLCJrZXkiLCJtaW4iLCJtYXgiXSwibWFwcGluZ3MiOiI7Ozs7K0JBMkZhQTs7O2VBQUFBOzs7aUNBM0ZzQjtzQkFhTTtBQVp6QyxNQUFNLEVBQ0pDLHVCQUF1QixFQUN2QkMsbUJBQW1CLEVBQ25CQyx1QkFBdUIsRUFDdkJDLG1CQUFtQixFQUNuQkMsd0JBQXdCLEVBQ3hCQyx1QkFBdUIsRUFDdkJDLDJCQUEyQixFQUMzQkMsZ0NBQWdDLEVBQ2hDQywwQkFBMEIsRUFDMUJDLHlCQUF5QixFQUMxQixHQUFHQyxx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 }), 7377: (function (__unused_webpack_module, exports) { "use strict"; /* global window */ Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { clearPlugin: function() { return clearPlugin; }, createPluginInstance: function() { return createPluginInstance; }, getPluginConfig: function() { return getPluginConfig; }, getPluginDestination: function() { return getPluginDestination; }, getPluginDuration: function() { return getPluginDuration; }, getPluginOrigin: function() { return getPluginOrigin; }, renderPlugin: function() { return renderPlugin; } }); const getPluginConfig = (actionItemConfig)=>{ return actionItemConfig.value; }; const getPluginDuration = (element, actionItem)=>{ if (actionItem.config.duration !== 'auto') { return null; } const duration = parseFloat(element.getAttribute('data-duration')); if (duration > 0) { return duration * 1000; } return parseFloat(element.getAttribute('data-default-duration')) * 1000; }; const getPluginOrigin = (refState)=>{ return refState || { value: 0 }; }; const getPluginDestination = (actionItemConfig)=>{ return { value: actionItemConfig.value }; }; const createPluginInstance = (element)=>{ const lottie = window.Webflow.require('lottie'); if (!lottie) return null; const instance = lottie.createInstance(element); instance.stop(); instance.setSubframe(true); return instance; }; const renderPlugin = (pluginInstance, refState, actionItem)=>{ if (!pluginInstance) { return; } const percent = refState[actionItem.actionTypeId].value / 100; pluginInstance.goToFrame(pluginInstance.frames * percent); }; const clearPlugin = (element)=>{ const lottie = window.Webflow.require('lottie'); if (lottie) { lottie.createInstance(element).stop(); } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3BsdWdpbnMvSVgyTG90dGllLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCB3aW5kb3cgKi9cblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkNvbmZpZyA9IChhY3Rpb25JdGVtQ29uZmlnKSA9PiB7XG4gIHJldHVybiBhY3Rpb25JdGVtQ29uZmlnLnZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkR1cmF0aW9uID0gKGVsZW1lbnQsIGFjdGlvbkl0ZW0pID0+IHtcbiAgaWYgKGFjdGlvbkl0ZW0uY29uZmlnLmR1cmF0aW9uICE9PSAnYXV0bycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGR1cmF0aW9uID0gcGFyc2VGbG9hdChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1kdXJhdGlvbicpKTtcblxuICBpZiAoZHVyYXRpb24gPiAwKSB7XG4gICAgcmV0dXJuIGR1cmF0aW9uICogMTAwMDtcbiAgfVxuXG4gIHJldHVybiBwYXJzZUZsb2F0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWRlZmF1bHQtZHVyYXRpb24nKSkgKiAxMDAwO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbk9yaWdpbiA9IChyZWZTdGF0ZSkgPT4ge1xuICByZXR1cm4gcmVmU3RhdGUgfHwge3ZhbHVlOiAwfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5EZXN0aW5hdGlvbiA9IChhY3Rpb25JdGVtQ29uZmlnKSA9PiB7XG4gIHJldHVybiB7dmFsdWU6IGFjdGlvbkl0ZW1Db25maWcudmFsdWV9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBsdWdpbkluc3RhbmNlID0gKGVsZW1lbnQpID0+IHtcbiAgY29uc3QgbG90dGllID0gd2luZG93LldlYmZsb3cucmVxdWlyZSgnbG90dGllJyk7XG4gIGlmICghbG90dGllKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgaW5zdGFuY2UgPSBsb3R0aWUuY3JlYXRlSW5zdGFuY2UoZWxlbWVudCk7XG4gIGluc3RhbmNlLnN0b3AoKTtcbiAgaW5zdGFuY2Uuc2V0U3ViZnJhbWUodHJ1ZSk7XG4gIHJldHVybiBpbnN0YW5jZTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJQbHVnaW4gPSAocGx1Z2luSW5zdGFuY2UsIHJlZlN0YXRlLCBhY3Rpb25JdGVtKSA9PiB7XG4gIGlmICghcGx1Z2luSW5zdGFuY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGVyY2VudCA9IHJlZlN0YXRlW2FjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkXS52YWx1ZSAvIDEwMDtcbiAgcGx1Z2luSW5zdGFuY2UuZ29Ub0ZyYW1lKHBsdWdpbkluc3RhbmNlLmZyYW1lcyAqIHBlcmNlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUGx1Z2luID0gKGVsZW1lbnQpID0+IHtcbiAgY29uc3QgbG90dGllID0gd2luZG93LldlYmZsb3cucmVxdWlyZSgnbG90dGllJyk7XG4gIGlmIChsb3R0aWUpIHtcbiAgICBsb3R0aWUuY3JlYXRlSW5zdGFuY2UoZWxlbWVudCkuc3RvcCgpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbImNsZWFyUGx1Z2luIiwiY3JlYXRlUGx1Z2luSW5zdGFuY2UiLCJnZXRQbHVnaW5Db25maWciLCJnZXRQbHVnaW5EZXN0aW5hdGlvbiIsImdldFBsdWdpbkR1cmF0aW9uIiwiZ2V0UGx1Z2luT3JpZ2luIiwicmVuZGVyUGx1Z2luIiwiYWN0aW9uSXRlbUNvbmZpZyIsInZhbHVlIiwiZWxlbWVudCIsImFjdGlvbkl0ZW0iLCJjb25maWciLCJkdXJhdGlvbiIsInBhcnNlRmxvYXQiLCJnZXRBdHRyaWJ1dGUiLCJyZWZTdGF0ZSIsImxvdHRpZSIsIndpbmRvdyIsIldlYmZsb3ciLCJyZXF1aXJlIiwiaW5zdGFuY2UiLCJjcmVhdGVJbnN0YW5jZSIsInN0b3AiLCJzZXRTdWJmcmFtZSIsInBsdWdpbkluc3RhbmNlIiwicGVyY2VudCIsImFjdGlvblR5cGVJZCIsImdvVG9GcmFtZSIsImZyYW1lcyJdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCOzs7Ozs7Ozs7OztJQTZDSkEsV0FBVztlQUFYQTs7SUFqQkFDLG9CQUFvQjtlQUFwQkE7O0lBMUJBQyxlQUFlO2VBQWZBOztJQXNCQUMsb0JBQW9CO2VBQXBCQTs7SUFsQkFDLGlCQUFpQjtlQUFqQkE7O0lBY0FDLGVBQWU7ZUFBZkE7O0lBaUJBQyxZQUFZO2VBQVpBOzs7QUFuQ04sTUFBTUosa0JBQWtCLENBQUNLO0lBQzlCLE9BQU9BLGlCQUFpQkMsS0FBSztBQUMvQjtBQUVPLE1BQU1KLG9CQUFvQixDQUFDSyxTQUFTQztJQUN6QyxJQUFJQSxXQUFXQyxNQUFNLENBQUNDLFFBQVEsS0FBSyxRQUFRO1FBQ3pDLE9BQU87SUFDVDtJQUVBLE1BQU1BLFdBQVdDLFdBQVdKLFFBQVFLLFlBQVksQ0FBQztJQUVqRCxJQUFJRixXQUFXLEdBQUc7UUFDaEIsT0FBT0EsV0FBVztJQUNwQjtJQUVBLE9BQU9DLFdBQVdKLFFBQVFLLFlBQVksQ0FBQyw0QkFBNEI7QUFDckU7QUFFTyxNQUFNVCxrQkFBa0IsQ0FBQ1U7SUFDOUIsT0FBT0EsWUFBWTtRQUFDUCxPQUFPO0lBQUM7QUFDOUI7QUFFTyxNQUFNTCx1QkFBdUIsQ0FBQ0k7SUFDbkMsT0FBTztRQUFDQyxPQUFPRCxpQkFBaUJDLEtBQUs7SUFBQTtBQUN2QztBQUVPLE1BQU1QLHVCQUF1QixDQUFDUTtJQUNuQyxNQUFNTyxTQUFTQyxPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQztJQUN0QyxJQUFJLENBQUNILFFBQVEsT0FBTztJQUNwQixNQUFNSSxXQUFXSixPQUFPSyxjQUFjLENBQUNaO0lBQ3ZDVyxTQUFTRSxJQUFJO0lBQ2JGLFNBQVNHLFdBQVcsQ0FBQztJQUNyQixPQUFPSDtBQUNUO0FBRU8sTUFBTWQsZUFBZSxDQUFDa0IsZ0JBQWdCVCxVQUFVTDtJQUNyRCxJQUFJLENBQUNjLGdCQUFnQjtRQUNuQjtJQUNGO0lBQ0EsTUFBTUMsVUFBVVYsUUFBUSxDQUFDTCxXQUFXZ0IsWUFBWSxDQUFDLENBQUNsQixLQUFLLEdBQUc7SUFDMURnQixlQUFlRyxTQUFTLENBQUNILGVBQWVJLE1BQU0sR0FBR0g7QUFDbkQ7QUFFTyxNQUFNekIsY0FBYyxDQUFDUztJQUMxQixNQUFNTyxTQUFTQyxPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQztJQUN0QyxJQUFJSCxRQUFRO1FBQ1ZBLE9BQU9LLGNBQWMsQ0FBQ1osU0FBU2EsSUFBSTtJQUNyQztBQUNGIn0= }), 2570: (function (__unused_webpack_module, exports) { "use strict"; /* global document, window */ Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { clearPlugin: function() { return clearPlugin; }, createPluginInstance: function() { return createPluginInstance; }, getPluginConfig: function() { return getPluginConfig; }, getPluginDestination: function() { return getPluginDestination; }, getPluginDuration: function() { return getPluginDuration; }, getPluginOrigin: function() { return getPluginOrigin; }, renderPlugin: function() { return renderPlugin; } }); const FIT_KEY = '--wf-rive-fit'; const ALIGNMENT_KEY = '--wf-rive-alignment'; const queryContainerElement = (elementId)=>document.querySelector(`[data-w-id="${elementId}"]`); const getFrontendModule = ()=>window.Webflow.require('rive'); const getPluginConfig = (actionItemConfig, key)=>actionItemConfig.value.inputs[key]; const getPluginDuration = ()=>null; // Not used by this plugin const getPluginOrigin = (refState, actionItem)=>{ if (refState) return refState; const result = {}; const { inputs = {} } = actionItem.config.value; for(const input in inputs)if (inputs[input] == null) result[input] = 0; return result; }; const getPluginDestination = (actionItemConfig)=>actionItemConfig.value.inputs ?? {}; const createPluginInstance = (element, actionItem)=>{ const selectorGuids = actionItem.config?.target?.selectorGuids || []; if (selectorGuids.length > 0) return element; // In this case, we define pluginInstance as a reference to the container element const pluginElementId = actionItem?.config?.target?.pluginElement; return pluginElementId ? queryContainerElement(pluginElementId) : null; }; const renderPlugin = (containerElement, { PLUGIN_RIVE: props }, actionItem)=>{ const frontendModule = getFrontendModule(); if (!frontendModule) return; const instance = frontendModule.getInstance(containerElement); const StateMachineInputType = frontendModule.rive.StateMachineInputType; const { name, inputs = {} } = actionItem.config.value || {}; function renderRive(riveInstance) { if (riveInstance.loaded) { render(); } else { // Render instance immediately on load and then clean up handler const onLoad = ()=>{ render(); riveInstance?.off('load', onLoad); }; riveInstance?.on('load', onLoad); } function render() { const stateMachineInputs = riveInstance.stateMachineInputs(name); if (stateMachineInputs == null) return; // exit early since no inputs found if (!riveInstance.isPlaying) riveInstance.play(name, false); // set autoplay: false because IX engine is controlling playback. if (FIT_KEY in inputs || ALIGNMENT_KEY in inputs) { const currentLayout = riveInstance.layout; const nextFit = inputs[FIT_KEY] ?? currentLayout.fit; const nextAlignment = inputs[ALIGNMENT_KEY] ?? currentLayout.alignment; if (nextFit !== currentLayout.fit || nextAlignment !== currentLayout.alignment) { riveInstance.layout = currentLayout.copyWith({ fit: nextFit, alignment: nextAlignment }); } } for(const inputName in inputs){ if (inputName === FIT_KEY || inputName === ALIGNMENT_KEY) continue; const machineInput = stateMachineInputs.find((m)=>m.name === inputName); if (machineInput == null) continue; switch(machineInput.type){ case StateMachineInputType.Boolean: { if (inputs[inputName] != null) { const booleanValue = Boolean(inputs[inputName]); machineInput.value = booleanValue; } break; } case StateMachineInputType.Number: { const numberValue = props[inputName]; if (numberValue != null) machineInput.value = numberValue; break; } case StateMachineInputType.Trigger: { if (inputs[inputName]) machineInput.fire(); break; } } } } } // Render rive if the instance is available if (instance?.rive) renderRive(instance.rive); else frontendModule.setLoadHandler(containerElement, renderRive); }; const clearPlugin = (_containerElement, _actionItem)=>null; // Not used by this plugin //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3BsdWdpbnMvSVgyUml2ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZG9jdW1lbnQsIHdpbmRvdyAqL1xuXG5jb25zdCBGSVRfS0VZID0gJy0td2Ytcml2ZS1maXQnO1xuY29uc3QgQUxJR05NRU5UX0tFWSA9ICctLXdmLXJpdmUtYWxpZ25tZW50JztcblxuY29uc3QgcXVlcnlDb250YWluZXJFbGVtZW50ID0gKGVsZW1lbnRJZCkgPT5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtdy1pZD1cIiR7ZWxlbWVudElkfVwiXWApO1xuXG5jb25zdCBnZXRGcm9udGVuZE1vZHVsZSA9ICgpID0+IHdpbmRvdy5XZWJmbG93LnJlcXVpcmUoJ3JpdmUnKTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkNvbmZpZyA9IChhY3Rpb25JdGVtQ29uZmlnLCBrZXkpID0+XG4gIGFjdGlvbkl0ZW1Db25maWcudmFsdWUuaW5wdXRzW2tleV07XG5cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5EdXJhdGlvbiA9ICgpID0+IG51bGw7IC8vIE5vdCB1c2VkIGJ5IHRoaXMgcGx1Z2luXG5cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5PcmlnaW4gPSAocmVmU3RhdGUsIGFjdGlvbkl0ZW0pID0+IHtcbiAgaWYgKHJlZlN0YXRlKSByZXR1cm4gcmVmU3RhdGU7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCB7aW5wdXRzID0ge319ID0gYWN0aW9uSXRlbS5jb25maWcudmFsdWU7XG4gIGZvciAoY29uc3QgaW5wdXQgaW4gaW5wdXRzKSBpZiAoaW5wdXRzW2lucHV0XSA9PSBudWxsKSByZXN1bHRbaW5wdXRdID0gMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5EZXN0aW5hdGlvbiA9IChhY3Rpb25JdGVtQ29uZmlnKSA9PlxuICBhY3Rpb25JdGVtQ29uZmlnLnZhbHVlLmlucHV0cyA/PyB7fTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBsdWdpbkluc3RhbmNlID0gKGVsZW1lbnQsIGFjdGlvbkl0ZW0pID0+IHtcbiAgY29uc3Qgc2VsZWN0b3JHdWlkcyA9IGFjdGlvbkl0ZW0uY29uZmlnPy50YXJnZXQ/LnNlbGVjdG9yR3VpZHMgfHwgW107XG4gIGlmIChzZWxlY3Rvckd1aWRzLmxlbmd0aCA+IDApIHJldHVybiBlbGVtZW50O1xuXG4gIC8vIEluIHRoaXMgY2FzZSwgd2UgZGVmaW5lIHBsdWdpbkluc3RhbmNlIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250YWluZXIgZWxlbWVudFxuICBjb25zdCBwbHVnaW5FbGVtZW50SWQgPSBhY3Rpb25JdGVtPy5jb25maWc/LnRhcmdldD8ucGx1Z2luRWxlbWVudDtcbiAgcmV0dXJuIHBsdWdpbkVsZW1lbnRJZCA/IHF1ZXJ5Q29udGFpbmVyRWxlbWVudChwbHVnaW5FbGVtZW50SWQpIDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJQbHVnaW4gPSAoXG4gIGNvbnRhaW5lckVsZW1lbnQsXG4gIHtQTFVHSU5fUklWRTogcHJvcHN9LFxuICBhY3Rpb25JdGVtXG4pID0+IHtcbiAgY29uc3QgZnJvbnRlbmRNb2R1bGUgPSBnZXRGcm9udGVuZE1vZHVsZSgpO1xuICBpZiAoIWZyb250ZW5kTW9kdWxlKSByZXR1cm47XG4gIGNvbnN0IGluc3RhbmNlID0gZnJvbnRlbmRNb2R1bGUuZ2V0SW5zdGFuY2UoY29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IFN0YXRlTWFjaGluZUlucHV0VHlwZSA9IGZyb250ZW5kTW9kdWxlLnJpdmUuU3RhdGVNYWNoaW5lSW5wdXRUeXBlO1xuICBjb25zdCB7bmFtZSwgaW5wdXRzID0ge319ID0gYWN0aW9uSXRlbS5jb25maWcudmFsdWUgfHwge307XG5cbiAgZnVuY3Rpb24gcmVuZGVyUml2ZShyaXZlSW5zdGFuY2UpIHtcbiAgICBpZiAocml2ZUluc3RhbmNlLmxvYWRlZCkge1xuICAgICAgcmVuZGVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbmRlciBpbnN0YW5jZSBpbW1lZGlhdGVseSBvbiBsb2FkIGFuZCB0aGVuIGNsZWFuIHVwIGhhbmRsZXJcbiAgICAgIGNvbnN0IG9uTG9hZCA9ICgpID0+IHtcbiAgICAgICAgcmVuZGVyKCk7XG4gICAgICAgIHJpdmVJbnN0YW5jZT8ub2ZmKCdsb2FkJywgb25Mb2FkKTtcbiAgICAgIH07XG5cbiAgICAgIHJpdmVJbnN0YW5jZT8ub24oJ2xvYWQnLCBvbkxvYWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHN0YXRlTWFjaGluZUlucHV0cyA9IHJpdmVJbnN0YW5jZS5zdGF0ZU1hY2hpbmVJbnB1dHMobmFtZSk7XG4gICAgICBpZiAoc3RhdGVNYWNoaW5lSW5wdXRzID09IG51bGwpIHJldHVybjsgLy8gZXhpdCBlYXJseSBzaW5jZSBubyBpbnB1dHMgZm91bmRcblxuICAgICAgaWYgKCFyaXZlSW5zdGFuY2UuaXNQbGF5aW5nKSByaXZlSW5zdGFuY2UucGxheShuYW1lLCBmYWxzZSk7IC8vIHNldCBhdXRvcGxheTogZmFsc2UgYmVjYXVzZSBJWCBlbmdpbmUgaXMgY29udHJvbGxpbmcgcGxheWJhY2suXG5cbiAgICAgIGlmIChGSVRfS0VZIGluIGlucHV0cyB8fCBBTElHTk1FTlRfS0VZIGluIGlucHV0cykge1xuICAgICAgICBjb25zdCBjdXJyZW50TGF5b3V0ID0gcml2ZUluc3RhbmNlLmxheW91dDtcbiAgICAgICAgY29uc3QgbmV4dEZpdCA9IGlucHV0c1tGSVRfS0VZXSA/PyBjdXJyZW50TGF5b3V0LmZpdDtcbiAgICAgICAgY29uc3QgbmV4dEFsaWdubWVudCA9IGlucHV0c1tBTElHTk1FTlRfS0VZXSA/PyBjdXJyZW50TGF5b3V0LmFsaWdubWVudDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV4dEZpdCAhPT0gY3VycmVudExheW91dC5maXQgfHxcbiAgICAgICAgICBuZXh0QWxpZ25tZW50ICE9PSBjdXJyZW50TGF5b3V0LmFsaWdubWVudFxuICAgICAgICApIHtcbiAgICAgICAgICByaXZlSW5zdGFuY2UubGF5b3V0ID0gY3VycmVudExheW91dC5jb3B5V2l0aCh7XG4gICAgICAgICAgICBmaXQ6IG5leHRGaXQsXG4gICAgICAgICAgICBhbGlnbm1lbnQ6IG5leHRBbGlnbm1lbnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBpbnB1dE5hbWUgaW4gaW5wdXRzKSB7XG4gICAgICAgIGlmIChpbnB1dE5hbWUgPT09IEZJVF9LRVkgfHwgaW5wdXROYW1lID09PSBBTElHTk1FTlRfS0VZKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBtYWNoaW5lSW5wdXQgPSBzdGF0ZU1hY2hpbmVJbnB1dHMuZmluZChcbiAgICAgICAgICAobSkgPT4gbS5uYW1lID09PSBpbnB1dE5hbWVcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobWFjaGluZUlucHV0ID09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgIHN3aXRjaCAobWFjaGluZUlucHV0LnR5cGUpIHtcbiAgICAgICAgICBjYXNlIFN0YXRlTWFjaGluZUlucHV0VHlwZS5Cb29sZWFuOiB7XG4gICAgICAgICAgICBpZiAoaW5wdXRzW2lucHV0TmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICBjb25zdCBib29sZWFuVmFsdWUgPSBCb29sZWFuKGlucHV0c1tpbnB1dE5hbWVdKTtcbiAgICAgICAgICAgICAgbWFjaGluZUlucHV0LnZhbHVlID0gYm9vbGVhblZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBTdGF0ZU1hY2hpbmVJbnB1dFR5cGUuTnVtYmVyOiB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXJWYWx1ZSA9IHByb3BzW2lucHV0TmFtZV07XG4gICAgICAgICAgICBpZiAobnVtYmVyVmFsdWUgIT0gbnVsbCkgbWFjaGluZUlucHV0LnZhbHVlID0gbnVtYmVyVmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIFN0YXRlTWFjaGluZUlucHV0VHlwZS5UcmlnZ2VyOiB7XG4gICAgICAgICAgICBpZiAoaW5wdXRzW2lucHV0TmFtZV0pIG1hY2hpbmVJbnB1dC5maXJlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZW5kZXIgcml2ZSBpZiB0aGUgaW5zdGFuY2UgaXMgYXZhaWxhYmxlXG4gIGlmIChpbnN0YW5jZT8ucml2ZSkgcmVuZGVyUml2ZShpbnN0YW5jZS5yaXZlKTtcbiAgLy8gT3RoZXJ3aXNlLCBzdG9yZSBsYXRlc3QgcmVuZGVyIGFzIGEgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIGxvYWRlZFxuICBlbHNlIGZyb250ZW5kTW9kdWxlLnNldExvYWRIYW5kbGVyKGNvbnRhaW5lckVsZW1lbnQsIHJlbmRlclJpdmUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUGx1Z2luID0gKF9jb250YWluZXJFbGVtZW50LCBfYWN0aW9uSXRlbSkgPT4gbnVsbDsgLy8gTm90IHVzZWQgYnkgdGhpcyBwbHVnaW5cbiJdLCJuYW1lcyI6WyJjbGVhclBsdWdpbiIsImNyZWF0ZVBsdWdpbkluc3RhbmNlIiwiZ2V0UGx1Z2luQ29uZmlnIiwiZ2V0UGx1Z2luRGVzdGluYXRpb24iLCJnZXRQbHVnaW5EdXJhdGlvbiIsImdldFBsdWdpbk9yaWdpbiIsInJlbmRlclBsdWdpbiIsIkZJVF9LRVkiLCJBTElHTk1FTlRfS0VZIiwicXVlcnlDb250YWluZXJFbGVtZW50IiwiZWxlbWVudElkIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0RnJvbnRlbmRNb2R1bGUiLCJ3aW5kb3ciLCJXZWJmbG93IiwicmVxdWlyZSIsImFjdGlvbkl0ZW1Db25maWciLCJrZXkiLCJ2YWx1ZSIsImlucHV0cyIsInJlZlN0YXRlIiwiYWN0aW9uSXRlbSIsInJlc3VsdCIsImNvbmZpZyIsImlucHV0IiwiZWxlbWVudCIsInNlbGVjdG9yR3VpZHMiLCJ0YXJnZXQiLCJsZW5ndGgiLCJwbHVnaW5FbGVtZW50SWQiLCJwbHVnaW5FbGVtZW50IiwiY29udGFpbmVyRWxlbWVudCIsIlBMVUdJTl9SSVZFIiwicHJvcHMiLCJmcm9udGVuZE1vZHVsZSIsImluc3RhbmNlIiwiZ2V0SW5zdGFuY2UiLCJTdGF0ZU1hY2hpbmVJbnB1dFR5cGUiLCJyaXZlIiwibmFtZSIsInJlbmRlclJpdmUiLCJyaXZlSW5zdGFuY2UiLCJsb2FkZWQiLCJyZW5kZXIiLCJvbkxvYWQiLCJvZmYiLCJvbiIsInN0YXRlTWFjaGluZUlucHV0cyIsImlzUGxheWluZyIsInBsYXkiLCJjdXJyZW50TGF5b3V0IiwibGF5b3V0IiwibmV4dEZpdCIsImZpdCIsIm5leHRBbGlnbm1lbnQiLCJhbGlnbm1lbnQiLCJjb3B5V2l0aCIsImlucHV0TmFtZSIsIm1hY2hpbmVJbnB1dCIsImZpbmQiLCJtIiwidHlwZSIsIkJvb2xlYW4iLCJib29sZWFuVmFsdWUiLCJOdW1iZXIiLCJudW1iZXJWYWx1ZSIsIlRyaWdnZXIiLCJmaXJlIiwic2V0TG9hZEhhbmRsZXIiLCJfY29udGFpbmVyRWxlbWVudCIsIl9hY3Rpb25JdGVtIl0sIm1hcHBpbmdzIjoiQUFBQSwyQkFBMkI7Ozs7Ozs7Ozs7O0lBd0hkQSxXQUFXO2VBQVhBOztJQTlGQUMsb0JBQW9CO2VBQXBCQTs7SUFoQkFDLGVBQWU7ZUFBZkE7O0lBYUFDLG9CQUFvQjtlQUFwQkE7O0lBVkFDLGlCQUFpQjtlQUFqQkE7O0lBRUFDLGVBQWU7ZUFBZkE7O0lBb0JBQyxZQUFZO2VBQVpBOzs7QUFqQ2IsTUFBTUMsVUFBVTtBQUNoQixNQUFNQyxnQkFBZ0I7QUFFdEIsTUFBTUMsd0JBQXdCLENBQUNDLFlBQzdCQyxTQUFTQyxhQUFhLENBQUMs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 }), 2866: (function (__unused_webpack_module, exports) { "use strict"; /* global document, window */ Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { clearPlugin: function() { return clearPlugin; }, createPluginInstance: function() { return createPluginInstance; }, getPluginConfig: function() { return getPluginConfig; }, getPluginDestination: function() { return getPluginDestination; }, getPluginDuration: function() { return getPluginDuration; }, getPluginOrigin: function() { return getPluginOrigin; }, renderPlugin: function() { return renderPlugin; } }); const queryContainerElement = (elementId)=>document.querySelector(`[data-w-id="${elementId}"]`); const getFrontendModule = ()=>window.Webflow.require('spline'); const difference = (arr1, arr2)=>arr1.filter((x)=>!arr2.includes(x)); const getPluginConfig = (actionItemConfig, key)=>{ return actionItemConfig.value[key]; }; const getPluginDuration = ()=>{ // Not used by this plugin return null; }; const DEFAULT_VALUES = Object.freeze({ positionX: 0, positionY: 0, positionZ: 0, rotationX: 0, rotationY: 0, rotationZ: 0, scaleX: 1, scaleY: 1, scaleZ: 1 }); const getPluginOrigin = (refState, actionItem)=>{ // Determine which props we care about in the destination const destination = actionItem.config.value; const destinationKeys = Object.keys(destination); // Check the current state for any missing origin props if (refState) { const stateKeys = Object.keys(refState); const diffKeys = difference(destinationKeys, stateKeys); // If new props are needed, merge new origin values with current state if (diffKeys.length) { const origin = diffKeys.reduce((result, key)=>{ result[key] = DEFAULT_VALUES[key]; return result; }, refState); return origin; } // No difference, return current state return refState; } // State doesn't exist so define new origin based on destination const origin = destinationKeys.reduce((result, key)=>{ result[key] = DEFAULT_VALUES[key]; return result; }, {}); return origin; }; const getPluginDestination = (actionItemConfig)=>{ return actionItemConfig.value; }; const createPluginInstance = (element, actionItem)=>{ // In this case, we define pluginInstance as a reference to the container element const pluginElementId = actionItem?.config?.target?.pluginElement; return pluginElementId ? queryContainerElement(pluginElementId) : null; }; const renderPlugin = (containerElement, refState, actionItem)=>{ const frontendModule = getFrontendModule(); if (!frontendModule) return; const instance = frontendModule.getInstance(containerElement); const objectId = actionItem.config.target.objectId; const renderSpline = (spline)=>{ if (!spline) { throw new Error('Invalid spline app passed to renderSpline'); } const obj = objectId && spline.findObjectById(objectId); if (!obj) { return; } const { PLUGIN_SPLINE: props } = refState; if (props.positionX != null) { obj.position.x = props.positionX; } if (props.positionY != null) { obj.position.y = props.positionY; } if (props.positionZ != null) { obj.position.z = props.positionZ; } if (props.rotationX != null) { obj.rotation.x = props.rotationX; } if (props.rotationY != null) { obj.rotation.y = props.rotationY; } if (props.rotationZ != null) { obj.rotation.z = props.rotationZ; } if (props.scaleX != null) { obj.scale.x = props.scaleX; } if (props.scaleY != null) { obj.scale.y = props.scaleY; } if (props.scaleZ != null) { obj.scale.z = props.scaleZ; } }; if (instance) { // Render spline if the app instance is already loaded renderSpline(instance.spline); } else { // Otherwise, store latest render as a callback to fire when loaded frontendModule.setLoadHandler(containerElement, renderSpline); } }; const clearPlugin = ()=>{ // Not used by this plugin return null; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3BsdWdpbnMvSVgyU3BsaW5lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCBkb2N1bWVudCwgd2luZG93ICovXG5cbmNvbnN0IHF1ZXJ5Q29udGFpbmVyRWxlbWVudCA9IChlbGVtZW50SWQpID0+XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXctaWQ9XCIke2VsZW1lbnRJZH1cIl1gKTtcblxuY29uc3QgZ2V0RnJvbnRlbmRNb2R1bGUgPSAoKSA9PiB3aW5kb3cuV2ViZmxvdy5yZXF1aXJlKCdzcGxpbmUnKTtcblxuY29uc3QgZGlmZmVyZW5jZSA9IChhcnIxLCBhcnIyKSA9PiBhcnIxLmZpbHRlcigoeCkgPT4gIWFycjIuaW5jbHVkZXMoeCkpO1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luQ29uZmlnID0gKGFjdGlvbkl0ZW1Db25maWcsIGtleSkgPT4ge1xuICByZXR1cm4gYWN0aW9uSXRlbUNvbmZpZy52YWx1ZVtrZXldO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkR1cmF0aW9uID0gKCkgPT4ge1xuICAvLyBOb3QgdXNlZCBieSB0aGlzIHBsdWdpblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IERFRkFVTFRfVkFMVUVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHBvc2l0aW9uWDogMCxcbiAgcG9zaXRpb25ZOiAwLFxuICBwb3NpdGlvblo6IDAsXG4gIHJvdGF0aW9uWDogMCxcbiAgcm90YXRpb25ZOiAwLFxuICByb3RhdGlvblo6IDAsXG4gIHNjYWxlWDogMSxcbiAgc2NhbGVZOiAxLFxuICBzY2FsZVo6IDEsXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbk9yaWdpbiA9IChyZWZTdGF0ZSwgYWN0aW9uSXRlbSkgPT4ge1xuICAvLyBEZXRlcm1pbmUgd2hpY2ggcHJvcHMgd2UgY2FyZSBhYm91dCBpbiB0aGUgZGVzdGluYXRpb25cbiAgY29uc3QgZGVzdGluYXRpb24gPSBhY3Rpb25JdGVtLmNvbmZpZy52YWx1ZTtcbiAgY29uc3QgZGVzdGluYXRpb25LZXlzID0gT2JqZWN0LmtleXMoZGVzdGluYXRpb24pO1xuICAvLyBDaGVjayB0aGUgY3VycmVudCBzdGF0ZSBmb3IgYW55IG1pc3Npbmcgb3JpZ2luIHByb3BzXG4gIGlmIChyZWZTdGF0ZSkge1xuICAgIGNvbnN0IHN0YXRlS2V5cyA9IE9iamVjdC5rZXlzKHJlZlN0YXRlKTtcbiAgICBjb25zdCBkaWZmS2V5cyA9IGRpZmZlcmVuY2UoZGVzdGluYXRpb25LZXlzLCBzdGF0ZUtleXMpO1xuICAgIC8vIElmIG5ldyBwcm9wcyBhcmUgbmVlZGVkLCBtZXJnZSBuZXcgb3JpZ2luIHZhbHVlcyB3aXRoIGN1cnJlbnQgc3RhdGVcbiAgICBpZiAoZGlmZktleXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvcmlnaW4gPSBkaWZmS2V5cy5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gREVGQVVMVF9WQUxVRVNba2V5XTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sIHJlZlN0YXRlKTtcbiAgICAgIHJldHVybiBvcmlnaW47XG4gICAgfVxuICAgIC8vIE5vIGRpZmZlcmVuY2UsIHJldHVybiBjdXJyZW50IHN0YXRlXG4gICAgcmV0dXJuIHJlZlN0YXRlO1xuICB9XG4gIC8vIFN0YXRlIGRvZXNuJ3QgZXhpc3Qgc28gZGVmaW5lIG5ldyBvcmlnaW4gYmFzZWQgb24gZGVzdGluYXRpb25cbiAgY29uc3Qgb3JpZ2luID0gZGVzdGluYXRpb25LZXlzLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICByZXN1bHRba2V5XSA9IERFRkFVTFRfVkFMVUVTW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuICByZXR1cm4gb3JpZ2luO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkRlc3RpbmF0aW9uID0gKGFjdGlvbkl0ZW1Db25maWcpID0+IHtcbiAgcmV0dXJuIGFjdGlvbkl0ZW1Db25maWcudmFsdWU7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUGx1Z2luSW5zdGFuY2UgPSAoZWxlbWVudCwgYWN0aW9uSXRlbSkgPT4ge1xuICAvLyBJbiB0aGlzIGNhc2UsIHdlIGRlZmluZSBwbHVnaW5JbnN0YW5jZSBhcyBhIHJlZmVyZW5jZSB0byB0aGUgY29udGFpbmVyIGVsZW1lbnRcbiAgY29uc3QgcGx1Z2luRWxlbWVudElkID0gYWN0aW9uSXRlbT8uY29uZmlnPy50YXJnZXQ/LnBsdWdpbkVsZW1lbnQ7XG4gIHJldHVybiBwbHVnaW5FbGVtZW50SWQgPyBxdWVyeUNvbnRhaW5lckVsZW1lbnQocGx1Z2luRWxlbWVudElkKSA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgcmVuZGVyUGx1Z2luID0gKGNvbnRhaW5lckVsZW1lbnQsIHJlZlN0YXRlLCBhY3Rpb25JdGVtKSA9PiB7XG4gIGNvbnN0IGZyb250ZW5kTW9kdWxlID0gZ2V0RnJvbnRlbmRNb2R1bGUoKTtcbiAgaWYgKCFmcm9udGVuZE1vZHVsZSkgcmV0dXJuO1xuICBjb25zdCBpbnN0YW5jZSA9IGZyb250ZW5kTW9kdWxlLmdldEluc3RhbmNlKGNvbnRhaW5lckVsZW1lbnQpO1xuICBjb25zdCBvYmplY3RJZCA9IGFjdGlvbkl0ZW0uY29uZmlnLnRhcmdldC5vYmplY3RJZDtcblxuICBjb25zdCByZW5kZXJTcGxpbmUgPSAoc3BsaW5lKSA9PiB7XG4gICAgaWYgKCFzcGxpbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzcGxpbmUgYXBwIHBhc3NlZCB0byByZW5kZXJTcGxpbmUnKTtcbiAgICB9XG4gICAgY29uc3Qgb2JqID0gb2JqZWN0SWQgJiYgc3BsaW5lLmZpbmRPYmplY3RCeUlkKG9iamVjdElkKTtcbiAgICBpZiAoIW9iaikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7UExVR0lOX1NQTElORTogcHJvcHN9ID0gcmVmU3RhdGU7XG4gICAgaWYgKHByb3BzLnBvc2l0aW9uWCAhPSBudWxsKSB7XG4gICAgICBvYmoucG9zaXRpb24ueCA9IHByb3BzLnBvc2l0aW9uWDtcbiAgICB9XG4gICAgaWYgKHByb3BzLnBvc2l0aW9uWSAhPSBudWxsKSB7XG4gICAgICBvYmoucG9zaXRpb24ueSA9IHByb3BzLnBvc2l0aW9uWTtcbiAgICB9XG4gICAgaWYgKHByb3BzLnBvc2l0aW9uWiAhPSBudWxsKSB7XG4gICAgICBvYmoucG9zaXRpb24ueiA9IHByb3BzLnBvc2l0aW9uWjtcbiAgICB9XG4gICAgaWYgKHByb3BzLnJvdGF0aW9uWCAhPSBudWxsKSB7XG4gICAgICBvYmoucm90YXRpb24ueCA9IHByb3BzLnJvdGF0aW9uWDtcbiAgICB9XG4gICAgaWYgKHByb3BzLnJvdGF0aW9uWSAhPSBudWxsKSB7XG4gICAgICBvYmoucm90YXRpb24ueSA9IHByb3BzLnJvdGF0aW9uWTtcbiAgICB9XG4gICAgaWYgKHByb3BzLnJvdGF0aW9uWiAhPSBudWxsKSB7XG4gICAgICBvYmoucm90YXRpb24ueiA9IHByb3BzLnJvdGF0aW9uWjtcbiAgICB9XG4gICAgaWYgKHByb3BzLnNjYWxlWCAhPSBudWxsKSB7XG4gICAgICBvYmouc2NhbGUueCA9IHByb3BzLnNjYWxlWDtcbiAgICB9XG4gICAgaWYgKHByb3BzLnNjYWxlWSAhPSBudWxsKSB7XG4gICAgICBvYmouc2NhbGUueSA9IHByb3BzLnNjYWxlWTtcbiAgICB9XG4gICAgaWYgKHByb3BzLnNjYWxlWiAhPSBudWxsKSB7XG4gICAgICBvYmouc2NhbGUueiA9IHByb3BzLnNjYWxlWjtcbiAgICB9XG4gIH07XG5cbiAgaWYgKGluc3RhbmNlKSB7XG4gICAgLy8gUmVuZGVyIHNwbGluZSBpZiB0aGUgYXBwIGluc3RhbmNlIGlzIGFscmVhZHkgbG9hZGVkXG4gICAgcmVuZGVyU3BsaW5lKGluc3RhbmNlLnNwbGluZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlLCBzdG9yZSBsYXRlc3QgcmVuZGVyIGFzIGEgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIGxvYWRlZFxuICAgIGZyb250ZW5kTW9kdWxlLnNldExvYWRIYW5kbGVyKGNvbnRhaW5lckVsZW1lbnQsIHJlbmRlclNwbGluZSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhclBsdWdpbiA9ICgpID0+IHtcbiAgLy8gTm90IHVzZWQgYnkgdGhpcyBwbHVnaW5cbiAgcmV0dXJuIG51bGw7XG59O1xuIl0sIm5hbWVzIjpbImNsZWFyUGx1Z2luIiwiY3JlYXRlUGx1Z2luSW5zdGFuY2UiLCJnZXRQbHVnaW5Db25maWciLCJnZXRQbHVnaW5EZXN0aW5hdGlvbiIsImdldFBsdWdpbkR1cmF0aW9uIiwiZ2V0UGx1Z2luT3JpZ2luIiwicmVuZGVyUGx1Z2luIiwicXVlcnlDb250YWluZXJFbGVtZW50IiwiZWxlbWVudElkIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0RnJvbnRlbmRNb2R1bGUiLCJ3aW5kb3ciLCJXZWJmbG93IiwicmVxdWlyZSIsImRpZmZlcmVuY2UiLCJhcnIxIiwiYXJyMiIsImZpbHRlciIsIngiLCJpbmNsdWRlcyIsImFjdGlvbkl0ZW1Db25maWciLCJrZXkiLCJ2YWx1ZSIsIkRFRkFVTFRfVkFMVUVTIiwiT2JqZWN0IiwiZnJlZXplIiwicG9zaXRpb25YIiwicG9zaXRpb25ZIiwicG9zaXRpb25aIiwicm90YXRpb25YIiwicm90YXRpb25ZIiwicm90YXRpb25aIiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVaIiwicmVmU3RhdGUiLCJhY3Rpb25JdGVtIiwiZGVzdGluYXRpb24iLCJjb25maWciLCJkZXN0aW5hdGlvbktleXMiLCJrZXlzIiwic3RhdGVLZXlzIiwiZGlmZktleXMiLCJsZW5ndGgiLCJvcmlnaW4iLCJyZWR1Y2UiLCJyZXN1bHQiLCJlbGVtZW50IiwicGx1Z2luRWxlbWVudElkIiwidGFyZ2V0IiwicGx1Z2luRWxlbWVudCIsImNvbnRhaW5lckVsZW1lbnQiLCJmcm9udGVuZE1vZHVsZSIsImluc3RhbmNlIiwiZ2V0SW5zdGFuY2UiLCJvYmplY3RJZCIsInJlbmRlclNwbGluZSIsInNwbGluZSIsIkVycm9yIiwib2JqIiwiZmluZE9iamVjdEJ5SWQiLCJQTFVHSU5fU1BMSU5FIiwicHJvcHMiLCJwb3NpdGlvbiIsInkiLCJ6Iiwicm90YXRpb24iLCJzY2FsZSIsInNldExvYWRIYW5kbGVyIl0sIm1hcHBpbmdzIjoiQUFBQSwyQkFBMkI7Ozs7Ozs7Ozs7O0lBd0hkQSxXQUFXO2VBQVhBOztJQTNEQUMsb0JBQW9CO2VBQXBCQTs7SUFwREFDLGVBQWU7ZUFBZkE7O0lBZ0RBQyxvQkFBb0I7ZUFBcEJBOztJQTVDQUMsaUJBQWlCO2VBQWpCQTs7SUFpQkFDLGVBQWU7ZUFBZkE7O0lBcUNBQyxZQUFZO2VBQVpBOzs7QUFqRWIsTUFBTUMsd0JBQXdCLENBQUNDLFlBQzdCQyxTQUFTQyxhQUFhLENBQUMsQ0FBQyxZQUFZLEVBQUVGLFVBQVUsRUFBRSxDQUFDO0FBRXJELE1BQU1HLG9CQUFvQixJQUFNQyxPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQztBQUV2RCxNQUFNQyxhQUFhLENBQUNDLE1BQU1DLE9BQVNELEtBQUtFLE1BQU0sQ0FBQyxDQUFDQyxJQUFNLENBQUNGLEtBQUtHLFFBQVEsQ0FBQ0Q7QUFFOUQsTUFBTWpCLGtCQUFrQixDQUFDbUIsa0JBQWtCQztJQUNoRCxPQUFPRCxpQkFBaUJFLEtBQUssQ0FBQ0QsSUFBSTtBQUNwQztBQUVPLE1BQU1sQixvQkFBb0I7SUFDL0IsMEJBQTBCO0lBQzFCLE9BQU87QUFDVDtBQUVBLE1BQU1vQixpQkFBaUJDLE9BQU9DLE1BQU0sQ0FBQztJQUNuQ0MsV0FBVztJQUNYQyxXQUFXO0lBQ1hDLFdBQVc7SUFDWEMsV0FBVztJQUNYQyxXQUFXO0lBQ1hDLFdBQVc7SUFDWEMsUUFBUTtJQUNSQyxRQUFRO0lBQ1JDLFFBQVE7QUFDVjtBQUVPLE1BQU05QixrQkFBa0IsQ0FBQytCLFVBQVVDO0lBQ3hDLHlEQUF5RDtJQUN6RCxNQUFN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 }), 1407: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; /* global document, getComputedStyle */ // Importing directly to avoid importing the entire shared-utils package. // eslint-disable-next-line webflow/package-boundaries Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { clearPlugin: function() { return clearPlugin; }, createPluginInstance: function() { return createPluginInstance; }, getPluginConfig: function() { return getPluginConfig; }, getPluginDestination: function() { return getPluginDestination; }, getPluginDuration: function() { return getPluginDuration; }, getPluginOrigin: function() { return getPluginOrigin; }, renderPlugin: function() { return renderPlugin; } }); const _normalizeColor = __webpack_require__(380); const getPluginConfig = (actionItemConfig, key)=>{ return actionItemConfig.value[key]; }; const getPluginDuration = ()=>{ // Not used by this plugin return null; }; const getPluginOrigin = (refState, actionItem)=>{ if (refState) { return refState; } // Determine which props we care about in the destination const destination = actionItem.config.value; // Look up root variable to parse origin values const objectId = actionItem.config.target.objectId; const computedValue = getComputedStyle(document.documentElement).getPropertyValue(objectId); if (destination.size != null) { return { size: parseInt(computedValue, 10) }; } if (destination.unit === '%' || destination.unit === '-') { return { size: parseFloat(computedValue) }; } if (destination.red != null && destination.green != null && destination.blue != null) { return (0, _normalizeColor.normalizeColor)(computedValue); } }; const getPluginDestination = (actionItemConfig)=>{ return actionItemConfig.value; }; const createPluginInstance = ()=>{ // Not used by this plugin return null; }; const variableHandlers = { color: { match: ({ red, green, blue, alpha })=>[ red, green, blue, alpha ].every((x)=>x != null), getValue: ({ red, green, blue, alpha })=>`rgba(${red}, ${green}, ${blue}, ${alpha})` }, // Size, Percentage, and Unitless variables. size: { match: ({ size })=>size != null, getValue: ({ size }, unit)=>{ switch(unit){ case '-': return size; default: return `${size}${unit}`; } } } }; const renderPlugin = (_, refState, actionItem)=>{ const { target: { objectId }, value: { unit } } = actionItem.config; const props = refState.PLUGIN_VARIABLE; const handler = Object.values(variableHandlers).find((h)=>h.match(props, unit)); if (handler) { document.documentElement.style.setProperty(objectId, handler.getValue(props, unit)); } }; const clearPlugin = (ref, actionItem)=>{ const objectId = actionItem.config.target.objectId; document.documentElement.style.removeProperty(objectId); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3BsdWdpbnMvSVgyVmFyaWFibGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGRvY3VtZW50LCBnZXRDb21wdXRlZFN0eWxlICovXG5cbi8vIEltcG9ydGluZyBkaXJlY3RseSB0byBhdm9pZCBpbXBvcnRpbmcgdGhlIGVudGlyZSBzaGFyZWQtdXRpbHMgcGFja2FnZS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB3ZWJmbG93L3BhY2thZ2UtYm91bmRhcmllc1xuaW1wb3J0IHtub3JtYWxpemVDb2xvcn0gZnJvbSAnLi4vc2hhcmVkLXV0aWxzL25vcm1hbGl6ZUNvbG9yJztcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkNvbmZpZyA9IChhY3Rpb25JdGVtQ29uZmlnLCBrZXkpID0+IHtcbiAgcmV0dXJuIGFjdGlvbkl0ZW1Db25maWcudmFsdWVba2V5XTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5EdXJhdGlvbiA9ICgpID0+IHtcbiAgLy8gTm90IHVzZWQgYnkgdGhpcyBwbHVnaW5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luT3JpZ2luID0gKHJlZlN0YXRlLCBhY3Rpb25JdGVtKSA9PiB7XG4gIGlmIChyZWZTdGF0ZSkge1xuICAgIHJldHVybiByZWZTdGF0ZTtcbiAgfVxuXG4gIC8vIERldGVybWluZSB3aGljaCBwcm9wcyB3ZSBjYXJlIGFib3V0IGluIHRoZSBkZXN0aW5hdGlvblxuICBjb25zdCBkZXN0aW5hdGlvbiA9IGFjdGlvbkl0ZW0uY29uZmlnLnZhbHVlO1xuXG4gIC8vIExvb2sgdXAgcm9vdCB2YXJpYWJsZSB0byBwYXJzZSBvcmlnaW4gdmFsdWVzXG4gIGNvbnN0IG9iamVjdElkID0gYWN0aW9uSXRlbS5jb25maWcudGFyZ2V0Lm9iamVjdElkO1xuICBjb25zdCBjb21wdXRlZFZhbHVlID0gZ2V0Q29tcHV0ZWRTdHlsZShcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgKS5nZXRQcm9wZXJ0eVZhbHVlKG9iamVjdElkKTtcblxuICBpZiAoZGVzdGluYXRpb24uc2l6ZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHtzaXplOiBwYXJzZUludChjb21wdXRlZFZhbHVlLCAxMCl9O1xuICB9XG5cbiAgaWYgKGRlc3RpbmF0aW9uLnVuaXQgPT09ICclJyB8fCBkZXN0aW5hdGlvbi51bml0ID09PSAnLScpIHtcbiAgICByZXR1cm4ge3NpemU6IHBhcnNlRmxvYXQoY29tcHV0ZWRWYWx1ZSl9O1xuICB9XG5cbiAgaWYgKFxuICAgIGRlc3RpbmF0aW9uLnJlZCAhPSBudWxsICYmXG4gICAgZGVzdGluYXRpb24uZ3JlZW4gIT0gbnVsbCAmJlxuICAgIGRlc3RpbmF0aW9uLmJsdWUgIT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gbm9ybWFsaXplQ29sb3IoY29tcHV0ZWRWYWx1ZSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5EZXN0aW5hdGlvbiA9IChhY3Rpb25JdGVtQ29uZmlnKSA9PiB7XG4gIHJldHVybiBhY3Rpb25JdGVtQ29uZmlnLnZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBsdWdpbkluc3RhbmNlID0gKCkgPT4ge1xuICAvLyBOb3QgdXNlZCBieSB0aGlzIHBsdWdpblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IHZhcmlhYmxlSGFuZGxlcnMgPSB7XG4gIGNvbG9yOiB7XG4gICAgbWF0Y2g6ICh7cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGF9KSA9PlxuICAgICAgW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXS5ldmVyeSgoeCkgPT4geCAhPSBudWxsKSxcbiAgICBnZXRWYWx1ZTogKHtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYX0pID0+XG4gICAgICBgcmdiYSgke3JlZH0sICR7Z3JlZW59LCAke2JsdWV9LCAke2FscGhhfSlgLFxuICB9LFxuXG4gIC8vIFNpemUsIFBlcmNlbnRhZ2UsIGFuZCBVbml0bGVzcyB2YXJpYWJsZXMuXG4gIHNpemU6IHtcbiAgICBtYXRjaDogKHtzaXplfSkgPT4gc2l6ZSAhPSBudWxsLFxuICAgIGdldFZhbHVlOiAoe3NpemV9LCB1bml0KSA9PiB7XG4gICAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgcmV0dXJuIHNpemU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGAke3NpemV9JHt1bml0fWA7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJQbHVnaW4gPSAoXywgcmVmU3RhdGUsIGFjdGlvbkl0ZW0pID0+IHtcbiAgY29uc3Qge1xuICAgIHRhcmdldDoge29iamVjdElkfSxcbiAgICB2YWx1ZToge3VuaXR9LFxuICB9ID0gYWN0aW9uSXRlbS5jb25maWc7XG4gIGNvbnN0IHByb3BzID0gcmVmU3RhdGUuUExVR0lOX1ZBUklBQkxFO1xuXG4gIGNvbnN0IGhhbmRsZXIgPSBPYmplY3QudmFsdWVzKHZhcmlhYmxlSGFuZGxlcnMpLmZpbmQoKGgpID0+XG4gICAgaC5tYXRjaChwcm9wcywgdW5pdClcbiAgKTtcblxuICBpZiAoaGFuZGxlcikge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgIG9iamVjdElkLFxuICAgICAgaGFuZGxlci5nZXRWYWx1ZShwcm9wcywgdW5pdClcbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJQbHVnaW4gPSAocmVmLCBhY3Rpb25JdGVtKSA9PiB7XG4gIGNvbnN0IG9iamVjdElkID0gYWN0aW9uSXRlbS5jb25maWcudGFyZ2V0Lm9iamVjdElkO1xuICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkob2JqZWN0SWQpO1xufTtcbiJdLCJuYW1lcyI6WyJjbGVhclBsdWdpbiIsImNyZWF0ZVBsdWdpbkluc3RhbmNlIiwiZ2V0UGx1Z2luQ29uZmlnIiwiZ2V0UGx1Z2luRGVzdGluYXRpb24iLCJnZXRQbHVnaW5EdXJhdGlvbiIsImdldFBsdWdpbk9yaWdpbiIsInJlbmRlclBsdWdpbiIsImFjdGlvbkl0ZW1Db25maWciLCJrZXkiLCJ2YWx1ZSIsInJlZlN0YXRlIiwiYWN0aW9uSXRlbSIsImRlc3RpbmF0aW9uIiwiY29uZmlnIiwib2JqZWN0SWQiLCJ0YXJnZXQiLCJjb21wdXRlZFZhbHVlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwiZ2V0UHJvcGVydHlWYWx1ZSIsInNpemUiLCJwYXJzZUludCIsInVuaXQiLCJwYXJzZUZsb2F0IiwicmVkIiwiZ3JlZW4iLCJibHVlIiwibm9ybWFsaXplQ29sb3IiLCJ2YXJpYWJsZUhhbmRsZXJzIiwiY29sb3IiLCJtYXRjaCIsImFscGhhIiwiZXZlcnkiLCJ4IiwiZ2V0VmFsdWUiLCJfIiwicHJvcHMiLCJQTFVHSU5fVkFSSUFCTEUiLCJoYW5kbGVyIiwiT2JqZWN0IiwidmFsdWVzIiwiZmluZCIsImgiLCJzdHlsZSIsInNldFByb3BlcnR5IiwicmVmIiwicmVtb3ZlUHJvcGVydHkiXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQyxHQUVyQyx5RUFBeUU7QUFDekUsc0RBQXNEOzs7Ozs7Ozs7Ozs7SUE2RnpDQSxXQUFXO2VBQVhBOztJQTlDQUMsb0JBQW9CO2VBQXBCQTs7SUE1Q0FDLGVBQWU7ZUFBZkE7O0lBd0NBQyxvQkFBb0I7ZUFBcEJBOztJQXBDQUMsaUJBQWlCO2VBQWpCQTs7SUFLQUMsZUFBZTtlQUFmQTs7SUE4REFDLFlBQVk7ZUFBWkE7OztnQ0F6RWdCO0FBRXRCLE1BQU1KLGtCQUFrQixDQUFDSyxrQkFBa0JDO0lBQ2hELE9BQU9ELGlCQUFpQkUsS0FBSyxDQUFDRCxJQUFJO0FBQ3BDO0FBRU8sTUFBTUosb0JBQW9CO0lBQy9CLDBCQUEwQjtJQUMxQixPQUFPO0FBQ1Q7QUFFTyxNQUFNQyxr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 }), 3690: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "pluginMethodMap", ({ enumerable: true, get: function() { return pluginMethodMap; } })); const _sharedconstants = __webpack_require__(7087); const _IX2Lottie = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(7377)); const _IX2Spline = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(2866)); const _IX2Rive = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(2570)); const _IX2Variable = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(1407)); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const pluginMethodMap = new Map([ [ _sharedconstants.ActionTypeConsts.PLUGIN_LOTTIE, { ..._IX2Lottie } ], [ _sharedconstants.ActionTypeConsts.PLUGIN_SPLINE, { ..._IX2Spline } ], [ _sharedconstants.ActionTypeConsts.PLUGIN_RIVE, { ..._IX2Rive } ], [ _sharedconstants.ActionTypeConsts.PLUGIN_VARIABLE, { ..._IX2Variable } ] ]); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3BsdWdpbnMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBY3Rpb25UeXBlQ29uc3RzfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkLWNvbnN0YW50cyc7XG5cbmltcG9ydCAqIGFzIGxvdHRpZSBmcm9tICcuL0lYMkxvdHRpZSc7XG5pbXBvcnQgKiBhcyBzcGxpbmUgZnJvbSAnLi9JWDJTcGxpbmUnO1xuaW1wb3J0ICogYXMgcml2ZSBmcm9tICcuL0lYMlJpdmUnO1xuaW1wb3J0ICogYXMgdmFyaWFibGUgZnJvbSAnLi9JWDJWYXJpYWJsZSc7XG5cbmV4cG9ydCB0eXBlIFBsdWdpblR5cGUgPVxuICB8IHR5cGVvZiBBY3Rpb25UeXBlQ29uc3RzLlBMVUdJTl9MT1RUSUVcbiAgfCB0eXBlb2YgQWN0aW9uVHlwZUNvbnN0cy5QTFVHSU5fU1BMSU5FXG4gIHwgdHlwZW9mIEFjdGlvblR5cGVDb25zdHMuUExVR0lOX1ZBUklBQkxFXG4gIHwgdHlwZW9mIEFjdGlvblR5cGVDb25zdHMuUExVR0lOX1JJVkU7XG5cbmV4cG9ydCBjb25zdCBwbHVnaW5NZXRob2RNYXAgPSBuZXcgTWFwKFtcbiAgW0FjdGlvblR5cGVDb25zdHMuUExVR0lOX0xPVFRJRSwgey4uLmxvdHRpZX1dLFxuICBbQWN0aW9uVHlwZUNvbnN0cy5QTFVHSU5fU1BMSU5FLCB7Li4uc3BsaW5lfV0sXG4gIFtBY3Rpb25UeXBlQ29uc3RzLlBMVUdJTl9SSVZFLCB7Li4ucml2ZX1dLFxuICBbQWN0aW9uVHlwZUNvbnN0cy5QTFVHSU5fVkFSSUFCTEUsIHsuLi52YXJpYWJsZX1dLFxuXSk7XG4iXSwibmFtZXMiOlsicGx1Z2luTWV0aG9kTWFwIiwiTWFwIiwiQWN0aW9uVHlwZUNvbnN0cyIsIlBMVUdJTl9MT1RUSUUiLCJsb3R0aWUiLCJQTFVHSU5fU1BMSU5FIiwic3BsaW5lIiwiUExVR0lOX1JJVkUiLCJyaXZlIiwiUExVR0lOX1ZBUklBQkxFIiwidmFyaWFibGUiXSwibWFwcGluZ3MiOiI7Ozs7K0JBYWFBOzs7ZUFBQUE7OztpQ0Fia0I7bUVBRVA7bUVBQ0E7aUVBQ0Y7cUVBQ0k7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFuQixNQUFNQSxrQkFBa0IsSUFBSUMsSUFBSTtJQUNyQztRQUFDQyxpQ0FBZ0IsQ0FBQ0MsYUFBYTtRQUFFO1lBQUMsR0FBR0MsVUFBTTtRQUFBO0tBQUU7SUFDN0M7UUFBQ0YsaUNBQWdCLENBQUNHLGFBQWE7UUFBRTtZQUFDLEdBQUdDLFVBQU07UUFBQTtLQUFFO0lBQzdDO1FBQUNKLGlDQUFnQixDQUFDSyxXQUFXO1FBQUU7WUFBQyxHQUFHQyxRQUFJO1FBQUE7S0FBRTtJQUN6QztRQUFDTixpQ0FBZ0IsQ0FBQ08sZUFBZTtRQUFFO1lBQUMsR0FBR0MsWUFBUTtRQUFBO0tBQUU7Q0FDbEQifQ== }), 8023: (function (__unused_webpack_module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { IX2_ACTION_LIST_PLAYBACK_CHANGED: function() { return IX2_ACTION_LIST_PLAYBACK_CHANGED; }, IX2_ANIMATION_FRAME_CHANGED: function() { return IX2_ANIMATION_FRAME_CHANGED; }, IX2_CLEAR_REQUESTED: function() { return IX2_CLEAR_REQUESTED; }, IX2_ELEMENT_STATE_CHANGED: function() { return IX2_ELEMENT_STATE_CHANGED; }, IX2_EVENT_LISTENER_ADDED: function() { return IX2_EVENT_LISTENER_ADDED; }, IX2_EVENT_STATE_CHANGED: function() { return IX2_EVENT_STATE_CHANGED; }, IX2_INSTANCE_ADDED: function() { return IX2_INSTANCE_ADDED; }, IX2_INSTANCE_REMOVED: function() { return IX2_INSTANCE_REMOVED; }, IX2_INSTANCE_STARTED: function() { return IX2_INSTANCE_STARTED; }, IX2_MEDIA_QUERIES_DEFINED: function() { return IX2_MEDIA_QUERIES_DEFINED; }, IX2_PARAMETER_CHANGED: function() { return IX2_PARAMETER_CHANGED; }, IX2_PLAYBACK_REQUESTED: function() { return IX2_PLAYBACK_REQUESTED; }, IX2_PREVIEW_REQUESTED: function() { return IX2_PREVIEW_REQUESTED; }, IX2_RAW_DATA_IMPORTED: function() { return IX2_RAW_DATA_IMPORTED; }, IX2_SESSION_INITIALIZED: function() { return IX2_SESSION_INITIALIZED; }, IX2_SESSION_STARTED: function() { return IX2_SESSION_STARTED; }, IX2_SESSION_STOPPED: function() { return IX2_SESSION_STOPPED; }, IX2_STOP_REQUESTED: function() { return IX2_STOP_REQUESTED; }, IX2_TEST_FRAME_RENDERED: function() { return IX2_TEST_FRAME_RENDERED; }, IX2_VIEWPORT_WIDTH_CHANGED: function() { return IX2_VIEWPORT_WIDTH_CHANGED; } }); const IX2_RAW_DATA_IMPORTED = 'IX2_RAW_DATA_IMPORTED'; const IX2_SESSION_INITIALIZED = 'IX2_SESSION_INITIALIZED'; const IX2_SESSION_STARTED = 'IX2_SESSION_STARTED'; const IX2_SESSION_STOPPED = 'IX2_SESSION_STOPPED'; const IX2_PREVIEW_REQUESTED = 'IX2_PREVIEW_REQUESTED'; const IX2_PLAYBACK_REQUESTED = 'IX2_PLAYBACK_REQUESTED'; const IX2_STOP_REQUESTED = 'IX2_STOP_REQUESTED'; const IX2_CLEAR_REQUESTED = 'IX2_CLEAR_REQUESTED'; const IX2_EVENT_LISTENER_ADDED = 'IX2_EVENT_LISTENER_ADDED'; const IX2_EVENT_STATE_CHANGED = 'IX2_EVENT_STATE_CHANGED'; const IX2_ANIMATION_FRAME_CHANGED = 'IX2_ANIMATION_FRAME_CHANGED'; const IX2_PARAMETER_CHANGED = 'IX2_PARAMETER_CHANGED'; const IX2_INSTANCE_ADDED = 'IX2_INSTANCE_ADDED'; const IX2_INSTANCE_STARTED = 'IX2_INSTANCE_STARTED'; const IX2_INSTANCE_REMOVED = 'IX2_INSTANCE_REMOVED'; const IX2_ELEMENT_STATE_CHANGED = 'IX2_ELEMENT_STATE_CHANGED'; const IX2_ACTION_LIST_PLAYBACK_CHANGED = 'IX2_ACTION_LIST_PLAYBACK_CHANGED'; const IX2_VIEWPORT_WIDTH_CHANGED = 'IX2_VIEWPORT_WIDTH_CHANGED'; const IX2_MEDIA_QUERIES_DEFINED = 'IX2_MEDIA_QUERIES_DEFINED'; const IX2_TEST_FRAME_RENDERED = 'IX2_TEST_FRAME_RENDERED'; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC1jb25zdGFudHMvSVgyRW5naW5lQWN0aW9uVHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IElYMl9SQVdfREFUQV9JTVBPUlRFRCA9ICdJWDJfUkFXX0RBVEFfSU1QT1JURUQnO1xuZXhwb3J0IGNvbnN0IElYMl9TRVNTSU9OX0lOSVRJQUxJWkVEID0gJ0lYMl9TRVNTSU9OX0lOSVRJQUxJWkVEJztcbmV4cG9ydCBjb25zdCBJWDJfU0VTU0lPTl9TVEFSVEVEID0gJ0lYMl9TRVNTSU9OX1NUQVJURUQnO1xuZXhwb3J0IGNvbnN0IElYMl9TRVNTSU9OX1NUT1BQRUQgPSAnSVgyX1NFU1NJT05fU1RPUFBFRCc7XG5leHBvcnQgY29uc3QgSVgyX1BSRVZJRVdfUkVRVUVTVEVEID0gJ0lYMl9QUkVWSUVXX1JFUVVFU1RFRCc7XG5leHBvcnQgY29uc3QgSVgyX1BMQVlCQUNLX1JFUVVFU1RFRCA9ICdJWDJfUExBWUJBQ0tfUkVRVUVTVEVEJztcbmV4cG9ydCBjb25zdCBJWDJfU1RPUF9SRVFVRVNURUQgPSAnSVgyX1NUT1BfUkVRVUVTVEVEJztcbmV4cG9ydCBjb25zdCBJWDJfQ0xFQVJfUkVRVUVTVEVEID0gJ0lYMl9DTEVBUl9SRVFVRVNURUQnO1xuZXhwb3J0IGNvbnN0IElYMl9FVkVOVF9MSVNURU5FUl9BRERFRCA9ICdJWDJfRVZFTlRfTElTVEVORVJfQURERUQnO1xuZXhwb3J0IGNvbnN0IElYMl9FVkVOVF9TVEFURV9DSEFOR0VEID0gJ0lYMl9FVkVOVF9TVEFURV9DSEFOR0VEJztcbmV4cG9ydCBjb25zdCBJWDJfQU5JTUFUSU9OX0ZSQU1FX0NIQU5HRUQgPSAnSVgyX0FOSU1BVElPTl9GUkFNRV9DSEFOR0VEJztcbmV4cG9ydCBjb25zdCBJWDJfUEFSQU1FVEVSX0NIQU5HRUQgPSAnSVgyX1BBUkFNRVRFUl9DSEFOR0VEJztcbmV4cG9ydCBjb25zdCBJWDJfSU5TVEFOQ0VfQURERUQgPSAnSVgyX0lOU1RBTkNFX0FEREVEJztcbmV4cG9ydCBjb25zdCBJWDJfSU5TVEFOQ0VfU1RBUlRFRCA9ICdJWDJfSU5TVEFOQ0VfU1RBUlRFRCc7XG5leHBvcnQgY29uc3QgSVgyX0lOU1RBTkNFX1JFTU9WRUQgPSAnSVgyX0lOU1RBTkNFX1JFTU9WRUQnO1xuZXhwb3J0IGNvbnN0IElYMl9FTEVNRU5UX1NUQVRFX0NIQU5HRUQgPSAnSVgyX0VMRU1FTlRfU1RBVEVfQ0hBTkdFRCc7XG5leHBvcnQgY29uc3QgSVgyX0FDVElPTl9MSVNUX1BMQVlCQUNLX0NIQU5HRUQgPVxuICAnSVgyX0FDVElPTl9MSVNUX1BMQVlCQUNLX0NIQU5HRUQnO1xuZXhwb3J0IGNvbnN0IElYMl9WSUVXUE9SVF9XSURUSF9DSEFOR0VEID0gJ0lYMl9WSUVXUE9SVF9XSURUSF9DSEFOR0VEJztcbmV4cG9ydCBjb25zdCBJWDJfTUVESUFfUVVFUklFU19ERUZJTkVEID0gJ0lYMl9NRURJQV9RVUVSSUVTX0RFRklORUQnO1xuZXhwb3J0IGNvbnN0IElYMl9URVNUX0ZSQU1FX1JFTkRFUkVEID0gJ0lYMl9URVNUX0ZSQU1FX1JFTkRFUkVEJztcbiJdLCJuYW1lcyI6WyJJWDJfQUNUSU9OX0xJU1RfUExBWUJBQ0tfQ0hBTkdFRCIsIklYMl9BTklNQVRJT05fRlJBTUVfQ0hBTkdFRCIsIklYMl9DTEVBUl9SRVFVRVNURUQiLCJJWDJfRUxFTUVOVF9TVEFURV9DSEFOR0VEIiwiSVgyX0VWRU5UX0xJU1RFTkVSX0FEREVEIiwiSVgyX0VWRU5UX1NUQVRFX0NIQU5HRUQiLCJJWDJfSU5TVEFOQ0VfQURERUQiLCJJWDJfSU5TVEFOQ0VfUkVNT1ZFRCIsIklYMl9JTlNUQU5DRV9TVEFSVEVEIiwiSVgyX01FRElBX1FVRVJJRVNfREVGSU5FRCIsIklYMl9QQVJBTUVURVJfQ0hBTkdFRCIsIklYMl9QTEFZQkFDS19SRVFVRVNURUQiLCJJWDJfUFJFVklFV19SRVFVRVNURUQiLCJJWDJfUkFXX0RBVEFfSU1QT1JURUQiLCJJWDJfU0VTU0lPTl9JTklUSUFMSVpFRCIsIklYMl9TRVNTSU9OX1NUQVJURUQiLCJJWDJfU0VTU0lPTl9TVE9QUEVEIiwiSVgyX1NUT1BfUkVRVUVTVEVEIiwiSVgyX1RFU1RfRlJBTUVfUkVOREVSRUQiLCJJWDJfVklFV1BPUlRfV0lEVEhfQ0hBTkdFRCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFnQmFBLGdDQUFnQztlQUFoQ0E7O0lBTkFDLDJCQUEyQjtlQUEzQkE7O0lBSEFDLG1CQUFtQjtlQUFuQkE7O0lBUUFDLHlCQUF5QjtlQUF6QkE7O0lBUEFDLHdCQUF3QjtlQUF4QkE7O0lBQ0FDLHVCQUF1QjtlQUF2QkE7O0lBR0FDLGtCQUFrQjtlQUFsQkE7O0lBRUFDLG9CQUFvQjtlQUFwQkE7O0lBREFDLG9CQUFvQjtlQUFwQkE7O0lBTUFDLHlCQUF5QjtlQUF6QkE7O0lBUkFDLHFCQUFxQjtlQUFyQkE7O0lBTkFDLHNCQUFzQjtlQUF0QkE7O0lBREFDLHFCQUFxQjtlQUFyQkE7O0lBSkFDLHFCQUFxQjtlQUFyQkE7O0lBQ0FDLHVCQUF1QjtlQUF2QkE7O0lBQ0FDLG1CQUFtQjtlQUFuQkE7O0lBQ0FDLG1CQUFtQjtlQUFuQkE7O0lBR0FDLGtCQUFrQjtlQUFsQkE7O0lBY0FDLHVCQUF1QjtlQUF2QkE7O0lBRkFDLDBCQUEwQjtlQUExQkE7OztBQWxCTixNQUFNTix3QkFBd0I7QUFDOUIsTUFBTUMsMEJBQTBCO0FBQ2hDLE1BQU1DLHNCQUFzQjtBQUM1QixNQUFNQyxzQkFBc0I7QUFDNUIsTUFBTUosd0JBQXdCO0FBQzlCLE1BQU1ELHlCQUF5QjtBQUMvQixNQUFNTSxxQkFBcUI7QUFDM0IsTUFBTWYsc0JBQXNCO0FBQzVCLE1BQU1FLDJCQUEyQjtBQUNqQyxNQUFNQywwQkFBMEI7QUFDaEMsTUFBTUosOEJBQThCO0FBQ3BDLE1BQU1TLHdCQUF3QjtBQUM5QixNQUFNSixxQkFBcUI7QUFDM0IsTUFBTUUsdUJBQXVCO0FBQzdCLE1BQU1ELHVCQUF1QjtBQUM3QixNQUFNSiw0QkFBNEI7QUFDbEMsTUFBTUgsbUNBQ1g7QUFDSyxNQUFNbUIsNkJBQTZCO0FBQ25DLE1BQU1WLDRCQUE0QjtBQUNsQyxNQUFNUywwQkFBMEIifQ== }), 2686: (function (__unused_webpack_module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { AUTO: function() { return AUTO; }, BACKGROUND: function() { return BACKGROUND; }, BACKGROUND_COLOR: function() { return BACKGROUND_COLOR; }, BAR_DELIMITER: function() { return BAR_DELIMITER; }, BORDER_COLOR: function() { return BORDER_COLOR; }, BOUNDARY_SELECTOR: function() { return BOUNDARY_SELECTOR; }, CHILDREN: function() { return CHILDREN; }, COLON_DELIMITER: function() { return COLON_DELIMITER; }, COLOR: function() { return COLOR; }, COMMA_DELIMITER: function() { return COMMA_DELIMITER; }, CONFIG_UNIT: function() { return CONFIG_UNIT; }, CONFIG_VALUE: function() { return CONFIG_VALUE; }, CONFIG_X_UNIT: function() { return CONFIG_X_UNIT; }, CONFIG_X_VALUE: function() { return CONFIG_X_VALUE; }, CONFIG_Y_UNIT: function() { return CONFIG_Y_UNIT; }, CONFIG_Y_VALUE: function() { return CONFIG_Y_VALUE; }, CONFIG_Z_UNIT: function() { return CONFIG_Z_UNIT; }, CONFIG_Z_VALUE: function() { return CONFIG_Z_VALUE; }, DISPLAY: function() { return DISPLAY; }, EXPRESSION_ELEMENT: function() { return EXPRESSION_ELEMENT; }, FILTER: function() { return FILTER; }, FLEX: function() { return FLEX; }, FONT_VARIATION_SETTINGS: function() { return FONT_VARIATION_SETTINGS; }, HEIGHT: function() { return HEIGHT; }, HTML_ELEMENT: function() { return HTML_ELEMENT; }, IMMEDIATE_CHILDREN: function() { return IMMEDIATE_CHILDREN; }, IX2_ID_DELIMITER: function() { return IX2_ID_DELIMITER; }, OPACITY: function() { return OPACITY; }, PARENT: function() { return PARENT; }, PLAIN_OBJECT: function() { return PLAIN_OBJECT; }, PRESERVE_3D: function() { return PRESERVE_3D; }, RENDER_GENERAL: function() { return RENDER_GENERAL; }, RENDER_PLUGIN: function() { return RENDER_PLUGIN; }, RENDER_STYLE: function() { return RENDER_STYLE; }, RENDER_TRANSFORM: function() { return RENDER_TRANSFORM; }, ROTATE_X: function() { return ROTATE_X; }, ROTATE_Y: function() { return ROTATE_Y; }, ROTATE_Z: function() { return ROTATE_Z; }, SCALE_3D: function() { return SCALE_3D; }, SCALE_X: function() { return SCALE_X; }, SCALE_Y: function() { return SCALE_Y; }, SCALE_Z: function() { return SCALE_Z; }, SIBLINGS: function() { return SIBLINGS; }, SKEW: function() { return SKEW; }, SKEW_X: function() { return SKEW_X; }, SKEW_Y: function() { return SKEW_Y; }, TRANSFORM: function() { return TRANSFORM; }, TRANSLATE_3D: function() { return TRANSLATE_3D; }, TRANSLATE_X: function() { return TRANSLATE_X; }, TRANSLATE_Y: function() { return TRANSLATE_Y; }, TRANSLATE_Z: function() { return TRANSLATE_Z; }, WF_PAGE: function() { return WF_PAGE; }, WIDTH: function() { return WIDTH; }, WILL_CHANGE: function() { return WILL_CHANGE; }, W_MOD_IX: function() { return W_MOD_IX; }, W_MOD_JS: function() { return W_MOD_JS; } }); const IX2_ID_DELIMITER = '|'; const WF_PAGE = 'data-wf-page'; const W_MOD_JS = 'w-mod-js'; const W_MOD_IX = 'w-mod-ix'; const BOUNDARY_SELECTOR = '.w-dyn-item'; const CONFIG_X_VALUE = 'xValue'; const CONFIG_Y_VALUE = 'yValue'; const CONFIG_Z_VALUE = 'zValue'; const CONFIG_VALUE = 'value'; const CONFIG_X_UNIT = 'xUnit'; const CONFIG_Y_UNIT = 'yUnit'; const CONFIG_Z_UNIT = 'zUnit'; const CONFIG_UNIT = 'unit'; const TRANSFORM = 'transform'; const TRANSLATE_X = 'translateX'; const TRANSLATE_Y = 'translateY'; const TRANSLATE_Z = 'translateZ'; const TRANSLATE_3D = 'translate3d'; const SCALE_X = 'scaleX'; const SCALE_Y = 'scaleY'; const SCALE_Z = 'scaleZ'; const SCALE_3D = 'scale3d'; const ROTATE_X = 'rotateX'; const ROTATE_Y = 'rotateY'; const ROTATE_Z = 'rotateZ'; const SKEW = 'skew'; const SKEW_X = 'skewX'; const SKEW_Y = 'skewY'; const OPACITY = 'opacity'; const FILTER = 'filter'; const FONT_VARIATION_SETTINGS = 'font-variation-settings'; const WIDTH = 'width'; const HEIGHT = 'height'; const BACKGROUND_COLOR = 'backgroundColor'; const BACKGROUND = 'background'; const BORDER_COLOR = 'borderColor'; const COLOR = 'color'; const DISPLAY = 'display'; const FLEX = 'flex'; const WILL_CHANGE = 'willChange'; const AUTO = 'AUTO'; const COMMA_DELIMITER = ','; const COLON_DELIMITER = ':'; const BAR_DELIMITER = '|'; const CHILDREN = 'CHILDREN'; const IMMEDIATE_CHILDREN = 'IMMEDIATE_CHILDREN'; const SIBLINGS = 'SIBLINGS'; const PARENT = 'PARENT'; const PRESERVE_3D = 'preserve-3d'; const HTML_ELEMENT = 'HTML_ELEMENT'; const PLAIN_OBJECT = 'PLAIN_OBJECT'; const EXPRESSION_ELEMENT = 'EXPRESSION_ELEMENT'; const RENDER_TRANSFORM = 'RENDER_TRANSFORM'; const RENDER_GENERAL = 'RENDER_GENERAL'; const RENDER_STYLE = 'RENDER_STYLE'; const RENDER_PLUGIN = 'RENDER_PLUGIN'; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC1jb25zdGFudHMvSVgyRW5naW5lQ29uc3RhbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBJWDJfSURfREVMSU1JVEVSID0gJ3wnO1xuLyoqXG4gKiBTdG9yZXMgcGFnZUlkIG9mIHRoZSBjdXJyZW50IHBhZ2UsIHNvIGl0IGNhbiBiZSBhY2Nlc3NlZCBpbiB0aGUgSVgyQnJvd3NlckFwaVxuICovXG5leHBvcnQgY29uc3QgV0ZfUEFHRSA9ICdkYXRhLXdmLXBhZ2UnO1xuZXhwb3J0IGNvbnN0IFdfTU9EX0pTID0gJ3ctbW9kLWpzJztcbmV4cG9ydCBjb25zdCBXX01PRF9JWCA9ICd3LW1vZC1peCc7XG5leHBvcnQgY29uc3QgQk9VTkRBUllfU0VMRUNUT1IgPSAnLnctZHluLWl0ZW0nO1xuZXhwb3J0IGNvbnN0IENPTkZJR19YX1ZBTFVFID0gJ3hWYWx1ZSc7XG5leHBvcnQgY29uc3QgQ09ORklHX1lfVkFMVUUgPSAneVZhbHVlJztcbmV4cG9ydCBjb25zdCBDT05GSUdfWl9WQUxVRSA9ICd6VmFsdWUnO1xuZXhwb3J0IGNvbnN0IENPTkZJR19WQUxVRSA9ICd2YWx1ZSc7XG5leHBvcnQgY29uc3QgQ09ORklHX1hfVU5JVCA9ICd4VW5pdCc7XG5leHBvcnQgY29uc3QgQ09ORklHX1lfVU5JVCA9ICd5VW5pdCc7XG5leHBvcnQgY29uc3QgQ09ORklHX1pfVU5JVCA9ICd6VW5pdCc7XG5leHBvcnQgY29uc3QgQ09ORklHX1VOSVQgPSAndW5pdCc7XG5leHBvcnQgY29uc3QgVFJBTlNGT1JNID0gJ3RyYW5zZm9ybSc7XG5leHBvcnQgY29uc3QgVFJBTlNMQVRFX1ggPSAndHJhbnNsYXRlWCc7XG5leHBvcnQgY29uc3QgVFJBTlNMQVRFX1kgPSAndHJhbnNsYXRlWSc7XG5leHBvcnQgY29uc3QgVFJBTlNMQVRFX1ogPSAndHJhbnNsYXRlWic7XG5leHBvcnQgY29uc3QgVFJBTlNMQVRFXzNEID0gJ3RyYW5zbGF0ZTNkJztcbmV4cG9ydCBjb25zdCBTQ0FMRV9YID0gJ3NjYWxlWCc7XG5leHBvcnQgY29uc3QgU0NBTEVfWSA9ICdzY2FsZVknO1xuZXhwb3J0IGNvbnN0IFNDQUxFX1ogPSAnc2NhbGVaJztcbmV4cG9ydCBjb25zdCBTQ0FMRV8zRCA9ICdzY2FsZTNkJztcbmV4cG9ydCBjb25zdCBST1RBVEVfWCA9ICdyb3RhdGVYJztcbmV4cG9ydCBjb25zdCBST1RBVEVfWSA9ICdyb3RhdGVZJztcbmV4cG9ydCBjb25zdCBST1RBVEVfWiA9ICdyb3RhdGVaJztcbmV4cG9ydCBjb25zdCBTS0VXID0gJ3NrZXcnO1xuZXhwb3J0IGNvbnN0IFNLRVdfWCA9ICdza2V3WCc7XG5leHBvcnQgY29uc3QgU0tFV19ZID0gJ3NrZXdZJztcbmV4cG9ydCBjb25zdCBPUEFDSVRZID0gJ29wYWNpdHknO1xuZXhwb3J0IGNvbnN0IEZJTFRFUiA9ICdmaWx0ZXInO1xuZXhwb3J0IGNvbnN0IEZPTlRfVkFSSUFUSU9OX1NFVFRJTkdTID0gJ2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzJztcbmV4cG9ydCBjb25zdCBXSURUSCA9ICd3aWR0aCc7XG5leHBvcnQgY29uc3QgSEVJR0hUID0gJ2hlaWdodCc7XG5leHBvcnQgY29uc3QgQkFDS0dST1VORF9DT0xPUiA9ICdiYWNrZ3JvdW5kQ29sb3InO1xuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkQgPSAnYmFja2dyb3VuZCc7XG5leHBvcnQgY29uc3QgQk9SREVSX0NPTE9SID0gJ2JvcmRlckNvbG9yJztcbmV4cG9ydCBjb25zdCBDT0xPUiA9ICdjb2xvcic7XG5leHBvcnQgY29uc3QgRElTUExBWSA9ICdkaXNwbGF5JztcbmV4cG9ydCBjb25zdCBGTEVYID0gJ2ZsZXgnO1xuZXhwb3J0IGNvbnN0IFdJTExfQ0hBTkdFID0gJ3dpbGxDaGFuZ2UnO1xuZXhwb3J0IGNvbnN0IEFVVE8gPSAnQVVUTyc7XG5leHBvcnQgY29uc3QgQ09NTUFfREVMSU1JVEVSID0gJywnO1xuZXhwb3J0IGNvbnN0IENPTE9OX0RFTElNSVRFUiA9ICc6JztcbmV4cG9ydCBjb25zdCBCQVJfREVMSU1JVEVSID0gJ3wnO1xuZXhwb3J0IGNvbnN0IENISUxEUkVOID0gJ0NISUxEUkVOJztcbmV4cG9ydCBjb25zdCBJTU1FRElBVEVfQ0hJTERSRU4gPSAnSU1NRURJQVRFX0NISUxEUkVOJztcbmV4cG9ydCBjb25zdCBTSUJMSU5HUyA9ICdTSUJMSU5HUyc7XG5leHBvcnQgY29uc3QgUEFSRU5UID0gJ1BBUkVOVCc7XG5leHBvcnQgY29uc3QgUFJFU0VSVkVfM0QgPSAncHJlc2VydmUtM2QnO1xuZXhwb3J0IGNvbnN0IEhUTUxfRUxFTUVOVCA9ICdIVE1MX0VMRU1FTlQnO1xuZXhwb3J0IGNvbnN0IFBMQUlOX09CSkVDVCA9ICdQTEFJTl9PQkpFQ1QnO1xuZXhwb3J0IGNvbnN0IEVYUFJFU1NJT05fRUxFTUVOVCA9ICdFWFBSRVNTSU9OX0VMRU1FTlQnO1xuZXhwb3J0IGNvbnN0IFJFTkRFUl9UUkFOU0ZPUk0gPSAnUkVOREVSX1RSQU5TRk9STSc7XG5leHBvcnQgY29uc3QgUkVOREVSX0dFTkVSQUwgPSAnUkVOREVSX0dFTkVSQUwnO1xuZXhwb3J0IGNvbnN0IFJFTkRFUl9TVFlMRSA9ICdSRU5ERVJfU1RZTEUnO1xuZXhwb3J0IGNvbnN0IFJFTkRFUl9QTFVHSU4gPSAnUkVOREVSX1BMVUdJTic7XG4iXSwibmFtZXMiOlsiQVVUTyIsIkJBQ0tHUk9VTkQiLCJCQUNLR1JPVU5EX0NPTE9SIiwiQkFSX0RFTElNSVRFUiIsIkJPUkRFUl9DT0xPUiIsIkJPVU5EQVJZX1NFTEVDVE9SIiwiQ0hJTERSRU4iLCJDT0xPTl9ERUxJTUlURVIiLCJDT0xPUiIsIkNPTU1BX0RFTElNSVRFUiIsIkNPTkZJR19VTklUIiwiQ09ORklHX1ZBTFVFIiwiQ09ORklHX1hfVU5JVCIsIkNPTkZJR19YX1ZBTFVFIiwiQ09ORklHX1lfVU5JVCIsIkNPTkZJR19ZX1ZBTFVFIiwiQ09ORklHX1pfVU5JVCIsIkNPTkZJR19aX1ZBTFVFIiwiRElTUExBWSIsIkVYUFJFU1NJT05fRUxFTUVOVCIsIkZJTFRFUiIsIkZMRVgiLCJGT05UX1ZBUklBVElPTl9TRVRUSU5HUyIsIkhFSUdIVCIsIkhUTUxfRUxFTUVOVCIsIklNTUVESUFURV9DSElMRFJFTiIsIklYMl9JRF9ERUxJTUlURVIiLCJPUEFDSVRZIiwiUEFSRU5UIiwiUExBSU5fT0JKRUNUIiwiUFJFU0VSVkVfM0QiLCJSRU5ERVJfR0VORVJBTCIsIlJFTkRFUl9QTFVHSU4iLCJSRU5ERVJfU1RZTEUiLCJSRU5ERVJfVFJBTlNGT1JNIiwiUk9UQVRFX1giLCJST1RBVEVfWSIsIlJPVEFURV9aIiwiU0NBTEVfM0QiLCJTQ0FMRV9YIiwiU0NBTEVfWSIsIlNDQUxFX1oiLCJTSUJMSU5HUyIsIlNLRVciLCJTS0VXX1giLCJTS0VXX1kiLCJUUkFOU0ZPUk0iLCJUUkFOU0xBVEVfM0QiLCJUUkFOU0xBVEVfWCIsIlRSQU5TTEFURV9ZIiwiVFJBTlNMQVRFX1oiLCJXRl9QQUdFIiwiV0lEVEgiLCJXSUxMX0NIQU5HRSIsIldfTU9EX0lYIiwiV19NT0RfSlMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBMkNhQSxJQUFJO2VBQUpBOztJQU5BQyxVQUFVO2VBQVZBOztJQURBQyxnQkFBZ0I7ZUFBaEJBOztJQVVBQyxhQUFhO2VBQWJBOztJQVJBQyxZQUFZO2VBQVpBOztJQS9CQUMsaUJBQWlCO2VBQWpCQTs7SUF3Q0FDLFFBQVE7ZUFBUkE7O0lBRkFDLGVBQWU7ZUFBZkE7O0lBTkFDLEtBQUs7ZUFBTEE7O0lBS0FDLGVBQWU7ZUFBZkE7O0lBN0JBQyxXQUFXO2VBQVhBOztJQUpBQyxZQUFZO2VBQVpBOztJQUNBQyxhQUFhO2VBQWJBOztJQUpBQyxjQUFjO2VBQWRBOztJQUtBQyxhQUFhO2VBQWJBOztJQUpBQyxjQUFjO2VBQWRBOztJQUtBQyxhQUFhO2VBQWJBOztJQUpBQyxjQUFjO2VBQWRBOztJQThCQUMsT0FBTztlQUFQQTs7SUFjQUMsa0JBQWtCO2VBQWxC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 }), 262: (function (__unused_webpack_module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { ActionAppliesTo: function() { return ActionAppliesTo; }, ActionTypeConsts: function() { return ActionTypeConsts; } }); const ActionTypeConsts = { TRANSFORM_MOVE: 'TRANSFORM_MOVE', TRANSFORM_SCALE: 'TRANSFORM_SCALE', TRANSFORM_ROTATE: 'TRANSFORM_ROTATE', TRANSFORM_SKEW: 'TRANSFORM_SKEW', STYLE_OPACITY: 'STYLE_OPACITY', STYLE_SIZE: 'STYLE_SIZE', STYLE_FILTER: 'STYLE_FILTER', STYLE_FONT_VARIATION: 'STYLE_FONT_VARIATION', STYLE_BACKGROUND_COLOR: 'STYLE_BACKGROUND_COLOR', STYLE_BORDER: 'STYLE_BORDER', STYLE_TEXT_COLOR: 'STYLE_TEXT_COLOR', OBJECT_VALUE: 'OBJECT_VALUE', PLUGIN_LOTTIE: 'PLUGIN_LOTTIE', PLUGIN_SPLINE: 'PLUGIN_SPLINE', PLUGIN_RIVE: 'PLUGIN_RIVE', PLUGIN_VARIABLE: 'PLUGIN_VARIABLE', GENERAL_DISPLAY: 'GENERAL_DISPLAY', GENERAL_START_ACTION: 'GENERAL_START_ACTION', GENERAL_CONTINUOUS_ACTION: 'GENERAL_CONTINUOUS_ACTION', // TODO: Clean these up below because they're not used at this time GENERAL_COMBO_CLASS: 'GENERAL_COMBO_CLASS', GENERAL_STOP_ACTION: 'GENERAL_STOP_ACTION', GENERAL_LOOP: 'GENERAL_LOOP', STYLE_BOX_SHADOW: 'STYLE_BOX_SHADOW' }; const ActionAppliesTo = { ELEMENT: 'ELEMENT', ELEMENT_CLASS: 'ELEMENT_CLASS', TRIGGER_ELEMENT: 'TRIGGER_ELEMENT' }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC1jb25zdGFudHMvYW5pbWF0aW9uLWFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEFjdGlvblR5cGVDb25zdHMgPSB7XG4gIFRSQU5TRk9STV9NT1ZFOiAnVFJBTlNGT1JNX01PVkUnIGFzIGNvbnN0LFxuICBUUkFOU0ZPUk1fU0NBTEU6ICdUUkFOU0ZPUk1fU0NBTEUnIGFzIGNvbnN0LFxuICBUUkFOU0ZPUk1fUk9UQVRFOiAnVFJBTlNGT1JNX1JPVEFURScgYXMgY29uc3QsXG4gIFRSQU5TRk9STV9TS0VXOiAnVFJBTlNGT1JNX1NLRVcnIGFzIGNvbnN0LFxuICBTVFlMRV9PUEFDSVRZOiAnU1RZTEVfT1BBQ0lUWScgYXMgY29uc3QsXG4gIFNUWUxFX1NJWkU6ICdTVFlMRV9TSVpFJyBhcyBjb25zdCxcbiAgU1RZTEVfRklMVEVSOiAnU1RZTEVfRklMVEVSJyBhcyBjb25zdCxcbiAgU1RZTEVfRk9OVF9WQVJJQVRJT046ICdTVFlMRV9GT05UX1ZBUklBVElPTicgYXMgY29uc3QsXG4gIFNUWUxFX0JBQ0tHUk9VTkRfQ09MT1I6ICdTVFlMRV9CQUNLR1JPVU5EX0NPTE9SJyBhcyBjb25zdCxcbiAgU1RZTEVfQk9SREVSOiAnU1RZTEVfQk9SREVSJyBhcyBjb25zdCxcbiAgU1RZTEVfVEVYVF9DT0xPUjogJ1NUWUxFX1RFWFRfQ09MT1InIGFzIGNvbnN0LFxuICBPQkpFQ1RfVkFMVUU6ICdPQkpFQ1RfVkFMVUUnIGFzIGNvbnN0LFxuICBQTFVHSU5fTE9UVElFOiAnUExVR0lOX0xPVFRJRScgYXMgY29uc3QsXG4gIFBMVUdJTl9TUExJTkU6ICdQTFVHSU5fU1BMSU5FJyBhcyBjb25zdCxcbiAgUExVR0lOX1JJVkU6ICdQTFVHSU5fUklWRScgYXMgY29uc3QsXG4gIFBMVUdJTl9WQVJJQUJMRTogJ1BMVUdJTl9WQVJJQUJMRScgYXMgY29uc3QsXG4gIEdFTkVSQUxfRElTUExBWTogJ0dFTkVSQUxfRElTUExBWScgYXMgY29uc3QsXG4gIEdFTkVSQUxfU1RBUlRfQUNUSU9OOiAnR0VORVJBTF9TVEFSVF9BQ1RJT04nIGFzIGNvbnN0LFxuICBHRU5FUkFMX0NPTlRJTlVPVVNfQUNUSU9OOiAnR0VORVJBTF9DT05USU5VT1VTX0FDVElPTicgYXMgY29uc3QsXG5cbiAgLy8gVE9ETzogQ2xlYW4gdGhlc2UgdXAgYmVsb3cgYmVjYXVzZSB0aGV5J3JlIG5vdCB1c2VkIGF0IHRoaXMgdGltZVxuICBHRU5FUkFMX0NPTUJPX0NMQVNTOiAnR0VORVJBTF9DT01CT19DTEFTUycgYXMgY29uc3QsXG4gIEdFTkVSQUxfU1RPUF9BQ1RJT046ICdHRU5FUkFMX1NUT1BfQUNUSU9OJyBhcyBjb25zdCxcbiAgR0VORVJBTF9MT09QOiAnR0VORVJBTF9MT09QJyBhcyBjb25zdCxcbiAgU1RZTEVfQk9YX1NIQURPVzogJ1NUWUxFX0JPWF9TSEFET1cnIGFzIGNvbnN0LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQWN0aW9uVHlwZUlkVHlwZSA9IGtleW9mIHR5cGVvZiBBY3Rpb25UeXBlQ29uc3RzO1xuXG5leHBvcnQgY29uc3QgQWN0aW9uQXBwbGllc1RvID0ge1xuICBFTEVNRU5UOiAnRUxFTUVOVCcgYXMgY29uc3QsXG4gIEVMRU1FTlRfQ0xBU1M6ICdFTEVNRU5UX0NMQVNTJyBhcyBjb25zdCxcbiAgVFJJR0dFUl9FTEVNRU5UOiAnVFJJR0dFUl9FTEVNRU5UJyBhcyBjb25zdCxcbn0gYXMgY29uc3Q7XG4iXSwibmFtZXMiOlsiQWN0aW9uQXBwbGllc1RvIiwiQWN0aW9uVHlwZUNvbnN0cyIsIlRSQU5TRk9STV9NT1ZFIiwiVFJBTlNGT1JNX1NDQUxFIiwiVFJBTlNGT1JNX1JPVEFURSIsIlRSQU5TRk9STV9TS0VXIiwiU1RZTEVfT1BBQ0lUWSIsIlNUWUxFX1NJWkUiLCJTVFlMRV9GSUxURVIiLCJTVFlMRV9GT05UX1ZBUklBVElPTiIsIlNUWUxFX0JBQ0tHUk9VTkRfQ09MT1IiLCJTVFlMRV9CT1JERVIiLCJTVFlMRV9URVhUX0NPTE9SIiwiT0JKRUNUX1ZBTFVFIiwiUExVR0lOX0xPVFRJRSIsIlBMVUdJTl9TUExJTkUiLCJQTFVHSU5fUklWRSIsIlBMVUdJTl9WQVJJQUJMRSIsIkdFTkVSQUxfRElTUExBWSIsIkdFTkVSQUxfU1RBUlRfQUNUSU9OIiwiR0VORVJBTF9DT05USU5VT1VTX0FDVElPTiIsIkdFTkVSQUxfQ09NQk9fQ0xBU1MiLCJHRU5FUkFMX1NUT1BfQUNUSU9OIiwiR0VORVJBTF9MT09QIiwiU1RZTEVfQk9YX1NIQURPVyIsIkVMRU1FTlQiLCJFTEVNRU5UX0NMQVNTIiwiVFJJR0dFUl9FTEVNRU5UIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQThCYUEsZUFBZTtlQUFmQTs7SUE5QkFDLGdCQUFnQjtlQUFoQkE7OztBQUFOLE1BQU1BLG1CQUFtQjtJQUM5QkMsZ0JBQWdCO0lBQ2hCQyxpQkFBaUI7SUFDakJDLGtCQUFrQjtJQUNsQkMsZ0JBQWdCO0lBQ2hCQyxlQUFlO0lBQ2ZDLFlBQVk7SUFDWkMsY0FBYztJQUNkQyxzQkFBc0I7SUFDdEJDLHdCQUF3QjtJQUN4QkMsY0FBYztJQUNkQyxrQkFBa0I7SUFDbEJDLGNBQWM7SUFDZEMsZUFBZTtJQUNmQyxlQUFlO0lBQ2ZDLGFBQWE7SUFDYkMsaUJBQWlCO0lBQ2pCQyxpQkFBaUI7SUFDakJDLHNCQUFzQjtJQUN0QkMsMkJBQTJCO0lBRTNCLG1FQUFtRTtJQUNuRUMscUJBQXFCO0lBQ3JCQyxxQkFBcUI7SUFDckJDLGNBQWM7SUFDZEMsa0JBQWtCO0FBQ3BCO0FBSU8sTUFBTXhCLGtCQUFrQjtJQUM3QnlCLFNBQVM7SUFDVEMsZUFBZTtJQUNmQyxpQkFBaUI7QUFDbkIifQ== }), 7087: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { ActionTypeConsts: function() { return _animationactions.ActionTypeConsts; }, IX2EngineActionTypes: function() { return _IX2EngineActionTypes; }, IX2EngineConstants: function() { return _IX2EngineConstants; }, QuickEffectIds: function() { return _triggerevents.QuickEffectIds; } }); const _triggerevents = _export_star(__webpack_require__(1833), exports); const _animationactions = _export_star(__webpack_require__(262), exports); _export_star(__webpack_require__(8704), exports); _export_star(__webpack_require__(3213), exports); const _IX2EngineActionTypes = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(8023)); const _IX2EngineConstants = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(2686)); function _export_star(from, to) { Object.keys(from).forEach(function(k) { if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) { Object.defineProperty(to, k, { enumerable: true, get: function() { return from[k]; } }); } }); return from; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC1jb25zdGFudHMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90cmlnZ2VyLWV2ZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2FuaW1hdGlvbi1hY3Rpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vdHJpZ2dlci1pbnRlcmFjdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWR1Y2VkLW1vdGlvbic7XG5cbmltcG9ydCAqIGFzIElYMkVuZ2luZUFjdGlvblR5cGVzIGZyb20gJy4vSVgyRW5naW5lQWN0aW9uVHlwZXMnO1xuaW1wb3J0ICogYXMgSVgyRW5naW5lQ29uc3RhbnRzIGZyb20gJy4vSVgyRW5naW5lQ29uc3RhbnRzJztcbmV4cG9ydCB7SVgyRW5naW5lQWN0aW9uVHlwZXMsIElYMkVuZ2luZUNvbnN0YW50c307XG5cbmV4cG9ydCB7QWN0aW9uVHlwZUNvbnN0c30gZnJvbSAnLi9hbmltYXRpb24tYWN0aW9ucyc7XG5leHBvcnQge1F1aWNrRWZmZWN0SWRzfSBmcm9tICcuL3RyaWdnZXItZXZlbnRzJztcbiJdLCJuYW1lcyI6WyJBY3Rpb25UeXBlQ29uc3RzIiwiSVgyRW5naW5lQWN0aW9uVHlwZXMiLCJJWDJFbmdpbmVDb25zdGFudHMiLCJRdWlja0VmZmVjdElkcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFTUUEsZ0JBQWdCO2VBQWhCQSxrQ0FBZ0I7O0lBRmhCQyxvQkFBb0I7ZUFBcEJBOztJQUFzQkMsa0JBQWtCO2VBQWxCQTs7SUFHdEJDLGNBQWM7ZUFBZEEsNkJBQWM7Ozs0Q0FWUjsrQ0FDQTtxQkFDQTtxQkFDQTs4RUFFd0I7NEVBQ0YifQ== }), 3213: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "ReducedMotionTypes", ({ enumerable: true, get: function() { return ReducedMotionTypes; } })); const _animationactions = __webpack_require__(262); const { TRANSFORM_MOVE, TRANSFORM_SCALE, TRANSFORM_ROTATE, TRANSFORM_SKEW, STYLE_SIZE, STYLE_FILTER, STYLE_FONT_VARIATION } = _animationactions.ActionTypeConsts; const ReducedMotionTypes = { [TRANSFORM_MOVE]: true, [TRANSFORM_SCALE]: true, [TRANSFORM_ROTATE]: true, [TRANSFORM_SKEW]: true, [STYLE_SIZE]: true, [STYLE_FILTER]: true, [STYLE_FONT_VARIATION]: true }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC1jb25zdGFudHMvcmVkdWNlZC1tb3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBY3Rpb25UeXBlQ29uc3RzfSBmcm9tICcuL2FuaW1hdGlvbi1hY3Rpb25zJztcblxuY29uc3Qge1xuICBUUkFOU0ZPUk1fTU9WRSxcbiAgVFJBTlNGT1JNX1NDQUxFLFxuICBUUkFOU0ZPUk1fUk9UQVRFLFxuICBUUkFOU0ZPUk1fU0tFVyxcbiAgU1RZTEVfU0laRSxcbiAgU1RZTEVfRklMVEVSLFxuICBTVFlMRV9GT05UX1ZBUklBVElPTixcbn0gPSBBY3Rpb25UeXBlQ29uc3RzO1xuXG4vKipcbiAqIFJlZHVjZWQgTW90aW9uOiBBY3Rpb24gdHlwZXMgdG8gYnlwYXNzIGR1cmluZyBgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbmBcbiAqL1xuXG5leHBvcnQgY29uc3QgUmVkdWNlZE1vdGlvblR5cGVzID0ge1xuICBbVFJBTlNGT1JNX01PVkVdOiB0cnVlLFxuICBbVFJBTlNGT1JNX1NDQUxFXTogdHJ1ZSxcbiAgW1RSQU5TRk9STV9ST1RBVEVdOiB0cnVlLFxuICBbVFJBTlNGT1JNX1NLRVddOiB0cnVlLFxuICBbU1RZTEVfU0laRV06IHRydWUsXG4gIFtTVFlMRV9GSUxURVJdOiB0cnVlLFxuICBbU1RZTEVfRk9OVF9WQVJJQVRJT05dOiB0cnVlLFxufSBhcyBjb25zdDtcbiJdLCJuYW1lcyI6WyJSZWR1Y2VkTW90aW9uVHlwZXMiLCJUUkFOU0ZPUk1fTU9WRSIsIlRSQU5TRk9STV9TQ0FMRSIsIlRSQU5TRk9STV9ST1RBVEUiLCJUUkFOU0ZPUk1fU0tFVyIsIlNUWUxFX1NJWkUiLCJTVFlMRV9GSUxURVIiLCJTVFlMRV9GT05UX1ZBUklBVElPTiIsIkFjdGlvblR5cGVDb25zdHMiXSwibWFwcGluZ3MiOiI7Ozs7K0JBZ0JhQTs7O2VBQUFBOzs7a0NBaEJrQjtBQUUvQixNQUFNLEVBQ0pDLGNBQWMsRUFDZEMsZUFBZSxFQUNmQyxnQkFBZ0IsRUFDaEJDLGNBQWMsRUFDZEMsVUFBVSxFQUNWQyxZQUFZLEVBQ1pDLG9CQUFvQixFQUNyQixHQUFHQyxrQ0FBZ0I7QUFNYixNQUFNUixxQkFBcUI7SUFDaEMsQ0FBQ0MsZUFBZSxFQUFFO0lBQ2xCLENBQUNDLGdCQUFnQixFQUFFO0lBQ25CLENBQUNDLGlCQUFpQixFQUFFO0lBQ3BCLENBQUNDLGVBQWUsRUFBRTtJQUNsQixDQUFDQyxXQUFXLEVBQUU7SUFDZCxDQUFDQyxhQUFhLEVBQUU7SUFDaEIsQ0FBQ0MscUJBQXFCLEVBQUU7QUFDMUIifQ== }), 1833: (function (__unused_webpack_module, exports) { "use strict"; /** * Event Type IDs */ Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { EventAppliesTo: function() { return EventAppliesTo; }, EventBasedOn: function() { return EventBasedOn; }, EventContinuousMouseAxes: function() { return EventContinuousMouseAxes; }, EventLimitAffectedElements: function() { return EventLimitAffectedElements; }, EventTypeConsts: function() { return EventTypeConsts; }, QuickEffectDirectionConsts: function() { return QuickEffectDirectionConsts; }, QuickEffectIds: function() { return QuickEffectIds; } }); const EventTypeConsts = { NAVBAR_OPEN: 'NAVBAR_OPEN', NAVBAR_CLOSE: 'NAVBAR_CLOSE', TAB_ACTIVE: 'TAB_ACTIVE', TAB_INACTIVE: 'TAB_INACTIVE', SLIDER_ACTIVE: 'SLIDER_ACTIVE', SLIDER_INACTIVE: 'SLIDER_INACTIVE', DROPDOWN_OPEN: 'DROPDOWN_OPEN', DROPDOWN_CLOSE: 'DROPDOWN_CLOSE', MOUSE_CLICK: 'MOUSE_CLICK', MOUSE_SECOND_CLICK: 'MOUSE_SECOND_CLICK', MOUSE_DOWN: 'MOUSE_DOWN', MOUSE_UP: 'MOUSE_UP', MOUSE_OVER: 'MOUSE_OVER', MOUSE_OUT: 'MOUSE_OUT', MOUSE_MOVE: 'MOUSE_MOVE', MOUSE_MOVE_IN_VIEWPORT: 'MOUSE_MOVE_IN_VIEWPORT', SCROLL_INTO_VIEW: 'SCROLL_INTO_VIEW', SCROLL_OUT_OF_VIEW: 'SCROLL_OUT_OF_VIEW', SCROLLING_IN_VIEW: 'SCROLLING_IN_VIEW', ECOMMERCE_CART_OPEN: 'ECOMMERCE_CART_OPEN', ECOMMERCE_CART_CLOSE: 'ECOMMERCE_CART_CLOSE', PAGE_START: 'PAGE_START', PAGE_FINISH: 'PAGE_FINISH', PAGE_SCROLL_UP: 'PAGE_SCROLL_UP', PAGE_SCROLL_DOWN: 'PAGE_SCROLL_DOWN', PAGE_SCROLL: 'PAGE_SCROLL' }; const EventAppliesTo = { ELEMENT: 'ELEMENT', CLASS: 'CLASS', PAGE: 'PAGE' }; const EventBasedOn = { ELEMENT: 'ELEMENT', VIEWPORT: 'VIEWPORT' }; const EventContinuousMouseAxes = { X_AXIS: 'X_AXIS', Y_AXIS: 'Y_AXIS' }; const EventLimitAffectedElements = { CHILDREN: 'CHILDREN', SIBLINGS: 'SIBLINGS', IMMEDIATE_CHILDREN: 'IMMEDIATE_CHILDREN' }; const QuickEffectIds = { FADE_EFFECT: 'FADE_EFFECT', SLIDE_EFFECT: 'SLIDE_EFFECT', GROW_EFFECT: 'GROW_EFFECT', SHRINK_EFFECT: 'SHRINK_EFFECT', SPIN_EFFECT: 'SPIN_EFFECT', FLY_EFFECT: 'FLY_EFFECT', POP_EFFECT: 'POP_EFFECT', FLIP_EFFECT: 'FLIP_EFFECT', JIGGLE_EFFECT: 'JIGGLE_EFFECT', PULSE_EFFECT: 'PULSE_EFFECT', DROP_EFFECT: 'DROP_EFFECT', BLINK_EFFECT: 'BLINK_EFFECT', BOUNCE_EFFECT: 'BOUNCE_EFFECT', FLIP_LEFT_TO_RIGHT_EFFECT: 'FLIP_LEFT_TO_RIGHT_EFFECT', FLIP_RIGHT_TO_LEFT_EFFECT: 'FLIP_RIGHT_TO_LEFT_EFFECT', RUBBER_BAND_EFFECT: 'RUBBER_BAND_EFFECT', JELLO_EFFECT: 'JELLO_EFFECT', GROW_BIG_EFFECT: 'GROW_BIG_EFFECT', SHRINK_BIG_EFFECT: 'SHRINK_BIG_EFFECT', PLUGIN_LOTTIE_EFFECT: 'PLUGIN_LOTTIE_EFFECT' }; const QuickEffectDirectionConsts = { LEFT: 'LEFT', RIGHT: 'RIGHT', BOTTOM: 'BOTTOM', TOP: 'TOP', BOTTOM_LEFT: 'BOTTOM_LEFT', BOTTOM_RIGHT: 'BOTTOM_RIGHT', TOP_RIGHT: 'TOP_RIGHT', TOP_LEFT: 'TOP_LEFT', CLOCKWISE: 'CLOCKWISE', COUNTER_CLOCKWISE: 'COUNTER_CLOCKWISE' }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC1jb25zdGFudHMvdHJpZ2dlci1ldmVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFdmVudCBUeXBlIElEc1xuICovXG5cbmV4cG9ydCBjb25zdCBFdmVudFR5cGVDb25zdHMgPSB7XG4gIE5BVkJBUl9PUEVOOiAnTkFWQkFSX09QRU4nIGFzIGNvbnN0LFxuICBOQVZCQVJfQ0xPU0U6ICdOQVZCQVJfQ0xPU0UnIGFzIGNvbnN0LFxuICBUQUJfQUNUSVZFOiAnVEFCX0FDVElWRScgYXMgY29uc3QsXG4gIFRBQl9JTkFDVElWRTogJ1RBQl9JTkFDVElWRScgYXMgY29uc3QsXG4gIFNMSURFUl9BQ1RJVkU6ICdTTElERVJfQUNUSVZFJyBhcyBjb25zdCxcbiAgU0xJREVSX0lOQUNUSVZFOiAnU0xJREVSX0lOQUNUSVZFJyBhcyBjb25zdCxcbiAgRFJPUERPV05fT1BFTjogJ0RST1BET1dOX09QRU4nIGFzIGNvbnN0LFxuICBEUk9QRE9XTl9DTE9TRTogJ0RST1BET1dOX0NMT1NFJyBhcyBjb25zdCxcbiAgTU9VU0VfQ0xJQ0s6ICdNT1VTRV9DTElDSycgYXMgY29uc3QsXG4gIE1PVVNFX1NFQ09ORF9DTElDSzogJ01PVVNFX1NFQ09ORF9DTElDSycgYXMgY29uc3QsXG4gIE1PVVNFX0RPV046ICdNT1VTRV9ET1dOJyBhcyBjb25zdCxcbiAgTU9VU0VfVVA6ICdNT1VTRV9VUCcgYXMgY29uc3QsXG4gIE1PVVNFX09WRVI6ICdNT1VTRV9PVkVSJyBhcyBjb25zdCxcbiAgTU9VU0VfT1VUOiAnTU9VU0VfT1VUJyBhcyBjb25zdCxcbiAgTU9VU0VfTU9WRTogJ01PVVNFX01PVkUnIGFzIGNvbnN0LFxuICBNT1VTRV9NT1ZFX0lOX1ZJRVdQT1JUOiAnTU9VU0VfTU9WRV9JTl9WSUVXUE9SVCcgYXMgY29uc3QsXG4gIFNDUk9MTF9JTlRPX1ZJRVc6ICdTQ1JPTExfSU5UT19WSUVXJyBhcyBjb25zdCxcbiAgU0NST0xMX09VVF9PRl9WSUVXOiAnU0NST0xMX09VVF9PRl9WSUVXJyBhcyBjb25zdCxcbiAgU0NST0xMSU5HX0lOX1ZJRVc6ICdTQ1JPTExJTkdfSU5fVklFVycgYXMgY29uc3QsXG4gIEVDT01NRVJDRV9DQVJUX09QRU46ICdFQ09NTUVSQ0VfQ0FSVF9PUEVOJyBhcyBjb25zdCxcbiAgRUNPTU1FUkNFX0NBUlRfQ0xPU0U6ICdFQ09NTUVSQ0VfQ0FSVF9DTE9TRScgYXMgY29uc3QsXG4gIFBBR0VfU1RBUlQ6ICdQQUdFX1NUQVJUJyBhcyBjb25zdCxcbiAgUEFHRV9GSU5JU0g6ICdQQUdFX0ZJTklTSCcgYXMgY29uc3QsXG4gIFBBR0VfU0NST0xMX1VQOiAnUEFHRV9TQ1JPTExfVVAnIGFzIGNvbnN0LFxuICBQQUdFX1NDUk9MTF9ET1dOOiAnUEFHRV9TQ1JPTExfRE9XTicgYXMgY29uc3QsXG4gIFBBR0VfU0NST0xMOiAnUEFHRV9TQ1JPTEwnIGFzIGNvbnN0LFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBFdmVudCBDb25maWcgRW51bXNcbiAqL1xuXG5leHBvcnQgY29uc3QgRXZlbnRBcHBsaWVzVG8gPSB7XG4gIEVMRU1FTlQ6ICdFTEVNRU5UJyBhcyBjb25zdCxcbiAgQ0xBU1M6ICdDTEFTUycgYXMgY29uc3QsXG4gIFBBR0U6ICdQQUdFJyBhcyBjb25zdCxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBFdmVudEJhc2VkT24gPSB7XG4gIEVMRU1FTlQ6ICdFTEVNRU5UJyBhcyBjb25zdCxcbiAgVklFV1BPUlQ6ICdWSUVXUE9SVCcgYXMgY29uc3QsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgRXZlbnRDb250aW51b3VzTW91c2VBeGVzID0ge1xuICBYX0FYSVM6ICdYX0FYSVMnIGFzIGNvbnN0LFxuICBZX0FYSVM6ICdZX0FYSVMnIGFzIGNvbnN0LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IEV2ZW50TGltaXRBZmZlY3RlZEVsZW1lbnRzID0ge1xuICBDSElMRFJFTjogJ0NISUxEUkVOJyBhcyBjb25zdCxcbiAgU0lCTElOR1M6ICdTSUJMSU5HUycgYXMgY29uc3QsXG4gIElNTUVESUFURV9DSElMRFJFTjogJ0lNTUVESUFURV9DSElMRFJFTicgYXMgY29uc3QsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIFF1aWNrIEVmZmVjdCBFbnVtc1xuICovXG5leHBvcnQgY29uc3QgUXVpY2tFZmZlY3RJZHMgPSB7XG4gIEZBREVfRUZGRUNUOiAnRkFERV9FRkZFQ1QnIGFzIGNvbnN0LFxuICBTTElERV9FRkZFQ1Q6ICdTTElERV9FRkZFQ1QnIGFzIGNvbnN0LFxuICBHUk9XX0VGRkVDVDogJ0dST1dfRUZGRUNUJyBhcyBjb25zdCxcbiAgU0hSSU5LX0VGRkVDVDogJ1NIUklOS19FRkZFQ1QnIGFzIGNvbnN0LFxuICBTUElOX0VGRkVDVDogJ1NQSU5fRUZGRUNUJyBhcyBjb25zdCxcbiAgRkxZX0VGRkVDVDogJ0ZMWV9FRkZFQ1QnIGFzIGNvbnN0LFxuICBQT1BfRUZGRUNUOiAnUE9QX0VGRkVDVCcgYXMgY29uc3QsXG4gIEZMSVBfRUZGRUNUOiAnRkxJUF9FRkZFQ1QnIGFzIGNvbnN0LFxuICBKSUdHTEVfRUZGRUNUOiAnSklHR0xFX0VGRkVDVCcgYXMgY29uc3QsXG4gIFBVTFNFX0VGRkVDVDogJ1BVTFNFX0VGRkVDVCcgYXMgY29uc3QsXG4gIERST1BfRUZGRUNUOiAnRFJPUF9FRkZFQ1QnIGFzIGNvbnN0LFxuICBCTElOS19FRkZFQ1Q6ICdCTElOS19FRkZFQ1QnIGFzIGNvbnN0LFxuICBCT1VOQ0VfRUZGRUNUOiAnQk9VTkNFX0VGRkVDVCcgYXMgY29uc3QsXG4gIEZMSVBfTEVGVF9UT19SSUdIVF9FRkZFQ1Q6ICdGTElQX0xFRlRfVE9fUklHSFRfRUZGRUNUJyBhcyBjb25zdCxcbiAgRkxJUF9SSUdIVF9UT19MRUZUX0VGRkVDVDogJ0ZMSVBfUklHSFRfVE9fTEVGVF9FRkZFQ1QnIGFzIGNvbnN0LFxuICBSVUJCRVJfQkFORF9FRkZFQ1Q6ICdSVUJCRVJfQkFORF9FRkZFQ1QnIGFzIGNvbnN0LFxuICBKRUxMT19FRkZFQ1Q6ICdKRUxMT19FRkZFQ1QnIGFzIGNvbnN0LFxuICBHUk9XX0JJR19FRkZFQ1Q6ICdHUk9XX0JJR19FRkZFQ1QnIGFzIGNvbnN0LFxuICBTSFJJTktfQklHX0VGRkVDVDogJ1NIUklOS19CSUdfRUZGRUNUJyBhcyBjb25zdCxcbiAgUExVR0lOX0xPVFRJRV9FRkZFQ1Q6ICdQTFVHSU5fTE9UVElFX0VGRkVDVCcgYXMgY29uc3QsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIFF1aWNrIEVmZmVjdCBEaXJlY3Rpb24gRW51bXNcbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrRWZmZWN0RGlyZWN0aW9uQ29uc3RzID0ge1xuICBMRUZUOiAnTEVGVCcgYXMgY29uc3QsXG4gIFJJR0hUOiAnUklHSFQnIGFzIGNvbnN0LFxuICBCT1RUT006ICdCT1RUT00nIGFzIGNvbnN0LFxuICBUT1A6ICdUT1AnIGFzIGNvbnN0LFxuICBCT1RUT01fTEVGVDogJ0JPVFRPTV9MRUZUJyBhcyBjb25zdCxcbiAgQk9UVE9NX1JJR0hUOiAnQk9UVE9NX1JJR0hUJyBhcyBjb25zdCxcbiAgVE9QX1JJR0hUOiAnVE9QX1JJR0hUJyBhcyBjb25zdCxcbiAgVE9QX0xFRlQ6ICdUT1BfTEVGVCcgYXMgY29uc3QsXG4gIENMT0NLV0lTRTogJ0NMT0NLV0lTRScgYXMgY29uc3QsXG4gIENPVU5URVJfQ0xPQ0tXSVNFOiAnQ09VTlRFUl9DTE9DS1dJU0UnIGFzIGNvbnN0LFxufSBhcyBjb25zdDtcbiJdLCJuYW1lcyI6WyJFdmVudEFwcGxpZXNUbyIsIkV2ZW50QmFzZWRPbiIsIkV2ZW50Q29udGludW91c01vdXNlQXhlcyIsIkV2ZW50TGltaXRBZmZlY3RlZEVsZW1lbnRzIiwiRXZlbnRUeXBlQ29uc3RzIiwiUXVpY2tFZmZlY3REaXJlY3Rpb25Db25zdHMiLCJRdWlja0VmZmVjdElkcyIsIk5BVkJBUl9PUEVOIiwiTkFWQkFSX0NMT1NFIiwiVEFCX0FDVElWRSIsIlRBQl9JTkFDVElWRSIsIlNMSURFUl9BQ1RJVkUiLCJTTElERVJfSU5BQ1RJVkUiLCJEUk9QRE9XTl9PUEVOIiwiRFJPUERPV05fQ0xPU0UiLCJNT1VTRV9DTElDSyIsIk1PVVNFX1NFQ09ORF9DTElDSyIsIk1PVVNFX0RPV04iLCJNT1VTRV9VUCIsIk1PVVNFX09WRVIiLCJNT1VTRV9PVVQiLCJNT1VTRV9NT1ZFIiwiTU9VU0VfTU9WRV9JTl9WSUVXUE9SVCIsIlNDUk9MTF9JTlRPX1ZJRVciLCJTQ1JPTExfT1VUX09GX1ZJRVciLCJTQ1JPTExJTkdfSU5fVklFVyIsIkVDT01NRVJDRV9DQVJUX09QRU4iLCJFQ09NTUVSQ0VfQ0FSVF9DTE9TRSIsIlBBR0VfU1RBUlQiLCJQQUdFX0ZJTklTSCIsIlBBR0VfU0NST0xMX1VQIiwiUEFHRV9TQ1JPTExfRE9XTiIsIlBBR0VfU0NST0xMIiwiRUxFTUVOVCIsIkNMQVNTIiwiUEFHRSIsIlZJRVdQT1JUIiwiWF9BWElTIiwiWV9BWElTIiwiQ0hJTERSRU4iLCJTSUJMSU5HUyIsIklNTUVESUFURV9DSElMRFJFTiIsIkZBREVfRUZGRUNUIiwiU0xJREVfRUZGRUNUIiwiR1JPV19FRkZFQ1QiLCJTSFJJTktfRUZGRUNUIiwiU1BJTl9FRkZFQ1QiLCJGTFlfRUZGRUNUIiwiUE9QX0VGRkVDVCIsIkZMSVBfRUZGRUNUIiwiSklHR0xFX0VGRkVDVCIsIlBVTFNFX0VGRkVDVCIsIkRST1BfRUZGRUNUIiwiQkxJTktfRUZGRUNUIiwiQk9VTkNFX0VGRkVDVCIsIkZMSVBfTEVGVF9UT19SSUdIVF9FRkZFQ1QiLCJGTElQX1JJR0hUX1RPX0xFRlRfRUZGRUNUIiwiUlVCQkVSX0JBTkRfRUZGRUNUIiwiSkVMTE9fRUZGRUNUIiwiR1JPV19CSUdfRUZGRUNUIiwiU0hSSU5LX0JJR19FRkZFQ1QiLCJQTFVHSU5fTE9UVElFX0VGRkVDVCIsIkxFRlQiLCJSSUdIVCIsIkJPVFRPTSIsIlRPUCIsIkJPVFRPTV9MRUZUIiwiQk9UVE9NX1JJR0hUIiwiVE9QX1JJR0hUIiwiVE9QX0xFRlQiLCJDTE9DS1dJU0UiLCJDT1VOVEVSX0NMT0NLV0lTRSJdLCJtYXBwaW5ncyI6IkFBQUE7O0NBRUM7Ozs7Ozs7Ozs7O0lBbUNZQSxjQUFjO2VBQWRBOztJQU1BQyxZQUFZO2VBQVpBOztJQUtBQyx3QkFBd0I7ZUFBeEJBOztJQUtBQywwQkFBMEI7ZUFBMUJBOztJQWpEQUMsZUFBZTtlQUFmQTs7SUFvRkFDLDBCQUEwQjtlQUExQkE7O0lBMUJBQyxjQUFjO2VBQWRBOzs7QUExRE4sTUFBTUYsa0JBQWtCO0lBQzdCRyxhQUFhO0lBQ2JDLGNBQWM7SUFDZEMsWUFBWTtJQUNaQyxjQUFjO0lBQ2RDLGVBQWU7SUFDZkMsaUJBQWlCO0lBQ2pCQyxlQUFlO0lBQ2ZDLGdCQUFnQjtJQUNoQkMsYUFBYTtJQUNiQyxvQkFBb0I7SUFDcEJDLFlBQVk7SUFDWkMsVUFBVTtJQUNWQyxZQUFZO0lBQ1pDLFdBQVc7SUFDWEMsWUFBWTtJQUNaQyx3QkFBd0I7SUFDeEJDLGtCQUFrQjtJQUNsQkMsb0JBQW9CO0lBQ3BCQyxtQkFBbUI7SUFDbkJDLHFCQUFxQjtJQUNyQkMsc0JBQXNCO0lBQ3RCQyxZQUFZO0lBQ1pDLGFBQWE7SUFDYkMsZ0JBQWdCO0lBQ2hCQyxrQkFBa0I7SUFDbEJDLGFBQWE7QUFDZjtBQU1PLE1BQU1oQyxpQkFBaUI7SUFDNUJpQyxTQUFTO0lBQ1RDLE9BQU87SUFDUEMsTUFBTTtBQUNSO0FBRU8sTUFBTWxDLGVBQWU7SUFDMUJnQyxTQUFTO0lBQ1RHLFVBQVU7QUFDWjtBQUVPLE1BQU1sQywyQkFBMkI7SUFDdENtQyxRQUFRO0lBQ1JDLFFBQVE7QUFDVjtBQUVPLE1BQU1uQyw2QkFBNkI7SUFDeENvQyxVQUFVO0lBQ1ZDLFVBQVU7SUFDVkMsb0JBQW9CO0FBQ3RCO0FBS08sTUFBTW5DLGlCQUFpQjtJQUM1Qm9DLGFBQWE7SUFDYkMsY0FBYztJQUNkQyxhQUFhO0lBQ2JDLGVBQWU7SUFDZkMsYUFBYTtJQUNiQyxZQUFZO0lBQ1pDLFlBQVk7SUFDWkMsYUFBYTtJQUNiQyxlQUFlO0lBQ2ZDLGNBQWM7SUFDZEMsYUFBYTtJQUNiQyxjQUFjO0lBQ2RDLGVBQWU7SUFDZkMsMkJBQTJCO0lBQzNCQywyQkFBMkI7SUFDM0JDLG9CQUFvQjtJQUNwQkMsY0FBYztJQUNkQyxpQkFBaUI7SUFDakJDLG1CQUFtQjtJQUNuQkMsc0JBQXNCO0FBQ3hCO0FBS08sTUFBTXhELDZCQUE2QjtJQUN4Q3lELE1BQU07SUFDTkMsT0FBTztJQUNQQyxRQUFRO0lBQ1JDLEtBQUs7SUFDTEMsYUFBYTtJQUNiQyxjQUFjO0lBQ2RDLFdBQVc7SUFDWEMsVUFBVTtJQUNWQyxXQUFXO0lBQ1hDLG1CQUFtQjtBQUNyQiJ9 }), 8704: (function (__unused_webpack_module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "InteractionTypeConsts", ({ enumerable: true, get: function() { return InteractionTypeConsts; } })); const InteractionTypeConsts = { MOUSE_CLICK_INTERACTION: 'MOUSE_CLICK_INTERACTION', MOUSE_HOVER_INTERACTION: 'MOUSE_HOVER_INTERACTION', MOUSE_MOVE_INTERACTION: 'MOUSE_MOVE_INTERACTION', SCROLL_INTO_VIEW_INTERACTION: 'SCROLL_INTO_VIEW_INTERACTION', SCROLLING_IN_VIEW_INTERACTION: 'SCROLLING_IN_VIEW_INTERACTION', MOUSE_MOVE_IN_VIEWPORT_INTERACTION: 'MOUSE_MOVE_IN_VIEWPORT_INTERACTION', PAGE_IS_SCROLLING_INTERACTION: 'PAGE_IS_SCROLLING_INTERACTION', PAGE_LOAD_INTERACTION: 'PAGE_LOAD_INTERACTION', PAGE_SCROLLED_INTERACTION: 'PAGE_SCROLLED_INTERACTION', NAVBAR_INTERACTION: 'NAVBAR_INTERACTION', DROPDOWN_INTERACTION: 'DROPDOWN_INTERACTION', ECOMMERCE_CART_INTERACTION: 'ECOMMERCE_CART_INTERACTION', TAB_INTERACTION: 'TAB_INTERACTION', SLIDER_INTERACTION: 'SLIDER_INTERACTION' }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC1jb25zdGFudHMvdHJpZ2dlci1pbnRlcmFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEludGVyYWN0aW9uVHlwZUNvbnN0cyA9IHtcbiAgTU9VU0VfQ0xJQ0tfSU5URVJBQ1RJT046ICdNT1VTRV9DTElDS19JTlRFUkFDVElPTicgYXMgY29uc3QsXG4gIE1PVVNFX0hPVkVSX0lOVEVSQUNUSU9OOiAnTU9VU0VfSE9WRVJfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxuICBNT1VTRV9NT1ZFX0lOVEVSQUNUSU9OOiAnTU9VU0VfTU9WRV9JTlRFUkFDVElPTicgYXMgY29uc3QsXG4gIFNDUk9MTF9JTlRPX1ZJRVdfSU5URVJBQ1RJT046ICdTQ1JPTExfSU5UT19WSUVXX0lOVEVSQUNUSU9OJyBhcyBjb25zdCxcbiAgU0NST0xMSU5HX0lOX1ZJRVdfSU5URVJBQ1RJT046ICdTQ1JPTExJTkdfSU5fVklFV19JTlRFUkFDVElPTicgYXMgY29uc3QsXG4gIE1PVVNFX01PVkVfSU5fVklFV1BPUlRfSU5URVJBQ1RJT046XG4gICAgJ01PVVNFX01PVkVfSU5fVklFV1BPUlRfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxuICBQQUdFX0lTX1NDUk9MTElOR19JTlRFUkFDVElPTjogJ1BBR0VfSVNfU0NST0xMSU5HX0lOVEVSQUNUSU9OJyBhcyBjb25zdCxcbiAgUEFHRV9MT0FEX0lOVEVSQUNUSU9OOiAnUEFHRV9MT0FEX0lOVEVSQUNUSU9OJyBhcyBjb25zdCxcbiAgUEFHRV9TQ1JPTExFRF9JTlRFUkFDVElPTjogJ1BBR0VfU0NST0xMRURfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxuICBOQVZCQVJfSU5URVJBQ1RJT046ICdOQVZCQVJfSU5URVJBQ1RJT04nIGFzIGNvbnN0LFxuICBEUk9QRE9XTl9JTlRFUkFDVElPTjogJ0RST1BET1dOX0lOVEVSQUNUSU9OJyBhcyBjb25zdCxcbiAgRUNPTU1FUkNFX0NBUlRfSU5URVJBQ1RJT046ICdFQ09NTUVSQ0VfQ0FSVF9JTlRFUkFDVElPTicgYXMgY29uc3QsXG4gIFRBQl9JTlRFUkFDVElPTjogJ1RBQl9JTlRFUkFDVElPTicgYXMgY29uc3QsXG4gIFNMSURFUl9JTlRFUkFDVElPTjogJ1NMSURFUl9JTlRFUkFDVElPTicgYXMgY29uc3QsXG59IGFzIGNvbnN0O1xuIl0sIm5hbWVzIjpbIkludGVyYWN0aW9uVHlwZUNvbnN0cyIsIk1PVVNFX0NMSUNLX0lOVEVSQUNUSU9OIiwiTU9VU0VfSE9WRVJfSU5URVJBQ1RJT04iLCJNT1VTRV9NT1ZFX0lOVEVSQUNUSU9OIiwiU0NST0xMX0lOVE9fVklFV19JTlRFUkFDVElPTiIsIlNDUk9MTElOR19JTl9WSUVXX0lOVEVSQUNUSU9OIiwiTU9VU0VfTU9WRV9JTl9WSUVXUE9SVF9JTlRFUkFDVElPTiIsIlBBR0VfSVNfU0NST0xMSU5HX0lOVEVSQUNUSU9OIiwiUEFHRV9MT0FEX0lOVEVSQUNUSU9OIiwiUEFHRV9TQ1JPTExFRF9JTlRFUkFDVElPTiIsIk5BVkJBUl9JTlRFUkFDVElPTiIsIkRST1BET1dOX0lOVEVSQUNUSU9OIiwiRUNPTU1FUkNFX0NBUlRfSU5URVJBQ1RJT04iLCJUQUJfSU5URVJBQ1RJT04iLCJTTElERVJfSU5URVJBQ1RJT04iXSwibWFwcGluZ3MiOiI7Ozs7K0JBQWFBOzs7ZUFBQUE7OztBQUFOLE1BQU1BLHdCQUF3QjtJQUNuQ0MseUJBQXlCO0lBQ3pCQyx5QkFBeUI7SUFDekJDLHdCQUF3QjtJQUN4QkMsOEJBQThCO0lBQzlCQywrQkFBK0I7SUFDL0JDLG9DQUNFO0lBQ0ZDLCtCQUErQjtJQUMvQkMsdUJBQXVCO0lBQ3ZCQywyQkFBMkI7SUFDM0JDLG9CQUFvQjtJQUNwQkMsc0JBQXNCO0lBQ3RCQyw0QkFBNEI7SUFDNUJDLGlCQUFpQjtJQUNqQkMsb0JBQW9CO0FBQ3RCIn0= }), 380: (function (__unused_webpack_module, exports) { "use strict"; // Big List of Colors // ------------------ // Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "normalizeColor", ({ enumerable: true, get: function() { return normalizeColor; } })); const colorNamesObj = { aliceblue: '#F0F8FF', antiquewhite: '#FAEBD7', aqua: '#00FFFF', aquamarine: '#7FFFD4', azure: '#F0FFFF', beige: '#F5F5DC', bisque: '#FFE4C4', black: '#000000', blanchedalmond: '#FFEBCD', blue: '#0000FF', blueviolet: '#8A2BE2', brown: '#A52A2A', burlywood: '#DEB887', cadetblue: '#5F9EA0', chartreuse: '#7FFF00', chocolate: '#D2691E', coral: '#FF7F50', cornflowerblue: '#6495ED', cornsilk: '#FFF8DC', crimson: '#DC143C', cyan: '#00FFFF', darkblue: '#00008B', darkcyan: '#008B8B', darkgoldenrod: '#B8860B', darkgray: '#A9A9A9', darkgreen: '#006400', darkgrey: '#A9A9A9', darkkhaki: '#BDB76B', darkmagenta: '#8B008B', darkolivegreen: '#556B2F', darkorange: '#FF8C00', darkorchid: '#9932CC', darkred: '#8B0000', darksalmon: '#E9967A', darkseagreen: '#8FBC8F', darkslateblue: '#483D8B', darkslategray: '#2F4F4F', darkslategrey: '#2F4F4F', darkturquoise: '#00CED1', darkviolet: '#9400D3', deeppink: '#FF1493', deepskyblue: '#00BFFF', dimgray: '#696969', dimgrey: '#696969', dodgerblue: '#1E90FF', firebrick: '#B22222', floralwhite: '#FFFAF0', forestgreen: '#228B22', fuchsia: '#FF00FF', gainsboro: '#DCDCDC', ghostwhite: '#F8F8FF', gold: '#FFD700', goldenrod: '#DAA520', gray: '#808080', green: '#008000', greenyellow: '#ADFF2F', grey: '#808080', honeydew: '#F0FFF0', hotpink: '#FF69B4', indianred: '#CD5C5C', indigo: '#4B0082', ivory: '#FFFFF0', khaki: '#F0E68C', lavender: '#E6E6FA', lavenderblush: '#FFF0F5', lawngreen: '#7CFC00', lemonchiffon: '#FFFACD', lightblue: '#ADD8E6', lightcoral: '#F08080', lightcyan: '#E0FFFF', lightgoldenrodyellow: '#FAFAD2', lightgray: '#D3D3D3', lightgreen: '#90EE90', lightgrey: '#D3D3D3', lightpink: '#FFB6C1', lightsalmon: '#FFA07A', lightseagreen: '#20B2AA', lightskyblue: '#87CEFA', lightslategray: '#778899', lightslategrey: '#778899', lightsteelblue: '#B0C4DE', lightyellow: '#FFFFE0', lime: '#00FF00', limegreen: '#32CD32', linen: '#FAF0E6', magenta: '#FF00FF', maroon: '#800000', mediumaquamarine: '#66CDAA', mediumblue: '#0000CD', mediumorchid: '#BA55D3', mediumpurple: '#9370DB', mediumseagreen: '#3CB371', mediumslateblue: '#7B68EE', mediumspringgreen: '#00FA9A', mediumturquoise: '#48D1CC', mediumvioletred: '#C71585', midnightblue: '#191970', mintcream: '#F5FFFA', mistyrose: '#FFE4E1', moccasin: '#FFE4B5', navajowhite: '#FFDEAD', navy: '#000080', oldlace: '#FDF5E6', olive: '#808000', olivedrab: '#6B8E23', orange: '#FFA500', orangered: '#FF4500', orchid: '#DA70D6', palegoldenrod: '#EEE8AA', palegreen: '#98FB98', paleturquoise: '#AFEEEE', palevioletred: '#DB7093', papayawhip: '#FFEFD5', peachpuff: '#FFDAB9', peru: '#CD853F', pink: '#FFC0CB', plum: '#DDA0DD', powderblue: '#B0E0E6', purple: '#800080', rebeccapurple: '#663399', red: '#FF0000', rosybrown: '#BC8F8F', royalblue: '#4169E1', saddlebrown: '#8B4513', salmon: '#FA8072', sandybrown: '#F4A460', seagreen: '#2E8B57', seashell: '#FFF5EE', sienna: '#A0522D', silver: '#C0C0C0', skyblue: '#87CEEB', slateblue: '#6A5ACD', slategray: '#708090', slategrey: '#708090', snow: '#FFFAFA', springgreen: '#00FF7F', steelblue: '#4682B4', tan: '#D2B48C', teal: '#008080', thistle: '#D8BFD8', tomato: '#FF6347', turquoise: '#40E0D0', violet: '#EE82EE', wheat: '#F5DEB3', white: '#FFFFFF', whitesmoke: '#F5F5F5', yellow: '#FFFF00', yellowgreen: '#9ACD32' }; function normalizeColor(inputColor) { let red; let green; let blue; let alpha = 1; // Default alpha to 1 const rawColor = inputColor.replace(/\s/g, '').toLowerCase(); const namedColor = typeof colorNamesObj[rawColor] === 'string' ? colorNamesObj[rawColor].toLowerCase() : null; const cleanColor = namedColor || rawColor; if (cleanColor.startsWith('#')) { const hex = cleanColor.substring(1); if (hex.length === 3 || hex.length === 4) { red = parseInt(hex[0] + hex[0], 16); green = parseInt(hex[1] + hex[1], 16); blue = parseInt(hex[2] + hex[2], 16); if (hex.length === 4) { alpha = parseInt(hex[3] + hex[3], 16) / 255; } } else if (hex.length === 6 || hex.length === 8) { red = parseInt(hex.substring(0, 2), 16); green = parseInt(hex.substring(2, 4), 16); blue = parseInt(hex.substring(4, 6), 16); if (hex.length === 8) { alpha = parseInt(hex.substring(6, 8), 16) / 255; } } } else if (cleanColor.startsWith('rgba')) { const rgbaValues = cleanColor.match(/rgba\(([^)]+)\)/)[1].split(','); red = parseInt(rgbaValues[0], 10); green = parseInt(rgbaValues[1], 10); blue = parseInt(rgbaValues[2], 10); alpha = parseFloat(rgbaValues[3]); } else if (cleanColor.startsWith('rgb')) { const rgbValues = cleanColor.match(/rgb\(([^)]+)\)/)[1].split(','); red = parseInt(rgbValues[0], 10); green = parseInt(rgbValues[1], 10); blue = parseInt(rgbValues[2], 10); } else if (cleanColor.startsWith('hsla')) { const hslaValues = cleanColor.match(/hsla\(([^)]+)\)/)[1].split(','); const h = parseFloat(hslaValues[0]); const s = parseFloat(hslaValues[1].replace('%', '')) / 100; const l = parseFloat(hslaValues[2].replace('%', '')) / 100; alpha = parseFloat(hslaValues[3]); // Convert HSL to RGB const C = (1 - Math.abs(2 * l - 1)) * s; const X = C * (1 - Math.abs(h / 60 % 2 - 1)); const m = l - C / 2; let R; let G; let B; if (h >= 0 && h < 60) { R = C; G = X; B = 0; } else if (h >= 60 && h < 120) { R = X; G = C; B = 0; } else if (h >= 120 && h < 180) { R = 0; G = C; B = X; } else if (h >= 180 && h < 240) { R = 0; G = X; B = C; } else if (h >= 240 && h < 300) { R = X; G = 0; B = C; } else { R = C; G = 0; B = X; } red = Math.round((R + m) * 255); green = Math.round((G + m) * 255); blue = Math.round((B + m) * 255); } else if (cleanColor.startsWith('hsl')) { const hslValues = cleanColor.match(/hsl\(([^)]+)\)/)[1].split(','); const h = parseFloat(hslValues[0]); const s = parseFloat(hslValues[1].replace('%', '')) / 100; const l = parseFloat(hslValues[2].replace('%', '')) / 100; // Convert HSL to RGB (without alpha) const C = (1 - Math.abs(2 * l - 1)) * s; const X = C * (1 - Math.abs(h / 60 % 2 - 1)); const m = l - C / 2; let R; let G; let B; if (h >= 0 && h < 60) { R = C; G = X; B = 0; } else if (h >= 60 && h < 120) { R = X; G = C; B = 0; } else if (h >= 120 && h < 180) { R = 0; G = C; B = X; } else if (h >= 180 && h < 240) { R = 0; G = X; B = C; } else if (h >= 240 && h < 300) { R = X; G = 0; B = C; } else { R = C; G = 0; B = X; } red = Math.round((R + m) * 255); green = Math.round((G + m) * 255); blue = Math.round((B + m) * 255); } if (Number.isNaN(red) || Number.isNaN(green) || Number.isNaN(blue)) { throw new Error(`Invalid color in [ix2/shared/utils/normalizeColor.js] '${inputColor}'`); } return { red, green, blue, alpha }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC11dGlscy9ub3JtYWxpemVDb2xvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCaWcgTGlzdCBvZiBDb2xvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gPGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtY29sb3ItNC8jbmFtZWQtY29sb3JzPlxuY29uc3QgY29sb3JOYW1lc09iaiA9IHtcbiAgYWxpY2VibHVlOiAnI0YwRjhGRicsXG4gIGFudGlxdWV3aGl0ZTogJyNGQUVCRDcnLFxuICBhcXVhOiAnIzAwRkZGRicsXG4gIGFxdWFtYXJpbmU6ICcjN0ZGRkQ0JyxcbiAgYXp1cmU6ICcjRjBGRkZGJyxcbiAgYmVpZ2U6ICcjRjVGNURDJyxcbiAgYmlzcXVlOiAnI0ZGRTRDNCcsXG4gIGJsYWNrOiAnIzAwMDAwMCcsXG4gIGJsYW5jaGVkYWxtb25kOiAnI0ZGRUJDRCcsXG4gIGJsdWU6ICcjMDAwMEZGJyxcbiAgYmx1ZXZpb2xldDogJyM4QTJCRTInLFxuICBicm93bjogJyNBNTJBMkEnLFxuICBidXJseXdvb2Q6ICcjREVCODg3JyxcbiAgY2FkZXRibHVlOiAnIzVGOUVBMCcsXG4gIGNoYXJ0cmV1c2U6ICcjN0ZGRjAwJyxcbiAgY2hvY29sYXRlOiAnI0QyNjkxRScsXG4gIGNvcmFsOiAnI0ZGN0Y1MCcsXG4gIGNvcm5mbG93ZXJibHVlOiAnIzY0OTVFRCcsXG4gIGNvcm5zaWxrOiAnI0ZGRjhEQycsXG4gIGNyaW1zb246ICcjREMxNDNDJyxcbiAgY3lhbjogJyMwMEZGRkYnLFxuICBkYXJrYmx1ZTogJyMwMDAwOEInLFxuICBkYXJrY3lhbjogJyMwMDhCOEInLFxuICBkYXJrZ29sZGVucm9kOiAnI0I4ODYwQicsXG4gIGRhcmtncmF5OiAnI0E5QTlBOScsXG4gIGRhcmtncmVlbjogJyMwMDY0MDAnLFxuICBkYXJrZ3JleTogJyNBOUE5QTknLFxuICBkYXJra2hha2k6ICcjQkRCNzZCJyxcbiAgZGFya21hZ2VudGE6ICcjOEIwMDhCJyxcbiAgZGFya29saXZlZ3JlZW46ICcjNTU2QjJGJyxcbiAgZGFya29yYW5nZTogJyNGRjhDMDAnLFxuICBkYXJrb3JjaGlkOiAnIzk5MzJDQycsXG4gIGRhcmtyZWQ6ICcjOEIwMDAwJyxcbiAgZGFya3NhbG1vbjogJyNFOTk2N0EnLFxuICBkYXJrc2VhZ3JlZW46ICcjOEZCQzhGJyxcbiAgZGFya3NsYXRlYmx1ZTogJyM0ODNEOEInLFxuICBkYXJrc2xhdGVncmF5OiAnIzJGNEY0RicsXG4gIGRhcmtzbGF0ZWdyZXk6ICcjMkY0RjRGJyxcbiAgZGFya3R1cnF1b2lzZTogJyMwMENFRDEnLFxuICBkYXJrdmlvbGV0OiAnIzk0MDBEMycsXG4gIGRlZXBwaW5rOiAnI0ZGMTQ5MycsXG4gIGRlZXBza3libHVlOiAnIzAwQkZGRicsXG4gIGRpbWdyYXk6ICcjNjk2OTY5JyxcbiAgZGltZ3JleTogJyM2OTY5NjknLFxuICBkb2RnZXJibHVlOiAnIzFFOTBGRicsXG4gIGZpcmVicmljazogJyNCMjIyMjInLFxuICBmbG9yYWx3aGl0ZTogJyNGRkZBRjAnLFxuICBmb3Jlc3RncmVlbjogJyMyMjhCMjInLFxuICBmdWNoc2lhOiAnI0ZGMDBGRicsXG4gIGdhaW5zYm9ybzogJyNEQ0RDREMnLFxuICBnaG9zdHdoaXRlOiAnI0Y4RjhGRicsXG4gIGdvbGQ6ICcjRkZENzAwJyxcbiAgZ29sZGVucm9kOiAnI0RBQTUyMCcsXG4gIGdyYXk6ICcjODA4MDgwJyxcbiAgZ3JlZW46ICcjMDA4MDAwJyxcbiAgZ3JlZW55ZWxsb3c6ICcjQURGRjJGJyxcbiAgZ3JleTogJyM4MDgwODAnLFxuICBob25leWRldzogJyNGMEZGRjAnLFxuICBob3RwaW5rOiAnI0ZGNjlCNCcsXG4gIGluZGlhbnJlZDogJyNDRDVDNUMnLFxuICBpbmRpZ286ICcjNEIwMDgyJyxcbiAgaXZvcnk6ICcjRkZGRkYwJyxcbiAga2hha2k6ICcjRjBFNjhDJyxcbiAgbGF2ZW5kZXI6ICcjRTZFNkZBJyxcbiAgbGF2ZW5kZXJibHVzaDogJyNGRkYwRjUnLFxuICBsYXduZ3JlZW46ICcjN0NGQzAwJyxcbiAgbGVtb25jaGlmZm9uOiAnI0ZGRkFDRCcsXG4gIGxpZ2h0Ymx1ZTogJyNBREQ4RTYnLFxuICBsaWdodGNvcmFsOiAnI0YwODA4MCcsXG4gIGxpZ2h0Y3lhbjogJyNFMEZGRkYnLFxuICBsaWdodGdvbGRlbnJvZHllbGxvdzogJyNGQUZBRDInLFxuICBsaWdodGdyYXk6ICcjRDNEM0QzJyxcbiAgbGlnaHRncmVlbjogJyM5MEVFOTAnLFxuICBsaWdodGdyZXk6ICcjRDNEM0QzJyxcbiAgbGlnaHRwaW5rOiAnI0ZGQjZDMScsXG4gIGxpZ2h0c2FsbW9uOiAnI0ZGQTA3QScsXG4gIGxpZ2h0c2VhZ3JlZW46ICcjMjBCMkFBJyxcbiAgbGlnaHRza3libHVlOiAnIzg3Q0VGQScsXG4gIGxpZ2h0c2xhdGVncmF5OiAnIzc3ODg5OScsXG4gIGxpZ2h0c2xhdGVncmV5OiAnIzc3ODg5OScsXG4gIGxpZ2h0c3RlZWxibHVlOiAnI0IwQzRERScsXG4gIGxpZ2h0eWVsbG93OiAnI0ZGRkZFMCcsXG4gIGxpbWU6ICcjMDBGRjAwJyxcbiAgbGltZWdyZWVuOiAnIzMyQ0QzMicsXG4gIGxpbmVuOiAnI0ZBRjBFNicsXG4gIG1hZ2VudGE6ICcjRkYwMEZGJyxcbiAgbWFyb29uOiAnIzgwMDAwMCcsXG4gIG1lZGl1bWFxdWFtYXJpbmU6ICcjNjZDREFBJyxcbiAgbWVkaXVtYmx1ZTogJyMwMDAwQ0QnLFxuICBtZWRpdW1vcmNoaWQ6ICcjQkE1NUQzJyxcbiAgbWVkaXVtcHVycGxlOiAnIzkzNzBEQicsXG4gIG1lZGl1bXNlYWdyZWVuOiAnIzNDQjM3MScsXG4gIG1lZGl1bXNsYXRlYmx1ZTogJyM3QjY4RUUnLFxuICBtZWRpdW1zcHJpbmdncmVlbjogJyMwMEZBOUEnLFxuICBtZWRpdW10dXJxdW9pc2U6ICcjNDhEMUNDJyxcbiAgbWVkaXVtdmlvbGV0cmVkOiAnI0M3MTU4NScsXG4gIG1pZG5pZ2h0Ymx1ZTogJyMxOTE5NzAnLFxuICBtaW50Y3JlYW06ICcjRjVGRkZBJyxcbiAgbWlzdHlyb3NlOiAnI0ZGRTRFMScsXG4gIG1vY2Nhc2luOiAnI0ZGRTRCNScsXG4gIG5hdmFqb3doaXRlOiAnI0ZGREVBRCcsXG4gIG5hdnk6ICcjMDAwMDgwJyxcbiAgb2xkbGFjZTogJyNGREY1RTYnLFxuICBvbGl2ZTogJyM4MDgwMDAnLFxuICBvbGl2ZWRyYWI6ICcjNkI4RTIzJyxcbiAgb3JhbmdlOiAnI0ZGQTUwMCcsXG4gIG9yYW5nZXJlZDogJyNGRjQ1MDAnLFxuICBvcmNoaWQ6ICcjREE3MEQ2JyxcbiAgcGFsZWdvbGRlbnJvZDogJyNFRUU4QUEnLFxuICBwYWxlZ3JlZW46ICcjOThGQjk4JyxcbiAgcGFsZXR1cnF1b2lzZTogJyNBRkVFRUUnLFxuICBwYWxldmlvbGV0cmVkOiAnI0RCNzA5MycsXG4gIHBhcGF5YXdoaXA6ICcjRkZFRkQ1JyxcbiAgcGVhY2hwdWZmOiAnI0ZGREFCOScsXG4gIHBlcnU6ICcjQ0Q4NTNGJyxcbiAgcGluazogJyNGRkMwQ0InLFxuICBwbHVtOiAnI0REQTBERCcsXG4gIHBvd2RlcmJsdWU6ICcjQjBFMEU2JyxcbiAgcHVycGxlOiAnIzgwMDA4MCcsXG4gIHJlYmVjY2FwdXJwbGU6ICcjNjYzMzk5JyxcbiAgcmVkOiAnI0ZGMDAwMCcsXG4gIHJvc3licm93bjogJyNCQzhGOEYnLFxuICByb3lhbGJsdWU6ICcjNDE2OUUxJyxcbiAgc2FkZGxlYnJvd246ICcjOEI0NTEzJyxcbiAgc2FsbW9uOiAnI0ZBODA3MicsXG4gIHNhbmR5YnJvd246ICcjRjRBNDYwJyxcbiAgc2VhZ3JlZW46ICcjMkU4QjU3JyxcbiAgc2Vhc2hlbGw6ICcjRkZGNUVFJyxcbiAgc2llbm5hOiAnI0EwNTIyRCcsXG4gIHNpbHZlcjogJyNDMEMwQzAnLFxuICBza3libHVlOiAnIzg3Q0VFQicsXG4gIHNsYXRlYmx1ZTogJyM2QTVBQ0QnLFxuICBzbGF0ZWdyYXk6ICcjNzA4MDkwJyxcbiAgc2xhdGVncmV5OiAnIzcwODA5MCcsXG4gIHNub3c6ICcjRkZGQUZBJyxcbiAgc3ByaW5nZ3JlZW46ICcjMDBGRjdGJyxcbiAgc3RlZWxibHVlOiAnIzQ2ODJCNCcsXG4gIHRhbjogJyNEMkI0OEMnLFxuICB0ZWFsOiAnIzAwODA4MCcsXG4gIHRoaXN0bGU6ICcjRDhCRkQ4JyxcbiAgdG9tYXRvOiAnI0ZGNjM0NycsXG4gIHR1cnF1b2lzZTogJyM0MEUwRDAnLFxuICB2aW9sZXQ6ICcjRUU4MkVFJyxcbiAgd2hlYXQ6ICcjRjVERUIzJyxcbiAgd2hpdGU6ICcjRkZGRkZGJyxcbiAgd2hpdGVzbW9rZTogJyNGNUY1RjUnLFxuICB5ZWxsb3c6ICcjRkZGRjAwJyxcbiAgeWVsbG93Z3JlZW46ICcjOUFDRDMyJyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVDb2xvcihpbnB1dENvbG9yKSB7XG4gIGxldCByZWQ7XG4gIGxldCBncmVlbjtcbiAgbGV0IGJsdWU7XG4gIGxldCBhbHBoYSA9IDE7IC8vIERlZmF1bHQgYWxwaGEgdG8gMVxuICBjb25zdCByYXdDb2xvciA9IGlucHV0Q29sb3IucmVwbGFjZSgvXFxzL2csICcnKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBuYW1lZENvbG9yID1cbiAgICB0eXBlb2YgY29sb3JOYW1lc09ialtyYXdDb2xvcl0gPT09ICdzdHJpbmcnXG4gICAgICA/IGNvbG9yTmFtZXNPYmpbcmF3Q29sb3JdLnRvTG93ZXJDYXNlKClcbiAgICAgIDogbnVsbDtcbiAgY29uc3QgY2xlYW5Db2xvciA9IG5hbWVkQ29sb3IgfHwgcmF3Q29sb3I7XG5cbiAgaWYgKGNsZWFuQ29sb3Iuc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgY29uc3QgaGV4ID0gY2xlYW5Db2xvci5zdWJzdHJpbmcoMSk7XG5cbiAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMyB8fCBoZXgubGVuZ3RoID09PSA0KSB7XG4gICAgICByZWQgPSBwYXJzZUludChoZXhbMF0gKyBoZXhbMF0sIDE2KTtcbiAgICAgIGdyZWVuID0gcGFyc2VJbnQoaGV4WzFdICsgaGV4WzFdLCAxNik7XG4gICAgICBibHVlID0gcGFyc2VJbnQoaGV4WzJdICsgaGV4WzJdLCAxNik7XG4gICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICBhbHBoYSA9IHBhcnNlSW50KGhleFszXSArIGhleFszXSwgMTYpIC8gMjU1O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGV4Lmxlbmd0aCA9PT0gNiB8fCBoZXgubGVuZ3RoID09PSA4KSB7XG4gICAgICByZWQgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDAsIDIpLCAxNik7XG4gICAgICBncmVlbiA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMiwgNCksIDE2KTtcbiAgICAgIGJsdWUgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDQsIDYpLCAxNik7XG4gICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gOCkge1xuICAgICAgICBhbHBoYSA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoNiwgOCksIDE2KSAvIDI1NTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoY2xlYW5Db2xvci5zdGFydHNXaXRoKCdyZ2JhJykpIHtcbiAgICBjb25zdCByZ2JhVmFsdWVzID0gY2xlYW5Db2xvci5tYXRjaCgvcmdiYVxcKChbXildKylcXCkvKVsxXS5zcGxpdCgnLCcpO1xuICAgIHJlZCA9IHBhcnNlSW50KHJnYmFWYWx1ZXNbMF0sIDEwKTtcbiAgICBncmVlbiA9IHBhcnNlSW50KHJnYmFWYWx1ZXNbMV0sIDEwKTtcbiAgICBibHVlID0gcGFyc2VJbnQocmdiYVZhbHVlc1syXSwgMTApO1xuICAgIGFscGhhID0gcGFyc2VGbG9hdChyZ2JhVmFsdWVzWzNdKTtcbiAgfSBlbHNlIGlmIChjbGVhbkNvbG9yLnN0YXJ0c1dpdGgoJ3JnYicpKSB7XG4gICAgY29uc3QgcmdiVmFsdWVzID0gY2xlYW5Db2xvci5tYXRjaCgvcmdiXFwoKFteKV0rKVxcKS8pWzFdLnNwbGl0KCcsJyk7XG4gICAgcmVkID0gcGFyc2VJbnQocmdiVmFsdWVzWzBdLCAxMCk7XG4gICAgZ3JlZW4gPSBwYXJzZUludChyZ2JWYWx1ZXNbMV0sIDEwKTtcbiAgICBibHVlID0gcGFyc2VJbnQocmdiVmFsdWVzWzJdLCAxMCk7XG4gIH0gZWxzZSBpZiAoY2xlYW5Db2xvci5zdGFydHNXaXRoKCdoc2xhJykpIHtcbiAgICBjb25zdCBoc2xhVmFsdWVzID0gY2xlYW5Db2xvci5tYXRjaCgvaHNsYVxcKChbXildKylcXCkvKVsxXS5zcGxpdCgnLCcpO1xuICAgIGNvbnN0IGggPSBwYXJzZUZsb2F0KGhzbGFWYWx1ZXNbMF0pO1xuICAgIGNvbnN0IHMgPSBwYXJzZUZsb2F0KGhzbGFWYWx1ZXNbMV0ucmVwbGFjZSgnJScsICcnKSkgLyAxMDA7XG4gICAgY29uc3QgbCA9IHBhcnNlRmxvYXQoaHNsYVZhbHVlc1syXS5yZXBsYWNlKCclJywgJycpKSAvIDEwMDtcbiAgICBhbHBoYSA9IHBhcnNlRmxvYXQoaHNsYVZhbHVlc1szXSk7XG5cbiAgICAvLyBDb252ZXJ0IEhTTCB0byBSR0JcbiAgICBjb25zdCBDID0gKDEgLSBNYXRoLmFicygyICogbCAtIDEpKSAqIHM7XG4gICAgY29uc3QgWCA9IEMgKiAoMSAtIE1hdGguYWJzKCgoaCAvIDYwKSAlIDIpIC0gMSkpO1xuICAgIGNvbnN0IG0gPSBsIC0gQyAvIDI7XG4gICAgbGV0IFI7XG4gICAgbGV0IEc7XG4gICAgbGV0IEI7XG5cbiAgICBpZiAoaCA+PSAwICYmIGggPCA2MCkge1xuICAgICAgUiA9IEM7XG4gICAgICBHID0gWDtcbiAgICAgIEIgPSAwO1xuICAgIH0gZWxzZSBpZiAoaCA+PSA2MCAmJiBoIDwgMTIwKSB7XG4gICAgICBSID0gWDtcbiAgICAgIEcgPSBDO1xuICAgICAgQiA9IDA7XG4gICAgfSBlbHNlIGlmIChoID49IDEyMCAmJiBoIDwgMTgwKSB7XG4gICAgICBSID0gMDtcbiAgICAgIEcgPSBDO1xuICAgICAgQiA9IFg7XG4gICAgfSBlbHNlIGlmIChoID49IDE4MCAmJiBoIDwgMjQwKSB7XG4gICAgICBSID0gMDtcbiAgICAgIEcgPSBYO1xuICAgICAgQiA9IEM7XG4gICAgfSBlbHNlIGlmIChoID49IDI0MCAmJiBoIDwgMzAwKSB7XG4gICAgICBSID0gWDtcbiAgICAgIEcgPSAwO1xuICAgICAgQiA9IEM7XG4gICAgfSBlbHNlIHtcbiAgICAgIFIgPSBDO1xuICAgICAgRyA9IDA7XG4gICAgICBCID0gWDtcbiAgICB9XG5cbiAgICByZWQgPSBNYXRoLnJvdW5kKChSICsgbSkgKiAyNTUpO1xuICAgIGdyZWVuID0gTWF0aC5yb3VuZCgoRyArIG0pICogMjU1KTtcbiAgICBibHVlID0gTWF0aC5yb3VuZCgoQiArIG0pICogMjU1KTtcbiAgfSBlbHNlIGlmIChjbGVhbkNvbG9yLnN0YXJ0c1dpdGgoJ2hzbCcpKSB7XG4gICAgY29uc3QgaHNsVmFsdWVzID0gY2xlYW5Db2xvci5tYXRjaCgvaHNsXFwoKFteKV0rKVxcKS8pWzFdLnNwbGl0KCcsJyk7XG4gICAgY29uc3QgaCA9IHBhcnNlRmxvYXQoaHNsVmFsdWVzWzBdKTtcbiAgICBjb25zdCBzID0gcGFyc2VGbG9hdChoc2xWYWx1ZXNbMV0ucmVwbGFjZSgnJScsICcnKSkgLyAxMDA7XG4gICAgY29uc3QgbCA9IHBhcnNlRmxvYXQoaHNsVmFsdWVzWzJdLnJlcGxhY2UoJyUnLCAnJykpIC8gMTAwO1xuXG4gICAgLy8gQ29udmVydCBIU0wgdG8gUkdCICh3aXRob3V0IGFscGhhKVxuICAgIGNvbnN0IEMgPSAoMSAtIE1hdGguYWJzKDIgKiBsIC0gMSkpICogcztcbiAgICBjb25zdCBYID0gQyAqICgxIC0gTWF0aC5hYnMoKChoIC8gNjApICUgMikgLSAxKSk7XG4gICAgY29uc3QgbSA9IGwgLSBDIC8gMjtcbiAgICBsZXQgUjtcbiAgICBsZXQgRztcbiAgICBsZXQgQjtcblxuICAgIGlmIChoID49IDAgJiYgaCA8IDYwKSB7XG4gICAgICBSID0gQztcbiAgICAgIEcgPSBYO1xuICAgICAgQiA9IDA7XG4gICAgfSBlbHNlIGlmIChoID49IDYwICYmIGggPCAxMjApIHtcbiAgICAgIFIgPSBYO1xuICAgICAgRyA9IEM7XG4gICAgICBCID0gMDtcbiAgICB9IGVsc2UgaWYgKGggPj0gMTIwICYmIGggPCAxODApIHtcbiAgICAgIFIgPSAwO1xuICAgICAgRyA9IEM7XG4gICAgICBCID0gWDtcbiAgICB9IGVsc2UgaWYgKGggPj0gMTgwICYmIGggPCAyNDApIHtcbiAgICAgIFIgPSAwO1xuICAgICAgRyA9IFg7XG4gICAgICBCID0gQztcbiAgICB9IGVsc2UgaWYgKGggPj0gMjQwICYmIGggPCAzMDApIHtcbiAgICAgIFIgPSBYO1xuICAgICAgRyA9IDA7XG4gICAgICBCID0gQztcbiAgICB9IGVsc2Uge1xuICAgICAgUiA9IEM7XG4gICAgICBHID0gMDtcbiAgICAgIEIgPSBYO1xuICAgIH1cblxuICAgIHJlZCA9IE1hdGgucm91bmQoKFIgKyBtKSAqIDI1NSk7XG4gICAgZ3JlZW4gPSBNYXRoLnJvdW5kKChHICsgbSkgKiAyNTUpO1xuICAgIGJsdWUgPSBNYXRoLnJvdW5kKChCICsgbSkgKiAyNTUpO1xuICB9XG5cbiAgaWYgKE51bWJlci5pc05hTihyZWQpIHx8IE51bWJlci5pc05hTihncmVlbikgfHwgTnVtYmVyLmlzTmFOKGJsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgY29sb3IgaW4gW2l4Mi9zaGFyZWQvdXRpbHMvbm9ybWFsaXplQ29sb3IuanNdICcke2lucHV0Q29sb3J9J2BcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYX07XG59XG4iXSwibmFtZXMiOlsibm9ybWFsaXplQ29sb3IiLCJjb2xvck5hbWVzT2JqIiwiYWxpY2VibHVlIiwiYW50aXF1ZXdoaXRlIiwiYXF1YSIsImFxdWFtYXJpbmUiLCJhenVyZSIsImJlaWdlIiwiYmlzcXVlIiwiYmxhY2siLCJibGFuY2hlZGFsbW9uZCIsImJsdWUiLCJibHVldmlvbGV0IiwiYnJvd24iLCJidXJseXdvb2QiLCJjYWRldGJsdWUiLCJjaGFydHJldXNlIiwiY2hvY29sYXRlIiwiY29yYWwiLCJjb3JuZmxvd2VyYmx1ZSIsImNvcm5zaWxrIiwiY3JpbXNvbiIsImN5YW4iLCJkYXJrYmx1ZSIsImRhcmtjeWFuIiwiZGFya2dvbGRlbnJvZCIsImRhcmtncmF5IiwiZGFya2dyZWVuIiwiZGFya2dyZXkiLCJkYXJra2hha2kiLCJkYXJrbWFnZW50YSIsImRhcmtvbGl2ZWdyZWVuIiwiZGFya29yYW5nZSIsImRhcmtvcmNoaWQiLCJkYXJrcmVkIiwiZGFya3NhbG1vbiIsImRhcmtzZWFncmVlbiIsImRhcmtzbGF0ZWJsdWUiLCJkYXJrc2xhdGVncmF5IiwiZGFya3NsYXRlZ3JleSIsImRhcmt0dXJxdW9pc2UiLCJkYXJrdmlvbGV0IiwiZGVlcHBpbmsiLCJkZWVwc2t5Ymx1ZSIsImRpbWdyYXkiLCJkaW1ncmV5IiwiZG9kZ2VyYmx1ZSIsImZpcmVicmljayIsImZsb3JhbHdoaXRlIiwiZm9yZXN0Z3JlZW4iLCJmdWNoc2lhIiwiZ2FpbnNib3JvIiwiZ2hvc3R3aGl0ZSIsImdvbGQiLCJnb2xkZW5yb2QiLCJncmF5IiwiZ3JlZW4iLCJncmVlbnllbGxvdyIsImdyZXkiLCJob25leWRldyIsImhvdHBpbmsiLCJpbmRpYW5yZWQiLCJpbmRpZ28iLCJpdm9yeSIsImtoYWtpIiwibGF2ZW5kZXIiLCJsYXZlbmRlcmJsdXNoIiwibGF3bmdyZWVuIiwibGVtb25jaGlmZm9uIiwibGlnaHRibHVlIiwibGlnaHRjb3JhbCIsImxpZ2h0Y3lhbiIsImxpZ2h0Z29sZGVucm9keWVsbG93IiwibGlnaHRncmF5IiwibGlnaHRncmVlbiIsImxpZ2h0Z3JleSIsImxpZ2h0cGluayIsImxpZ2h0c2FsbW9uIiwibGlnaHRzZWFncmVlbiIsImxpZ2h0c2t5Ymx1ZSIsImxpZ2h0c2xhdGVncmF5IiwibGlnaHRzbGF0ZWdyZXkiLCJsaWdodHN0ZWVsYmx1ZSIsImxpZ2h0eWVsbG93IiwibGltZSIsImxpbWVncmVlbiIsImxpbmVuIiwibWFnZW50YSIsIm1hcm9vbiIsIm1lZGl1bWFxdWFtYXJpbmUiLCJtZWRpdW1ibHVlIiwibWVkaXVtb3JjaGlkIiwibWVkaXVtcHVycGxlIiwibWVkaXVtc2VhZ3JlZW4iLCJtZWRpdW1zbGF0ZWJsdWUiLCJtZWRpdW1zcHJpbmdncmVlbiIsIm1lZGl1bXR1cnF1b2lzZSIsIm1lZGl1bXZpb2xldHJlZCIsIm1pZG5pZ2h0Ymx1ZSIsIm1pbnRjcmVhbSIsIm1pc3R5cm9zZSIsIm1vY2Nhc2luIiwibmF2YWpvd2hpdGUiLCJuYXZ5Iiwib2xkbGFjZSIsIm9saXZlIiwib2xpdmVkcmFiIiwib3JhbmdlIiwib3JhbmdlcmVkIiwib3JjaGlkIiwicGFsZWdvbGRlbnJvZCIsInBhbGVncmVlbiIsInBhbGV0dXJxdW9pc2UiLCJwYWxldmlvbGV0cmVkIiwicGFwYXlhd2hpcCIsInBlYWNocHVmZiIsInBlcnUiLCJwaW5rIiwicGx1bSIsInBvd2RlcmJsdWUiLCJwdXJwbGUiLCJyZWJlY2NhcHVycGxlIiwicmVkIiwicm9zeWJyb3duIiwicm95YWxibHVlIiwic2FkZGxlYnJvd24iLCJzYWxtb24iLCJzYW5keWJyb3duIiwic2VhZ3JlZW4iLCJzZWFzaGVsbCIsInNpZW5uYSIsInNpbHZlciIsInNreWJsdWUiLCJzbGF0ZWJsdWUiLCJzbGF0ZWdyYXkiLCJzbGF0ZWdyZXkiLCJzbm93Iiwic3ByaW5nZ3JlZW4iLCJzdGVlbGJsdWUiLCJ0YW4iLCJ0ZWFsIiwidGhpc3RsZSIsInRvbWF0byIsInR1cnF1b2lzZSIsInZpb2xldCIsIndoZWF0Iiwid2hpdGUiLCJ3aGl0ZXNtb2tlIiwieWVsbG93IiwieWVsbG93Z3JlZW4iLCJpbnB1dENvbG9yIiwiYWxwaGEiLCJyYXdDb2xvciIsInJlcGxhY2UiLCJ0b0xvd2VyQ2FzZSIsIm5hbWVkQ29sb3IiLCJjbGVhbkNvbG9yIiwic3RhcnRzV2l0aCIsImhleCIsInN1YnN0cmluZyIsImxlbmd0aCIsInBhcnNlSW50IiwicmdiYVZhbHVlcyIsIm1hdGNoIiwic3BsaXQiLCJwYXJzZUZsb2F0IiwicmdiVmFsdWVzIiwiaHNsYVZhbHVlcyIsImgiLCJzIiwibCIsIkMiLCJNYXRoIiwiYWJzIiwiWCIsIm0iLCJSIiwiRyIsIkIiLCJyb3VuZCIsImhzbFZhbHVlcyIsIk51bWJlciIsImlzTmFOIiwiRXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBLHFCQUFxQjtBQUNyQixxQkFBcUI7QUFDckIsb0RBQW9EOzs7OzsrQkF3SnBDQTs7O2VBQUFBOzs7QUF2SmhCLE1BQU1DLGdCQUFnQjtJQUNwQkMsV0FBVztJQUNYQyxjQUFjO0lBQ2RDLE1BQU07SUFDTkMsWUFBWTtJQUNaQyxPQUFPO0lBQ1BDLE9BQU87SUFDUEMsUUFBUTtJQUNSQyxPQUFPO0lBQ1BDLGdCQUFnQjtJQUNoQkMsTUFBTTtJQUNOQyxZQUFZO0lBQ1pDLE9BQU87SUFDUEMsV0FBVztJQUNYQyxXQUFXO0lBQ1hDLFlBQVk7SUFDWkMsV0FBVztJQUNYQyxPQUFPO0lBQ1BDLGdCQUFnQjtJQUNoQkMsVUFBVTtJQUNWQyxTQUFTO0lBQ1RDLE1BQU07SUFDTkMsVUFBVTtJQUNWQyxVQUFVO0lBQ1ZDLGVBQWU7SUFDZkMsVUFBVTtJQUNWQyxXQUFXO0lBQ1hDLFVBQVU7SUFDVkMsV0FBVztJQUNYQyxhQUFhO0lBQ2JDLGdCQUFnQjtJQUNoQkMsWUFBWTtJQUNaQyxZQUFZO0lBQ1pDLFNBQVM7SUFDVEMsWUFBWTtJQUNaQyxjQUFjO0lBQ2RDLGVBQWU7SUFDZkMsZUFBZTtJQUNmQyxlQUFlO0lBQ2ZDLGVBQWU7SUFDZkMsWUFBWTtJQUNaQyxVQUFVO0lBQ1ZDLGFBQWE7SUFDYkMsU0FBUztJQUNUQyxTQUFTO0lBQ1RDLFlBQVk7SUFDWkMsV0FBVztJQUNYQyxhQUFhO0lBQ2JDLGFBQWE7SUFDYkMsU0FBUztJQUNUQyxXQUFXO0lBQ1hDLFlBQVk7SUFDWkMsTUFBTTtJQUNOQyxXQUFXO0lBQ1hDLE1BQU07SUFDTkMsT0FBTztJQUNQQyxhQUFhO0lBQ2JDLE1BQU07SUFDTkMsVUFBVTtJQUNWQyxTQUFTO0lBQ1RDLFdBQVc7SUFDWEMsUUFBUTtJ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 }), 9468: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { // IX2Actions, IX2BrowserSupport: function() { return _IX2BrowserSupport; }, IX2EasingUtils: function() { return _IX2EasingUtils; }, IX2Easings: function() { return _IX2Easings; }, IX2ElementsReducer: function() { return _IX2ElementsReducer; }, IX2VanillaPlugins: function() { return _IX2VanillaPlugins; }, IX2VanillaUtils: function() { return _IX2VanillaUtils; } }); const _IX2BrowserSupport = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(2662)); const _IX2Easings = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(8686)); const _IX2EasingUtils = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(3767)); const _IX2ElementsReducer = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(5861)); const _IX2VanillaPlugins = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(1799)); const _IX2VanillaUtils = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(4124)); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBJWDJCcm93c2VyU3VwcG9ydCBmcm9tICcuL2xvZ2ljL0lYMkJyb3dzZXJTdXBwb3J0JztcbmltcG9ydCAqIGFzIElYMkVhc2luZ3MgZnJvbSAnLi9sb2dpYy9JWDJFYXNpbmdzJztcbmltcG9ydCAqIGFzIElYMkVhc2luZ1V0aWxzIGZyb20gJy4vbG9naWMvSVgyRWFzaW5nVXRpbHMnO1xuaW1wb3J0ICogYXMgSVgyRWxlbWVudHNSZWR1Y2VyIGZyb20gJy4vcmVkdWNlcnMvSVgyRWxlbWVudHNSZWR1Y2VyJztcbmltcG9ydCAqIGFzIElYMlZhbmlsbGFQbHVnaW5zIGZyb20gJy4vbG9naWMvSVgyVmFuaWxsYVBsdWdpbnMnO1xuaW1wb3J0ICogYXMgSVgyVmFuaWxsYVV0aWxzIGZyb20gJy4vbG9naWMvSVgyVmFuaWxsYVV0aWxzJztcbmV4cG9ydCB7XG4gIC8vIElYMkFjdGlvbnMsXG4gIElYMkJyb3dzZXJTdXBwb3J0LFxuICBJWDJFYXNpbmdzLFxuICBJWDJFYXNpbmdVdGlscyxcbiAgSVgyRWxlbWVudHNSZWR1Y2VyLFxuICBJWDJWYW5pbGxhUGx1Z2lucyxcbiAgSVgyVmFuaWxsYVV0aWxzLFxufTtcbiJdLCJuYW1lcyI6WyJJWDJCcm93c2VyU3VwcG9ydCIsIklYMkVhc2luZ1V0aWxzIiwiSVgyRWFzaW5ncyIsIklYMkVsZW1lbnRzUmVkdWNlciIsIklYMlZhbmlsbGFQbHVnaW5zIiwiSVgyVmFuaWxsYVV0aWxzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQU9FLGNBQWM7SUFDZEEsaUJBQWlCO2VBQWpCQTs7SUFFQUMsY0FBYztlQUFkQTs7SUFEQUMsVUFBVTtlQUFWQTs7SUFFQUMsa0JBQWtCO2VBQWxCQTs7SUFDQUMsaUJBQWlCO2VBQWpCQTs7SUFDQUMsZUFBZTtlQUFmQTs7OzJFQWJpQztvRUFDUDt3RUFDSTs0RUFDSTsyRUFDRDt5RUFDRiJ9 }), 2662: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { ELEMENT_MATCHES: function() { return ELEMENT_MATCHES; }, FLEX_PREFIXED: function() { return FLEX_PREFIXED; }, IS_BROWSER_ENV: function() { return IS_BROWSER_ENV; }, TRANSFORM_PREFIXED: function() { return TRANSFORM_PREFIXED; }, TRANSFORM_STYLE_PREFIXED: function() { return TRANSFORM_STYLE_PREFIXED; }, withBrowser: function() { return withBrowser; } }); const _find = /*#__PURE__*/ _interop_require_default(__webpack_require__(9777)); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const IS_BROWSER_ENV = typeof window !== 'undefined'; const withBrowser = (fn, fallback)=>{ if (IS_BROWSER_ENV) { return fn(); } return fallback; }; const ELEMENT_MATCHES = withBrowser(()=>{ return (0, _find.default)([ 'matches', 'matchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector', 'webkitMatchesSelector' ], (key)=>key in Element.prototype); }); const FLEX_PREFIXED = withBrowser(()=>{ const el = document.createElement('i'); const values = [ 'flex', '-webkit-flex', '-ms-flexbox', '-moz-box', '-webkit-box' ]; const none = ''; try { const { length } = values; for(let i = 0; i < length; i++){ const value = values[i]; // @ts-expect-error - TS2322 - Type 'string | undefined' is not assignable to type 'string'. el.style.display = value; if (el.style.display === value) { return value; } } return none; } catch (err) { return none; } }, 'flex'); const TRANSFORM_PREFIXED = withBrowser(()=>{ const el = document.createElement('i'); if (el.style.transform == null) { const prefixes = [ 'Webkit', 'Moz', 'ms' ]; const suffix = 'Transform'; const { length } = prefixes; for(let i = 0; i < length; i++){ const prop = prefixes[i] + suffix; // @ts-expect-error - TS7015 - Element implicitly has an 'any' type because index expression is not of type 'number'. if (el.style[prop] !== undefined) { return prop; } } } return 'transform'; }, 'transform'); const TRANSFORM_PREFIX = TRANSFORM_PREFIXED.split('transform')[0]; const TRANSFORM_STYLE_PREFIXED = TRANSFORM_PREFIX ? TRANSFORM_PREFIX + 'TransformStyle' : 'transformStyle'; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC9sb2dpYy9JWDJCcm93c2VyU3VwcG9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZmluZCBmcm9tICdsb2Rhc2gvZmluZCc7XG5cbmV4cG9ydCBjb25zdCBJU19CUk9XU0VSX0VOViA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgY29uc3Qgd2l0aEJyb3dzZXIgPSAoZm46IGFueSwgZmFsbGJhY2s6IGFueSkgPT4ge1xuICBpZiAoSVNfQlJPV1NFUl9FTlYpIHtcbiAgICByZXR1cm4gZm4oKTtcbiAgfVxuICByZXR1cm4gZmFsbGJhY2s7XG59O1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyNTU0IC0gRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBnb3QgMS5cbmV4cG9ydCBjb25zdCBFTEVNRU5UX01BVENIRVMgPSB3aXRoQnJvd3NlcigoKSA9PiB7XG4gIHJldHVybiBmaW5kKFxuICAgIFtcbiAgICAgICdtYXRjaGVzJyxcbiAgICAgICdtYXRjaGVzU2VsZWN0b3InLFxuICAgICAgJ21vek1hdGNoZXNTZWxlY3RvcicsXG4gICAgICAnbXNNYXRjaGVzU2VsZWN0b3InLFxuICAgICAgJ29NYXRjaGVzU2VsZWN0b3InLFxuICAgICAgJ3dlYmtpdE1hdGNoZXNTZWxlY3RvcicsXG4gICAgXSxcbiAgICAoa2V5KSA9PiBrZXkgaW4gRWxlbWVudC5wcm90b3R5cGVcbiAgKTtcbn0pO1xuXG5leHBvcnQgY29uc3QgRkxFWF9QUkVGSVhFRCA9IHdpdGhCcm93c2VyKCgpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJyk7XG4gIGNvbnN0IHZhbHVlcyA9IFtcbiAgICAnZmxleCcsXG4gICAgJy13ZWJraXQtZmxleCcsXG4gICAgJy1tcy1mbGV4Ym94JyxcbiAgICAnLW1vei1ib3gnLFxuICAgICctd2Via2l0LWJveCcsXG4gIF07XG4gIGNvbnN0IG5vbmUgPSAnJztcbiAgdHJ5IHtcbiAgICBjb25zdCB7bGVuZ3RofSA9IHZhbHVlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMjIgLSBUeXBlICdzdHJpbmcgfCB1bmRlZmluZWQnIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHR5cGUgJ3N0cmluZycuXG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWU7XG4gICAgICBpZiAoZWwuc3R5bGUuZGlzcGxheSA9PT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9uZTtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICByZXR1cm4gbm9uZTtcbiAgfVxufSwgJ2ZsZXgnKTtcblxuZXhwb3J0IGNvbnN0IFRSQU5TRk9STV9QUkVGSVhFRDogc3RyaW5nID0gd2l0aEJyb3dzZXIoKCkgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKTtcbiAgaWYgKGVsLnN0eWxlLnRyYW5zZm9ybSA9PSBudWxsKSB7XG4gICAgY29uc3QgcHJlZml4ZXMgPSBbJ1dlYmtpdCcsICdNb3onLCAnbXMnXTtcbiAgICBjb25zdCBzdWZmaXggPSAnVHJhbnNmb3JtJztcbiAgICBjb25zdCB7bGVuZ3RofSA9IHByZWZpeGVzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHByb3AgPSBwcmVmaXhlc1tpXSArIHN1ZmZpeDtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMTUgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBpbmRleCBleHByZXNzaW9uIGlzIG5vdCBvZiB0eXBlICdudW1iZXInLlxuICAgICAgaWYgKGVsLnN0eWxlW3Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHByb3A7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiAndHJhbnNmb3JtJztcbn0sICd0cmFuc2Zvcm0nKTtcblxuY29uc3QgVFJBTlNGT1JNX1BSRUZJWCA9IFRSQU5TRk9STV9QUkVGSVhFRC5zcGxpdCgndHJhbnNmb3JtJylbMF07XG5cbmV4cG9ydCBjb25zdCBUUkFOU0ZPUk1fU1RZTEVfUFJFRklYRUQgPSBUUkFOU0ZPUk1fUFJFRklYXG4gID8gVFJBTlNGT1JNX1BSRUZJWCArICdUcmFuc2Zvcm1TdHlsZSdcbiAgOiAndHJhbnNmb3JtU3R5bGUnO1xuIl0sIm5hbWVzIjpbIkVMRU1FTlRfTUFUQ0hFUyIsIkZMRVhfUFJFRklYRUQiLCJJU19CUk9XU0VSX0VOViIsIlRSQU5TRk9STV9QUkVGSVhFRCIsIlRSQU5TRk9STV9TVFlMRV9QUkVGSVhFRCIsIndpdGhCcm93c2VyIiwid2luZG93IiwiZm4iLCJmYWxsYmFjayIsImZpbmQiLCJrZXkiLCJFbGVtZW50IiwicHJvdG90eXBlIiwiZWwiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ2YWx1ZXMiLCJub25lIiwibGVuZ3RoIiwiaSIsInZhbHVlIiwic3R5bGUiLCJkaXNwbGF5IiwiZXJyIiwidHJhbnNmb3JtIiwicHJlZml4ZXMiLCJzdWZmaXgiLCJwcm9wIiwidW5kZWZpbmVkIiwiVFJBTlNGT1JNX1BSRUZJWCIsInNwbGl0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQVlhQSxlQUFlO2VBQWZBOztJQWNBQyxhQUFhO2VBQWJBOztJQXhCQUMsY0FBYztlQUFkQTs7SUFrREFDLGtCQUFrQjtlQUFsQkE7O0lBbUJBQyx3QkFBd0I7ZUFBeEJBOztJQW5FQUMsV0FBVztlQUFYQTs7OzZEQUpJOzs7Ozs7QUFFVixNQUFNSCxpQkFBaUIsT0FBT0ksV0FBVztBQUV6QyxNQUFNRCxjQUFjLENBQUNFLElBQVNDO0lBQ25DLElBQUlOLGdCQUFnQjtRQUNsQixPQUFPSztJQUNUO0lBQ0EsT0FBT0M7QUFDVDtBQUdPLE1BQU1SLGtCQUFrQkssWUFBWTtJQUN6QyxPQUFPSSxJQUFBQSxhQUFJLEVBQ1Q7UUFDRTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7S0FDRCxFQUNELENBQUNDLE1BQVFBLE9BQU9DLFFBQVFDLFNBQVM7QUFFckM7QUFFTyxNQUFNWCxnQkFBZ0JJLFlBQVk7SUFDdkMsTUFBTVEsS0FBS0MsU0FBU0MsYUFBYSxDQUFDO0lBQ2xDLE1BQU1DLFNBQVM7UUFDYjtRQUNBO1FBQ0E7UUFDQTtRQUNBO0tBQ0Q7SUFDRCxNQUFNQyxPQUFPO0lBQ2IsSUFBSTtRQUNGLE1BQU0sRUFBQ0MsTUFBTSxFQUFDLEdBQUdGO1FBQ2pCLElBQUssSUFBSUcsSUFBSSxHQUFHQSxJQUFJRCxRQUFRQyxJQUFLO1lBQy9CLE1BQU1DLFFBQVFKLE1BQU0sQ0FBQ0csRUFBRTtZQUN2Qiw0RkFBNEY7WUFDNUZOLEdBQUdRLEtBQUssQ0FBQ0MsT0FBTyxHQUFHRjtZQUNuQixJQUFJUCxHQUFHUSxLQUFLLENBQUNDLE9BQU8sS0FBS0YsT0FBTztnQkFDOUIsT0FBT0E7WUFDVDtRQUNGO1FBQ0EsT0FBT0g7SUFDVCxFQUFFLE9BQU9NLEtBQVU7UUFDakIsT0FBT047SUFDVDtBQUNGLEdBQUc7QUFFSSxNQUFNZCxxQkFBNkJFLFlBQVk7SUFDcEQsTUFBTVEsS0FBS0MsU0FBU0MsYUFBYSxDQUFDO0lBQ2xDLElBQUlGLEdBQUdRLEtBQUssQ0FBQ0csU0FBUyxJQUFJLE1BQU07UUFDOUIsTUFBTUMsV0FBVztZQUFDO1lBQVU7WUFBTztTQUFLO1FBQ3hDLE1BQU1DLFNBQVM7UUFDZixNQUFNLEVBQUNSLE1BQU0sRUFBQyxHQUFHTztRQUNqQixJQUFLLElBQUlOLElBQUksR0FBR0EsSUFBSUQsUUFBUUMsSUFBSztZQUMvQixNQUFNUSxPQUFPRixRQUFRLENBQUNOLEVBQUUsR0FBR087WUFDM0IscUhBQXFIO1lBQ3JILElBQUliLEdBQUdRLEtBQUssQ0FBQ00sS0FBSyxLQUFLQyxXQUFXO2dCQUNoQyxPQUFPRDtZQUNUO1FBQ0Y7SUFDRjtJQUNBLE9BQU87QUFDVCxHQUFHO0FBRUgsTUFBTUUsbUJBQW1CMUIsbUJBQW1CMkIsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFO0FBRTFELE1BQU0xQiwyQkFBMkJ5QixtQkFDcENBLG1CQUFtQixtQkFDbkIifQ== }), 3767: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { applyEasing: function() { return applyEasing; }, createBezierEasing: function() { return createBezierEasing; }, optimizeFloat: function() { return optimizeFloat; } }); const _IX2Easings = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(8686)); const _beziereasing = /*#__PURE__*/ _interop_require_default(__webpack_require__(1361)); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function optimizeFloat(value, digits = 5, base = 10) { const pow = Math.pow(base, digits); const float = Number(Math.round(value * pow) / pow); return Math.abs(float) > 0.0001 ? float : 0; } function createBezierEasing(easing) { return (0, _beziereasing.default)(...easing); } function applyEasing(easing, position, customEasingFn) { if (position === 0) { return 0; } if (position === 1) { return 1; } if (customEasingFn) { return optimizeFloat(position > 0 ? customEasingFn(position) : position); } return optimizeFloat(position > 0 && easing && _IX2Easings[easing] ? _IX2Easings[easing](position) : position); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC9sb2dpYy9JWDJFYXNpbmdVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIElYMkVhc2luZ0VudW1UeXBlLFxuICBJWDJFYXNpbmdDdXN0b21UeXBlLFxufSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvdHlwZXMtY29yZSc7XG5pbXBvcnQgKiBhcyBlYXNpbmdzIGZyb20gJy4vSVgyRWFzaW5ncyc7XG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDE2IC0gQ291bGQgbm90IGZpbmQgYSBkZWNsYXJhdGlvbiBmaWxlIGZvciBtb2R1bGUgJ2Jlemllci1lYXNpbmcnLiAnL2hvbWUvcnVubmVyL3dvcmsvZmxvdy10by10eXBlc2NyaXB0LWNvZGVtb2QvZmxvdy10by10eXBlc2NyaXB0LWNvZGVtb2Qvd2ViZmxvdy9ub2RlX21vZHVsZXMvYmV6aWVyLWVhc2luZy9zcmMvaW5kZXguanMnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5pbXBvcnQgQmV6aWVyRWFzaW5nIGZyb20gJ2Jlemllci1lYXNpbmcnO1xuXG5leHBvcnQgZnVuY3Rpb24gb3B0aW1pemVGbG9hdChcbiAgdmFsdWU6IG51bWJlcixcbiAgZGlnaXRzOiBudW1iZXIgPSA1LFxuICBiYXNlOiBudW1iZXIgPSAxMFxuKTogbnVtYmVyIHtcbiAgY29uc3QgcG93ID0gTWF0aC5wb3coYmFzZSwgZGlnaXRzKTtcbiAgY29uc3QgZmxvYXQgPSBOdW1iZXIoTWF0aC5yb3VuZCh2YWx1ZSAqIHBvdykgLyBwb3cpO1xuICByZXR1cm4gTWF0aC5hYnMoZmxvYXQpID4gMC4wMDAxID8gZmxvYXQgOiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmV6aWVyRWFzaW5nKFxuICBlYXNpbmc6IElYMkVhc2luZ0N1c3RvbVR5cGVcbik6IChhcmcxOiBudW1iZXIpID0+IG51bWJlciB7XG4gIHJldHVybiBCZXppZXJFYXNpbmcoLi4uZWFzaW5nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RWFzaW5nKFxuICBlYXNpbmc6IElYMkVhc2luZ0VudW1UeXBlLFxuICBwb3NpdGlvbjogbnVtYmVyLFxuICBjdXN0b21FYXNpbmdGbj86IChhcmcxOiBudW1iZXIpID0+IG51bWJlclxuKSB7XG4gIGlmIChwb3NpdGlvbiA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChwb3NpdGlvbiA9PT0gMSkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgaWYgKGN1c3RvbUVhc2luZ0ZuKSB7XG4gICAgcmV0dXJuIG9wdGltaXplRmxvYXQocG9zaXRpb24gPiAwID8gY3VzdG9tRWFzaW5nRm4ocG9zaXRpb24pIDogcG9zaXRpb24pO1xuICB9XG5cbiAgcmV0dXJuIG9wdGltaXplRmxvYXQoXG4gICAgcG9zaXRpb24gPiAwICYmIGVhc2luZyAmJiBlYXNpbmdzW2Vhc2luZ11cbiAgICAgID8gZWFzaW5nc1tlYXNpbmddKHBvc2l0aW9uKVxuICAgICAgOiBwb3NpdGlvblxuICApO1xufVxuIl0sIm5hbWVzIjpbImFwcGx5RWFzaW5nIiwiY3JlYXRlQmV6aWVyRWFzaW5nIiwib3B0aW1pemVGbG9hdCIsInZhbHVlIiwiZGlnaXRzIiwiYmFzZSIsInBvdyIsIk1hdGgiLCJmbG9hdCIsIk51bWJlciIsInJvdW5kIiwiYWJzIiwiZWFzaW5nIiwiQmV6aWVyRWFzaW5nIiwicG9zaXRpb24iLCJjdXN0b21FYXNpbmdGbiIsImVhc2luZ3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBd0JnQkEsV0FBVztlQUFYQTs7SUFOQUMsa0JBQWtCO2VBQWxCQTs7SUFWQUMsYUFBYTtlQUFiQTs7O29FQUpTO3FFQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsQixTQUFTQSxjQUNkQyxLQUFhLEVBQ2JDLFNBQWlCLENBQUMsRUFDbEJDLE9BQWUsRUFBRTtJQUVqQixNQUFNQyxNQUFNQyxLQUFLRCxHQUFHLENBQUNELE1BQU1EO0lBQzNCLE1BQU1JLFFBQVFDLE9BQU9GLEtBQUtHLEtBQUssQ0FBQ1AsUUFBUUcsT0FBT0E7SUFDL0MsT0FBT0MsS0FBS0ksR0FBRyxDQUFDSCxTQUFTLFNBQVNBLFFBQVE7QUFDNUM7QUFFTyxTQUFTUCxtQkFDZFcsTUFBMkI7SUFFM0IsT0FBT0MsSUFBQUEscUJBQVksS0FBSUQ7QUFDekI7QUFFTyxTQUFTWixZQUNkWSxNQUF5QixFQUN6QkUsUUFBZ0IsRUFDaEJDLGNBQXlDO0lBRXpDLElBQUlELGFBQWEsR0FBRztRQUNsQixPQUFPO0lBQ1Q7SUFDQSxJQUFJQSxhQUFhLEdBQUc7UUFDbEIsT0FBTztJQUNUO0lBRUEsSUFBSUMsZ0JBQWdCO1FBQ2xCLE9BQU9iLGNBQWNZLFdBQVcsSUFBSUMsZUFBZUQsWUFBWUE7SUFDakU7SUFFQSxPQUFPWixjQUNMWSxXQUFXLEtBQUtGLFVBQVVJLFdBQU8sQ0FBQ0osT0FBTyxHQUNyQ0ksV0FBTyxDQUFDSixPQUFPLENBQUNFLFlBQ2hCQTtBQUVSIn0= }), 8686: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; // @ts-expect-error - TS7016 - Could not find a declaration file for module 'bezier-easing'. '/home/runner/work/flow-to-typescript-codemod/flow-to-typescript-codemod/webflow/node_modules/bezier-easing/src/index.js' implicitly has an 'any' type. Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { bounce: function() { return bounce; }, bouncePast: function() { return bouncePast; }, ease: function() { return ease; }, easeIn: function() { return easeIn; }, easeInOut: function() { return easeInOut; }, easeOut: function() { return easeOut; }, inBack: function() { return inBack; }, inCirc: function() { return inCirc; }, inCubic: function() { return inCubic; }, inElastic: function() { return inElastic; }, inExpo: function() { return inExpo; }, inOutBack: function() { return inOutBack; }, inOutCirc: function() { return inOutCirc; }, inOutCubic: function() { return inOutCubic; }, inOutElastic: function() { return inOutElastic; }, inOutExpo: function() { return inOutExpo; }, inOutQuad: function() { return inOutQuad; }, inOutQuart: function() { return inOutQuart; }, inOutQuint: function() { return inOutQuint; }, inOutSine: function() { return inOutSine; }, inQuad: function() { return inQuad; }, inQuart: function() { return inQuart; }, inQuint: function() { return inQuint; }, inSine: function() { return inSine; }, outBack: function() { return outBack; }, outBounce: function() { return outBounce; }, outCirc: function() { return outCirc; }, outCubic: function() { return outCubic; }, outElastic: function() { return outElastic; }, outExpo: function() { return outExpo; }, outQuad: function() { return outQuad; }, outQuart: function() { return outQuart; }, outQuint: function() { return outQuint; }, outSine: function() { return outSine; }, swingFrom: function() { return swingFrom; }, swingFromTo: function() { return swingFromTo; }, swingTo: function() { return swingTo; } }); const _beziereasing = /*#__PURE__*/ _interop_require_default(__webpack_require__(1361)); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // Easing functions adapted from Thomas Fuchs & Jeremy Kahn // Easing Equations (c) 2003 Robert Penner, BSD license // https://raw.github.com/danro/easing-js/master/LICENSE const magicSwing = 1.70158; const ease = (0, _beziereasing.default)(0.25, 0.1, 0.25, 1.0); const easeIn = (0, _beziereasing.default)(0.42, 0.0, 1.0, 1.0); const easeOut = (0, _beziereasing.default)(0.0, 0.0, 0.58, 1.0); const easeInOut = (0, _beziereasing.default)(0.42, 0.0, 0.58, 1.0); function inQuad(pos) { return Math.pow(pos, 2); } function outQuad(pos) { return -(Math.pow(pos - 1, 2) - 1); } function inOutQuad(pos) { if ((pos /= 0.5) < 1) { return 0.5 * Math.pow(pos, 2); } return -0.5 * ((pos -= 2) * pos - 2); } function inCubic(pos) { return Math.pow(pos, 3); } function outCubic(pos) { return Math.pow(pos - 1, 3) + 1; } function inOutCubic(pos) { if ((pos /= 0.5) < 1) { return 0.5 * Math.pow(pos, 3); } return 0.5 * (Math.pow(pos - 2, 3) + 2); } function inQuart(pos) { return Math.pow(pos, 4); } function outQuart(pos) { return -(Math.pow(pos - 1, 4) - 1); } function inOutQuart(pos) { if ((pos /= 0.5) < 1) { return 0.5 * Math.pow(pos, 4); } return -0.5 * ((pos -= 2) * Math.pow(pos, 3) - 2); } function inQuint(pos) { return Math.pow(pos, 5); } function outQuint(pos) { return Math.pow(pos - 1, 5) + 1; } function inOutQuint(pos) { if ((pos /= 0.5) < 1) { return 0.5 * Math.pow(pos, 5); } return 0.5 * (Math.pow(pos - 2, 5) + 2); } function inSine(pos) { return -Math.cos(pos * (Math.PI / 2)) + 1; } function outSine(pos) { return Math.sin(pos * (Math.PI / 2)); } function inOutSine(pos) { return -0.5 * (Math.cos(Math.PI * pos) - 1); } function inExpo(pos) { return pos === 0 ? 0 : Math.pow(2, 10 * (pos - 1)); } function outExpo(pos) { return pos === 1 ? 1 : -Math.pow(2, -10 * pos) + 1; } function inOutExpo(pos) { if (pos === 0) { return 0; } if (pos === 1) { return 1; } if ((pos /= 0.5) < 1) { return 0.5 * Math.pow(2, 10 * (pos - 1)); } return 0.5 * (-Math.pow(2, -10 * --pos) + 2); } function inCirc(pos) { return -(Math.sqrt(1 - pos * pos) - 1); } function outCirc(pos) { return Math.sqrt(1 - Math.pow(pos - 1, 2)); } function inOutCirc(pos) { if ((pos /= 0.5) < 1) { return -0.5 * (Math.sqrt(1 - pos * pos) - 1); } return 0.5 * (Math.sqrt(1 - (pos -= 2) * pos) + 1); } function outBounce(pos) { if (pos < 1 / 2.75) { return 7.5625 * pos * pos; } else if (pos < 2 / 2.75) { return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75; } else if (pos < 2.5 / 2.75) { return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375; } else { return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375; } } function inBack(pos) { const s = magicSwing; return pos * pos * ((s + 1) * pos - s); } function outBack(pos) { const s = magicSwing; return (pos -= 1) * pos * ((s + 1) * pos + s) + 1; } function inOutBack(pos) { let s = magicSwing; if ((pos /= 0.5) < 1) { return 0.5 * (pos * pos * (((s *= 1.525) + 1) * pos - s)); } return 0.5 * ((pos -= 2) * pos * (((s *= 1.525) + 1) * pos + s) + 2); } function inElastic(pos) { let s = magicSwing; let p = 0; let a = 1; if (pos === 0) { return 0; } if (pos === 1) { return 1; } if (!p) { p = 0.3; } if (a < 1) { a = 1; s = p / 4; } else { s = p / (2 * Math.PI) * Math.asin(1 / a); } return -(a * Math.pow(2, 10 * (pos -= 1)) * Math.sin((pos - s) * (2 * Math.PI) / p)); } function outElastic(pos) { let s = magicSwing; let p = 0; let a = 1; if (pos === 0) { return 0; } if (pos === 1) { return 1; } if (!p) { p = 0.3; } if (a < 1) { a = 1; s = p / 4; } else { s = p / (2 * Math.PI) * Math.asin(1 / a); } return a * Math.pow(2, -10 * pos) * Math.sin((pos - s) * (2 * Math.PI) / p) + 1; } function inOutElastic(pos) { let s = magicSwing; let p = 0; let a = 1; if (pos === 0) { return 0; } if ((pos /= 1 / 2) === 2) { return 1; } if (!p) { p = 0.3 * 1.5; } if (a < 1) { a = 1; s = p / 4; } else { s = p / (2 * Math.PI) * Math.asin(1 / a); } if (pos < 1) { return -0.5 * (a * Math.pow(2, 10 * (pos -= 1)) * Math.sin((pos - s) * (2 * Math.PI) / p)); } return a * Math.pow(2, -10 * (pos -= 1)) * Math.sin((pos - s) * (2 * Math.PI) / p) * 0.5 + 1; } function swingFromTo(pos) { let s = magicSwing; return (pos /= 0.5) < 1 ? 0.5 * (pos * pos * (((s *= 1.525) + 1) * pos - s)) : 0.5 * ((pos -= 2) * pos * (((s *= 1.525) + 1) * pos + s) + 2); } function swingFrom(pos) { const s = magicSwing; return pos * pos * ((s + 1) * pos - s); } function swingTo(pos) { const s = magicSwing; return (pos -= 1) * pos * ((s + 1) * pos + s) + 1; } function bounce(pos) { if (pos < 1 / 2.75) { return 7.5625 * pos * pos; } else if (pos < 2 / 2.75) { return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75; } else if (pos < 2.5 / 2.75) { return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375; } else { return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375; } } function bouncePast(pos) { if (pos < 1 / 2.75) { return 7.5625 * pos * pos; } else if (pos < 2 / 2.75) { return 2 - (7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75); } else if (pos < 2.5 / 2.75) { return 2 - (7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375); } else { return 2 - (7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC9sb2dpYy9JWDJFYXNpbmdzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMTYgLSBDb3VsZCBub3QgZmluZCBhIGRlY2xhcmF0aW9uIGZpbGUgZm9yIG1vZHVsZSAnYmV6aWVyLWVhc2luZycuICcvaG9tZS9ydW5uZXIvd29yay9mbG93LXRvLXR5cGVzY3JpcHQtY29kZW1vZC9mbG93LXRvLXR5cGVzY3JpcHQtY29kZW1vZC93ZWJmbG93L25vZGVfbW9kdWxlcy9iZXppZXItZWFzaW5nL3NyYy9pbmRleC5qcycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmltcG9ydCBCZXppZXJFYXNpbmcgZnJvbSAnYmV6aWVyLWVhc2luZyc7XG5cbi8vIEVhc2luZyBmdW5jdGlvbnMgYWRhcHRlZCBmcm9tIFRob21hcyBGdWNocyAmIEplcmVteSBLYWhuXG4vLyBFYXNpbmcgRXF1YXRpb25zIChjKSAyMDAzIFJvYmVydCBQZW5uZXIsIEJTRCBsaWNlbnNlXG4vLyBodHRwczovL3Jhdy5naXRodWIuY29tL2RhbnJvL2Vhc2luZy1qcy9tYXN0ZXIvTElDRU5TRVxuXG5jb25zdCBtYWdpY1N3aW5nID0gMS43MDE1ODtcblxudHlwZSBFYXNpbmdGdW5jdGlvbiA9IChhcmcxOiBudW1iZXIpID0+IG51bWJlcjtcblxuZXhwb3J0IGNvbnN0IGVhc2U6IEVhc2luZ0Z1bmN0aW9uID0gQmV6aWVyRWFzaW5nKDAuMjUsIDAuMSwgMC4yNSwgMS4wKTtcbmV4cG9ydCBjb25zdCBlYXNlSW46IEVhc2luZ0Z1bmN0aW9uID0gQmV6aWVyRWFzaW5nKDAuNDIsIDAuMCwgMS4wLCAxLjApO1xuZXhwb3J0IGNvbnN0IGVhc2VPdXQ6IEVhc2luZ0Z1bmN0aW9uID0gQmV6aWVyRWFzaW5nKDAuMCwgMC4wLCAwLjU4LCAxLjApO1xuZXhwb3J0IGNvbnN0IGVhc2VJbk91dDogRWFzaW5nRnVuY3Rpb24gPSBCZXppZXJFYXNpbmcoMC40MiwgMC4wLCAwLjU4LCAxLjApO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5RdWFkKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucG93KHBvcywgMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvdXRRdWFkKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIC0oTWF0aC5wb3cocG9zIC0gMSwgMikgLSAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluT3V0UXVhZChwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICgocG9zIC89IDAuNSkgPCAxKSB7XG4gICAgcmV0dXJuIDAuNSAqIE1hdGgucG93KHBvcywgMik7XG4gIH1cbiAgcmV0dXJuIC0wLjUgKiAoKHBvcyAtPSAyKSAqIHBvcyAtIDIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5DdWJpYyhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnBvdyhwb3MsIDMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3V0Q3ViaWMocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5wb3cocG9zIC0gMSwgMykgKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRDdWJpYyhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICgocG9zIC89IDAuNSkgPCAxKSB7XG4gICAgcmV0dXJuIDAuNSAqIE1hdGgucG93KHBvcywgMyk7XG4gIH1cbiAgcmV0dXJuIDAuNSAqIChNYXRoLnBvdyhwb3MgLSAyLCAzKSArIDIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5RdWFydChwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnBvdyhwb3MsIDQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3V0UXVhcnQocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gLShNYXRoLnBvdyhwb3MgLSAxLCA0KSAtIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRRdWFydChwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICgocG9zIC89IDAuNSkgPCAxKSB7XG4gICAgcmV0dXJuIDAuNSAqIE1hdGgucG93KHBvcywgNCk7XG4gIH1cbiAgcmV0dXJuIC0wLjUgKiAoKHBvcyAtPSAyKSAqIE1hdGgucG93KHBvcywgMykgLSAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluUXVpbnQocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5wb3cocG9zLCA1KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG91dFF1aW50KHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucG93KHBvcyAtIDEsIDUpICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluT3V0UXVpbnQocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoKHBvcyAvPSAwLjUpIDwgMSkge1xuICAgIHJldHVybiAwLjUgKiBNYXRoLnBvdyhwb3MsIDUpO1xuICB9XG4gIHJldHVybiAwLjUgKiAoTWF0aC5wb3cocG9zIC0gMiwgNSkgKyAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluU2luZShwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAtTWF0aC5jb3MocG9zICogKE1hdGguUEkgLyAyKSkgKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3V0U2luZShwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnNpbihwb3MgKiAoTWF0aC5QSSAvIDIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluT3V0U2luZShwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAtMC41ICogKE1hdGguY29zKE1hdGguUEkgKiBwb3MpIC0gMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbkV4cG8ocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gcG9zID09PSAwID8gMCA6IE1hdGgucG93KDIsIDEwICogKHBvcyAtIDEpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG91dEV4cG8ocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gcG9zID09PSAxID8gMSA6IC1NYXRoLnBvdygyLCAtMTAgKiBwb3MpICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluT3V0RXhwbyhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChwb3MgPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBpZiAocG9zID09PSAxKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaWYgKChwb3MgLz0gMC41KSA8IDEpIHtcbiAgICByZXR1cm4gMC41ICogTWF0aC5wb3coMiwgMTAgKiAocG9zIC0gMSkpO1xuICB9XG4gIHJldHVybiAwLjUgKiAoLU1hdGgucG93KDIsIC0xMCAqIC0tcG9zKSArIDIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5DaXJjKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIC0oTWF0aC5zcXJ0KDEgLSBwb3MgKiBwb3MpIC0gMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvdXRDaXJjKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGguc3FydCgxIC0gTWF0aC5wb3cocG9zIC0gMSwgMikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRDaXJjKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKChwb3MgLz0gMC41KSA8IDEpIHtcbiAgICByZXR1cm4gLTAuNSAqIChNYXRoLnNxcnQoMSAtIHBvcyAqIHBvcykgLSAxKTtcbiAgfVxuICByZXR1cm4gMC41ICogKE1hdGguc3FydCgxIC0gKHBvcyAtPSAyKSAqIHBvcykgKyAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG91dEJvdW5jZShwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChwb3MgPCAxIC8gMi43NSkge1xuICAgIHJldHVybiA3LjU2MjUgKiBwb3MgKiBwb3M7XG4gIH0gZWxzZSBpZiAocG9zIDwgMiAvIDIuNzUpIHtcbiAgICByZXR1cm4gNy41NjI1ICogKHBvcyAtPSAxLjUgLyAyLjc1KSAqIHBvcyArIDAuNzU7XG4gIH0gZWxzZSBpZiAocG9zIDwgMi41IC8gMi43NSkge1xuICAgIHJldHVybiA3LjU2MjUgKiAocG9zIC09IDIuMjUgLyAyLjc1KSAqIHBvcyArIDAuOTM3NTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gNy41NjI1ICogKHBvcyAtPSAyLjYyNSAvIDIuNzUpICogcG9zICsgMC45ODQzNzU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluQmFjayhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHMgPSBtYWdpY1N3aW5nO1xuICByZXR1cm4gcG9zICogcG9zICogKChzICsgMSkgKiBwb3MgLSBzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG91dEJhY2socG9zOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBzID0gbWFnaWNTd2luZztcbiAgcmV0dXJuIChwb3MgLT0gMSkgKiBwb3MgKiAoKHMgKyAxKSAqIHBvcyArIHMpICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluT3V0QmFjayhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCBzID0gbWFnaWNTd2luZztcbiAgaWYgKChwb3MgLz0gMC41KSA8IDEpIHtcbiAgICByZXR1cm4gMC41ICogKHBvcyAqIHBvcyAqICgoKHMgKj0gMS41MjUpICsgMSkgKiBwb3MgLSBzKSk7XG4gIH1cbiAgcmV0dXJuIDAuNSAqICgocG9zIC09IDIpICogcG9zICogKCgocyAqPSAxLjUyNSkgKyAxKSAqIHBvcyArIHMpICsgMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbkVsYXN0aWMocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgcyA9IG1hZ2ljU3dpbmc7XG4gIGxldCBwID0gMDtcbiAgbGV0IGEgPSAxO1xuICBpZiAocG9zID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKHBvcyA9PT0gMSkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGlmICghcCkge1xuICAgIHAgPSAwLjM7XG4gIH1cbiAgaWYgKGEgPCAxKSB7XG4gICAgYSA9IDE7XG4gICAgcyA9IHAgLyA0O1xuICB9IGVsc2Uge1xuICAgIHMgPSAocCAvICgyICogTWF0aC5QSSkpICogTWF0aC5hc2luKDEgLyBhKTtcbiAgfVxuICByZXR1cm4gLShcbiAgICBhICpcbiAgICBNYXRoLnBvdygyLCAxMCAqIChwb3MgLT0gMSkpICpcbiAgICBNYXRoLnNpbigoKHBvcyAtIHMpICogKDIgKiBNYXRoLlBJKSkgLyBwKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3V0RWxhc3RpYyhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCBzID0gbWFnaWNTd2luZztcbiAgbGV0IHAgPSAwO1xuICBsZXQgYSA9IDE7XG4gIGlmIChwb3MgPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBpZiAocG9zID09PSAxKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaWYgKCFwKSB7XG4gICAgcCA9IDAuMztcbiAgfVxuICBpZiAoYSA8IDEpIHtcbiAgICBhID0gMTtcbiAgICBzID0gcCAvIDQ7XG4gIH0gZWxzZSB7XG4gICAgcyA9IChwIC8gKDIgKiBNYXRoLlBJKSkgKiBNYXRoLmFzaW4oMSAvIGEpO1xuICB9XG4gIHJldHVybiAoXG4gICAgYSAqIE1hdGgucG93KDIsIC0xMCAqIHBvcykgKiBNYXRoLnNpbigoKHBvcyAtIHMpICogKDIgKiBNYXRoLlBJKSkgLyBwKSArIDFcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluT3V0RWxhc3RpYyhwb3M6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCBzID0gbWFnaWNTd2luZztcbiAgbGV0IHAgPSAwO1xuICBsZXQgYSA9IDE7XG4gIGlmIChwb3MgPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBpZiAoKHBvcyAvPSAxIC8gMikgPT09IDIpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBpZiAoIXApIHtcbiAgICBwID0gMC4zICogMS41O1xuICB9XG4gIGlmIChhIDwgMSkge1xuICAgIGEgPSAxO1xuICAgIHMgPSBwIC8gNDtcbiAgfSBlbHNlIHtcbiAgICBzID0gKHAgLyAoMiAqIE1hdGguUEkpKSAqIE1hdGguYXNpbigxIC8gYSk7XG4gIH1cbiAgaWYgKHBvcyA8IDEpIHtcbiAgICByZXR1cm4gKFxuICAgICAgLTAuNSAqXG4gICAgICAoYSAqXG4gICAgICAgIE1hdGgucG93KDIsIDEwICogKHBvcyAtPSAxKSkgKlxuICAgICAgICBNYXRoLnNpbigoKHBvcyAtIHMpICogKDIgKiBNYXRoLlBJKSkgLyBwKSlcbiAgICApO1xuICB9XG4gIHJldHVybiAoXG4gICAgYSAqXG4gICAgICBNYXRoLnBvdygyLCAtMTAgKiAocG9zIC09IDEpKSAqXG4gICAgICBNYXRoLnNpbigoKHBvcyAtIHMpICogKDIgKiBNYXRoLlBJKSkgLyBwKSAqXG4gICAgICAwLjUgK1xuICAgIDFcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN3aW5nRnJvbVRvKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IHMgPSBtYWdpY1N3aW5nO1xuICByZXR1cm4gKHBvcyAvPSAwLjUpIDwgMVxuICAgID8gMC41ICogKHBvcyAqIHBvcyAqICgoKHMgKj0gMS41MjUpICsgMSkgKiBwb3MgLSBzKSlcbiAgICA6IDAuNSAqICgocG9zIC09IDIpICogcG9zICogKCgocyAqPSAxLjUyNSkgKyAxKSAqIHBvcyArIHMpICsgMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzd2luZ0Zyb20ocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBzID0gbWFnaWNTd2luZztcbiAgcmV0dXJuIHBvcyAqIHBvcyAqICgocyArIDEpICogcG9zIC0gcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzd2luZ1RvKHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgcyA9IG1hZ2ljU3dpbmc7XG4gIHJldHVybiAocG9zIC09IDEpICogcG9zICogKChzICsgMSkgKiBwb3MgKyBzKSArIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib3VuY2UocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAocG9zIDwgMSAvIDIuNzUpIHtcbiAgICByZXR1cm4gNy41NjI1ICogcG9zICogcG9zO1xuICB9IGVsc2UgaWYgKHBvcyA8IDIgLyAyLjc1KSB7XG4gICAgcmV0dXJuIDcuNTYyNSAqIChwb3MgLT0gMS41IC8gMi43NSkgKiBwb3MgKyAwLjc1O1xuICB9IGVsc2UgaWYgKHBvcyA8IDIuNSAvIDIuNzUpIHtcbiAgICByZXR1cm4gNy41NjI1ICogKHBvcyAtPSAyLjI1IC8gMi43NSkgKiBwb3MgKyAwLjkzNzU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDcuNTYyNSAqIChwb3MgLT0gMi42MjUgLyAyLjc1KSAqIHBvcyArIDAuOTg0Mzc1O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib3VuY2VQYXN0KHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHBvcyA8IDEgLyAyLjc1KSB7XG4gICAgcmV0dXJuIDcuNTYyNSAqIHBvcyAqIHBvcztcbiAgfSBlbHNlIGlmIChwb3MgPCAyIC8gMi43NSkge1xuICAgIHJldHVybiAyIC0gKDcuNTYyNSAqIChwb3MgLT0gMS41IC8gMi43NSkgKiBwb3MgKyAwLjc1KTtcbiAgfSBlbHNlIGlmIChwb3MgPCAyLjUgLyAyLjc1KSB7XG4gICAgcmV0dXJuIDIgLSAoNy41NjI1ICogKHBvcyAtPSAyLjI1IC8gMi43NSkgKiBwb3MgKyAwLjkzNzUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAyIC0gKDcuNTYyNSAqIChwb3MgLT0gMi42MjUgLyAyLjc1KSAqIHBvcyArIDAuOTg0Mzc1KTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImJvdW5jZSIsImJvdW5jZVBhc3QiLCJlYXNlIiwiZWFzZUluIiwiZWFzZUluT3V0IiwiZWFzZU91dCIsImluQmFjayIsImluQ2lyYyIsImluQ3ViaWMiLCJpbkVsYXN0aWMiLCJpbkV4cG8iLCJpbk91dEJhY2siLCJpbk91dENpcmMiLCJpbk91dEN1YmljIiwiaW5PdXRFbGFzdGljIiwiaW5PdXRFeHBvIiwiaW5PdXRRdWFkIiwiaW5PdXRRdWFydCIsImluT3V0UXVpbnQiLCJpbk91dFNpbmUiLCJpblF1YWQiLCJpblF1YXJ0IiwiaW5RdWludCIsImluU2luZSIsIm91dEJhY2siLCJvdXRCb3VuY2UiLCJvdXRDaXJjIiwib3V0Q3ViaWMiLCJvdXRFbGFzdGljIiwib3V0RXhwbyIsIm91dFF1YWQiLCJvdXRRdWFydCIsIm91dFF1aW50Iiwib3V0U2luZSIsInN3aW5nRnJvbSIsInN3aW5nRnJvbVRvIiwic3dpbmdUbyIsIm1hZ2ljU3dpbmciLCJCZXppZXJFYXNpbmciLCJwb3MiLCJNYXRoIiwicG93IiwiY29zIiwiUEkiLCJzaW4iLCJzcXJ0IiwicyIsInAiLCJhIiwiYXNpbiJdLCJtYXBwaW5ncyI6IkFBQUEsb1BBQW9QOzs7Ozs7Ozs7Ozs7SUFpUXBPQSxNQUFNO2VBQU5BOztJQVlBQyxVQUFVO2VBQVZBOztJQWxRSEMsSUFBSTtlQUFKQTs7SUFDQUMsTUFBTTtlQUFOQTs7SUFFQUMsU0FBUztlQUFUQTs7SUFEQUMsT0FBTztlQUFQQTs7SUEySEdDLE1BQU07ZUFBTkE7O0lBM0JBQyxNQUFNO2VBQU5BOztJQTlFQUMsT0FBTztlQUFQQTs7SUEySEFDLFNBQVM7ZUFBVEE7O0lBbEVBQyxNQUFNO2VBQU5BOztJQTBEQUMsU0FBUztlQUFUQTs7SUE3QkFDLFNBQVM7ZUFBVEE7O0lBOUVBQyxVQUFVO2VBQVZBOztJQXFLQUMsWUFBWTtlQUFaQTs7SUE1R0FDLFNBQVM7ZUFBVEE7O0lBeEVBQyxTQUFTO2VBQVRBOztJQThCQUMsVUFBVTtlQUFWQTs7SUFlQUMsVUFBVTtlQUFWQTs7SUFlQUMsU0FBUztlQUFUQTs7SUFwRUFDLE1BQU07ZUFBTkE7O0lBOEJBQyxPQUFPO2VBQVBBOztJQWVBQyxPQUFPO2VBQVBBOztJQWVBQyxNQUFN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 }), 1799: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { clearPlugin: function() { return clearPlugin; }, createPluginInstance: function() { return createPluginInstance; }, getPluginConfig: function() { return getPluginConfig; }, getPluginDestination: function() { return getPluginDestination; }, getPluginDuration: function() { return getPluginDuration; }, getPluginOrigin: function() { return getPluginOrigin; }, isPluginType: function() { return isPluginType; }, renderPlugin: function() { return renderPlugin; } }); const _IX2BrowserSupport = __webpack_require__(2662); const _plugins = __webpack_require__(3690); function isPluginType(actionTypeId) { // @ts-expect-error - TS2345 - Argument of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW" | "STYLE_OPACITY" | "STYLE_SIZE" | "STYLE_FILTER" | "STYLE_FONT_VARIATION" | "STYLE_BACKGROUND_COLOR" | ... 12 more ... | "STYLE_BOX_SHADOW"' is not assignable to parameter of type '"PLUGIN_LOTTIE" | "PLUGIN_SPLINE" | "PLUGIN_VARIABLE"'. return _plugins.pluginMethodMap.has(actionTypeId); } const pluginMethod = (methodName)=>(actionTypeId)=>{ if (!_IX2BrowserSupport.IS_BROWSER_ENV) { // IX2 plugins require browser libs for now return ()=>null; } const plugin = _plugins.pluginMethodMap.get(actionTypeId); if (!plugin) { throw new Error(`IX2 no plugin configured for: ${actionTypeId}`); } const method = plugin[methodName]; if (!method) { throw new Error(`IX2 invalid plugin method: ${methodName}`); } return method; }; const getPluginConfig = pluginMethod('getPluginConfig'); const getPluginOrigin = pluginMethod('getPluginOrigin'); const getPluginDuration = pluginMethod('getPluginDuration'); const getPluginDestination = pluginMethod('getPluginDestination'); const createPluginInstance = pluginMethod('createPluginInstance'); const renderPlugin = pluginMethod('renderPlugin'); const clearPlugin = pluginMethod('clearPlugin'); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC9sb2dpYy9JWDJWYW5pbGxhUGx1Z2lucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lTX0JST1dTRVJfRU5WfSBmcm9tICcuL0lYMkJyb3dzZXJTdXBwb3J0JztcbmltcG9ydCB7cGx1Z2luTWV0aG9kTWFwfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvcGx1Z2lucyc7XG5cbmltcG9ydCB0eXBlIHtBY3Rpb25UeXBlSWRUeXBlfSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvdHlwZXMtY29yZSc7XG5pbXBvcnQgdHlwZSB7UGx1Z2luVHlwZX0gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL3BsdWdpbnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQbHVnaW5UeXBlKGFjdGlvblR5cGVJZDogQWN0aW9uVHlwZUlkVHlwZSk6IGJvb2xlYW4ge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAnXCJUUkFOU0ZPUk1fTU9WRVwiIHwgXCJUUkFOU0ZPUk1fU0NBTEVcIiB8IFwiVFJBTlNGT1JNX1JPVEFURVwiIHwgXCJUUkFOU0ZPUk1fU0tFV1wiIHwgXCJTVFlMRV9PUEFDSVRZXCIgfCBcIlNUWUxFX1NJWkVcIiB8IFwiU1RZTEVfRklMVEVSXCIgfCBcIlNUWUxFX0ZPTlRfVkFSSUFUSU9OXCIgfCBcIlNUWUxFX0JBQ0tHUk9VTkRfQ09MT1JcIiB8IC4uLiAxMiBtb3JlIC4uLiB8IFwiU1RZTEVfQk9YX1NIQURPV1wiJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnXCJQTFVHSU5fTE9UVElFXCIgfCBcIlBMVUdJTl9TUExJTkVcIiB8IFwiUExVR0lOX1ZBUklBQkxFXCInLlxuICByZXR1cm4gcGx1Z2luTWV0aG9kTWFwLmhhcyhhY3Rpb25UeXBlSWQpO1xufVxuXG50eXBlIFBsdWdpbk1ldGhvZE5hbWUgPVxuICB8ICdnZXRQbHVnaW5Db25maWcnXG4gIHwgJ2dldFBsdWdpbk9yaWdpbidcbiAgfCAnZ2V0UGx1Z2luRHVyYXRpb24nXG4gIHwgJ2dldFBsdWdpbkRlc3RpbmF0aW9uJ1xuICB8ICdjcmVhdGVQbHVnaW5JbnN0YW5jZSdcbiAgfCAncmVuZGVyUGx1Z2luJ1xuICB8ICdjbGVhclBsdWdpbic7XG5cbmNvbnN0IHBsdWdpbk1ldGhvZCA9XG4gIChtZXRob2ROYW1lOiBQbHVnaW5NZXRob2ROYW1lKSA9PiAoYWN0aW9uVHlwZUlkOiBQbHVnaW5UeXBlKSA9PiB7XG4gICAgaWYgKCFJU19CUk9XU0VSX0VOVikge1xuICAgICAgLy8gSVgyIHBsdWdpbnMgcmVxdWlyZSBicm93c2VyIGxpYnMgZm9yIG5vd1xuICAgICAgcmV0dXJuICgpID0+IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHBsdWdpbiA9IHBsdWdpbk1ldGhvZE1hcC5nZXQoYWN0aW9uVHlwZUlkKTtcbiAgICBpZiAoIXBsdWdpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJWDIgbm8gcGx1Z2luIGNvbmZpZ3VyZWQgZm9yOiAke2FjdGlvblR5cGVJZH1gKTtcbiAgICB9XG4gICAgY29uc3QgbWV0aG9kID0gcGx1Z2luW21ldGhvZE5hbWVdO1xuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYElYMiBpbnZhbGlkIHBsdWdpbiBtZXRob2Q6ICR7bWV0aG9kTmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGhvZDtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbkNvbmZpZyA9IHBsdWdpbk1ldGhvZCgnZ2V0UGx1Z2luQ29uZmlnJyk7XG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luT3JpZ2luID0gcGx1Z2luTWV0aG9kKCdnZXRQbHVnaW5PcmlnaW4nKTtcbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5EdXJhdGlvbiA9IHBsdWdpbk1ldGhvZCgnZ2V0UGx1Z2luRHVyYXRpb24nKTtcbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5EZXN0aW5hdGlvbiA9IHBsdWdpbk1ldGhvZCgnZ2V0UGx1Z2luRGVzdGluYXRpb24nKTtcbmV4cG9ydCBjb25zdCBjcmVhdGVQbHVnaW5JbnN0YW5jZSA9IHBsdWdpbk1ldGhvZCgnY3JlYXRlUGx1Z2luSW5zdGFuY2UnKTtcbmV4cG9ydCBjb25zdCByZW5kZXJQbHVnaW4gPSBwbHVnaW5NZXRob2QoJ3JlbmRlclBsdWdpbicpO1xuZXhwb3J0IGNvbnN0IGNsZWFyUGx1Z2luID0gcGx1Z2luTWV0aG9kKCdjbGVhclBsdWdpbicpO1xuIl0sIm5hbWVzIjpbImNsZWFyUGx1Z2luIiwiY3JlYXRlUGx1Z2luSW5zdGFuY2UiLCJnZXRQbHVnaW5Db25maWciLCJnZXRQbHVnaW5EZXN0aW5hdGlvbiIsImdldFBsdWdpbkR1cmF0aW9uIiwiZ2V0UGx1Z2luT3JpZ2luIiwiaXNQbHVnaW5UeXBlIiwicmVuZGVyUGx1Z2luIiwiYWN0aW9uVHlwZUlkIiwicGx1Z2luTWV0aG9kTWFwIiwiaGFzIiwicGx1Z2luTWV0aG9kIiwibWV0aG9kTmFtZSIsIklTX0JST1dTRVJfRU5WIiwicGx1Z2luIiwiZ2V0IiwiRXJyb3IiLCJtZXRob2QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBMkNhQSxXQUFXO2VBQVhBOztJQUZBQyxvQkFBb0I7ZUFBcEJBOztJQUpBQyxlQUFlO2VBQWZBOztJQUdBQyxvQkFBb0I7ZUFBcEJBOztJQURBQyxpQkFBaUI7ZUFBakJBOztJQURBQyxlQUFlO2VBQWZBOztJQWhDR0MsWUFBWTtlQUFaQTs7SUFvQ0hDLFlBQVk7ZUFBWkE7OzttQ0ExQ2dCO3lCQUNDO0FBS3ZCLFNBQVNELGFBQWFFLFlBQThCO0lBQ3pELDJXQUEyVztJQUMzVyxPQUFPQyx3QkFBZSxDQUFDQyxHQUFHLENBQUNGO0FBQzdCO0FBV0EsTUFBTUcsZUFDSixDQUFDQyxhQUFpQyxDQUFDSjtRQUNqQyxJQUFJLENBQUNLLGlDQUFjLEVBQUU7WUFDbkIsMkNBQTJDO1lBQzNDLE9BQU8sSUFBTTtRQUNmO1FBQ0EsTUFBTUMsU0FBU0wsd0JBQWUsQ0FBQ00sR0FBRyxDQUFDUDtRQUNuQyxJQUFJLENBQUNNLFFBQVE7WUFDWCxNQUFNLElBQUlFLE1BQU0sQ0FBQyw4QkFBOEIsRUFBRVIsYUFBYSxDQUFDO1FBQ2pFO1FBQ0EsTUFBTVMsU0FBU0gsTUFBTSxDQUFDRixXQUFXO1FBQ2pDLElBQUksQ0FBQ0ssUUFBUTtZQUNYLE1BQU0sSUFBSUQsTUFBTSxDQUFDLDJCQUEyQixFQUFFSixXQUFXLENBQUM7UUFDNUQ7UUFDQSxPQUFPSztJQUNUO0FBRUssTUFBTWYsa0JBQWtCUyxhQUFhO0FBQ3JDLE1BQU1OLGtCQUFrQk0sYUFBYTtBQUNyQyxNQUFNUCxvQkFBb0JPLGFBQWE7QUFDdkMsTUFBTVIsdUJBQXVCUSxhQUFhO0FBQzFDLE1BQU1WLHVCQUF1QlUsYUFBYTtBQUMxQyxNQUFNSixlQUFlSSxhQUFhO0FBQ2xDLE1BQU1YLGNBQWNXLGFBQWEifQ== }), 4124: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { cleanupHTMLElement: function() { return cleanupHTMLElement; }, clearAllStyles: function() { return clearAllStyles; }, clearObjectCache: function() { return clearObjectCache; }, getActionListProgress: function() { return getActionListProgress; }, getAffectedElements: function() { return getAffectedElements; }, getComputedStyle: function() { return getComputedStyle; }, getDestinationValues: function() { return getDestinationValues; }, getElementId: function() { return getElementId; }, getInstanceId: function() { return getInstanceId; }, getInstanceOrigin: function() { return getInstanceOrigin; }, getItemConfigByKey: function() { return getItemConfigByKey; }, getMaxDurationItemIndex: function() { return getMaxDurationItemIndex; }, getNamespacedParameterId: function() { return getNamespacedParameterId; }, getRenderType: function() { return getRenderType; }, getStyleProp: function() { return getStyleProp; }, mediaQueriesEqual: function() { return mediaQueriesEqual; }, observeStore: function() { return observeStore; }, reduceListToGroup: function() { return reduceListToGroup; }, reifyState: function() { return reifyState; }, renderHTMLElement: function() { return renderHTMLElement; }, shallowEqual: function() { return _shallowEqual.default; }, shouldAllowMediaQuery: function() { return shouldAllowMediaQuery; }, shouldNamespaceEventParameter: function() { return shouldNamespaceEventParameter; }, stringifyTarget: function() { return stringifyTarget; } }); const _defaultTo = /*#__PURE__*/ _interop_require_default(__webpack_require__(4075)); const _reduce = /*#__PURE__*/ _interop_require_default(__webpack_require__(1455)); const _findLast = /*#__PURE__*/ _interop_require_default(__webpack_require__(5720)); const _timm = __webpack_require__(1185); const _sharedconstants = __webpack_require__(7087); const _shallowEqual = /*#__PURE__*/ _interop_require_default(__webpack_require__(7164)); const _IX2EasingUtils = __webpack_require__(3767); const _normalizeColor = __webpack_require__(380); const _IX2VanillaPlugins = __webpack_require__(1799); const _IX2BrowserSupport = __webpack_require__(2662); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const { BACKGROUND, TRANSFORM, TRANSLATE_3D, SCALE_3D, ROTATE_X, ROTATE_Y, ROTATE_Z, SKEW, PRESERVE_3D, FLEX, OPACITY, FILTER, FONT_VARIATION_SETTINGS, WIDTH, HEIGHT, BACKGROUND_COLOR, BORDER_COLOR, COLOR, CHILDREN, IMMEDIATE_CHILDREN, SIBLINGS, PARENT, DISPLAY, WILL_CHANGE, AUTO, COMMA_DELIMITER, COLON_DELIMITER, BAR_DELIMITER, RENDER_TRANSFORM, RENDER_GENERAL, RENDER_STYLE, RENDER_PLUGIN } = _sharedconstants.IX2EngineConstants; const { TRANSFORM_MOVE, TRANSFORM_SCALE, TRANSFORM_ROTATE, TRANSFORM_SKEW, STYLE_OPACITY, STYLE_FILTER, STYLE_FONT_VARIATION, STYLE_SIZE, STYLE_BACKGROUND_COLOR, STYLE_BORDER, STYLE_TEXT_COLOR, GENERAL_DISPLAY, OBJECT_VALUE } = _sharedconstants.ActionTypeConsts; // @ts-expect-error - TS7006 - Parameter 'v' implicitly has an 'any' type. const trim = (v)=>v.trim(); const colorStyleProps = Object.freeze({ [STYLE_BACKGROUND_COLOR]: BACKGROUND_COLOR, [STYLE_BORDER]: BORDER_COLOR, [STYLE_TEXT_COLOR]: COLOR }); const willChangeProps = Object.freeze({ [_IX2BrowserSupport.TRANSFORM_PREFIXED]: TRANSFORM, [BACKGROUND_COLOR]: BACKGROUND, [OPACITY]: OPACITY, [FILTER]: FILTER, [WIDTH]: WIDTH, [HEIGHT]: HEIGHT, [FONT_VARIATION_SETTINGS]: FONT_VARIATION_SETTINGS }); const objectCache = new Map(); function clearObjectCache() { objectCache.clear(); } let instanceCount = 1; function getInstanceId() { return 'i' + instanceCount++; } let elementCount = 1; function getElementId(ixElements, ref) { // TODO: optimize element lookup for(const key in ixElements){ const ixEl = ixElements[key]; if (ixEl && ixEl.ref === ref) { return ixEl.id; } } return 'e' + elementCount++; } function reifyState({ events, actionLists, site } = {}) { const eventTypeMap = (0, _reduce.default)(events, (result, event)=>{ const { eventTypeId } = event; if (!result[eventTypeId]) { result[eventTypeId] = {}; } result[eventTypeId][event.id] = event; return result; }, {}); let mediaQueries = site && site.mediaQueries; let mediaQueryKeys = []; if (mediaQueries) { mediaQueryKeys = mediaQueries.map((mq)=>mq.key); } else { mediaQueries = []; console.warn(`IX2 missing mediaQueries in site data`); } return { ixData: { events, actionLists, eventTypeMap, mediaQueries, mediaQueryKeys } }; } const strictEqual = (a, b)=>a === b; function observeStore({ // @ts-expect-error - TS7031 - Binding element 'store' implicitly has an 'any' type. store, // @ts-expect-error - TS7031 - Binding element 'select' implicitly has an 'any' type. select, // @ts-expect-error - TS7031 - Binding element 'onChange' implicitly has an 'any' type. onChange, comparator = strictEqual }) { const { getState, subscribe } = store; const unsubscribe = subscribe(handleChange); let currentState = select(getState()); function handleChange() { const nextState = select(getState()); if (nextState == null) { unsubscribe(); return; } if (!comparator(nextState, currentState)) { currentState = nextState; onChange(currentState, store); } } return unsubscribe; } // @ts-expect-error - TS7006 - Parameter 'target' implicitly has an 'any' type. function normalizeTarget(target) { const type = typeof target; if (type === 'string') { return { id: target }; } else if (target != null && type === 'object') { const { id, objectId, selector, selectorGuids, appliesTo, useEventTarget } = target; return { id, objectId, selector, selectorGuids, appliesTo, useEventTarget }; } return {}; } function getAffectedElements({ config, event, eventTarget, elementRoot, elementApi }) { if (!elementApi) { throw new Error('IX2 missing elementApi'); } const { targets } = config; if (Array.isArray(targets) && targets.length > 0) { return targets.reduce((accumulator, target)=>accumulator.concat(getAffectedElements({ config: { target }, event, eventTarget, elementRoot, elementApi })), []); } const { getValidDocument, getQuerySelector, queryDocument, getChildElements, getSiblingElements, matchSelector, elementContains, isSiblingNode } = elementApi; const { target } = config; if (!target) { return []; } const { id, objectId, selector, selectorGuids, appliesTo, useEventTarget } = normalizeTarget(target); if (objectId) { const ref = objectCache.has(objectId) ? objectCache.get(objectId) : objectCache.set(objectId, {}).get(objectId); return [ ref ]; } if (appliesTo === _sharedconstants.EventAppliesTo.PAGE) { const doc = getValidDocument(id); return doc ? [ doc ] : []; } const overrides = event?.action?.config?.affectedElements ?? {}; const override = overrides[id || selector] || {}; const validOverride = Boolean(override.id || override.selector); let limitAffectedElements; let baseSelector; let finalSelector; const eventTargetSelector = event && getQuerySelector(normalizeTarget(event.target)); if (validOverride) { limitAffectedElements = override.limitAffectedElements; baseSelector = eventTargetSelector; finalSelector = getQuerySelector(override); } else { // pass in selectorGuids as well for server-side rendering. baseSelector = finalSelector = getQuerySelector({ id, selector, selectorGuids }); } if (event && useEventTarget) { // eventTarget is not defined when this function is called in a clear request, so find // all target elements associated with the event data, and return affected elements. const eventTargets = eventTarget && (finalSelector || useEventTarget === true) ? [ eventTarget ] : queryDocument(eventTargetSelector); if (finalSelector) { if (useEventTarget === PARENT) { return queryDocument(finalSelector).filter((parentElement)=>eventTargets.some((targetElement)=>elementContains(parentElement, targetElement))); } if (useEventTarget === CHILDREN) { return queryDocument(finalSelector).filter((childElement)=>eventTargets.some((targetElement)=>elementContains(targetElement, childElement))); } if (useEventTarget === SIBLINGS) { return queryDocument(finalSelector).filter((siblingElement)=>eventTargets.some((targetElement)=>isSiblingNode(targetElement, siblingElement))); } } return eventTargets; } if (baseSelector == null || finalSelector == null) { return []; } if (_IX2BrowserSupport.IS_BROWSER_ENV && elementRoot) { return queryDocument(finalSelector).filter((element)=>// @ts-expect-error - elementRoot is HTMLElement in browser elementRoot.contains(element)); } if (limitAffectedElements === CHILDREN) { return queryDocument(baseSelector, finalSelector); } else if (limitAffectedElements === IMMEDIATE_CHILDREN) { return getChildElements(queryDocument(baseSelector)).filter(matchSelector(finalSelector)); } else if (limitAffectedElements === SIBLINGS) { return getSiblingElements(queryDocument(baseSelector)).filter(matchSelector(finalSelector)); } else { return queryDocument(finalSelector); } } function getComputedStyle({ element, actionItem }) { if (!_IX2BrowserSupport.IS_BROWSER_ENV) { return {}; } const { actionTypeId } = actionItem; switch(actionTypeId){ case STYLE_SIZE: case STYLE_BACKGROUND_COLOR: case STYLE_BORDER: case STYLE_TEXT_COLOR: case GENERAL_DISPLAY: return window.getComputedStyle(element); default: return {}; } } const pxValueRegex = /px/; // @ts-expect-error - TS7006 - Parameter 'filters' implicitly has an 'any' type. const getFilterDefaults = (actionState, filters)=>// @ts-expect-error - TS7006 - Parameter 'result' implicitly has an 'any' type. | TS7006 - Parameter 'filter' implicitly has an 'any' type. filters.reduce((result, filter)=>{ if (result[filter.type] == null) { result[filter.type] = // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'Readonly<{ blur: 0; 'hue-rotate': 0; invert: 0; grayscale: 0; saturate: 100; sepia: 0; contrast: 100; brightness: 100; }>'. filterDefaults[filter.type]; } return result; }, actionState || {}); const getFontVariationDefaults = (actionState, fontVariations)=>fontVariations.reduce((result, fontVariation)=>{ if (result[fontVariation.type] == null) { result[fontVariation.type] = // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Readonly<{ wght: 0; opsz: 0; wdth: 0; slnt: 0; }>'. fontVariationDefaults[fontVariation.type] || // @ts-expect-error - TS2339 - Property 'defaultValue' does not exist on type 'FontVariationItemConfigType'. fontVariation.defaultValue || 0; } return result; }, actionState || {}); function getInstanceOrigin(element, refState = {}, computedStyle = {}, actionItem, elementApi) { const { getStyle } = elementApi; // Flow Hack: Passing actionTypeId to isPluginType and then trying // to do type refinement using the same variable via a switch statement // breaks down. This is is a workaround to ensure we can use type refinement. const { actionTypeId } = actionItem; if ((0, _IX2VanillaPlugins.isPluginType)(actionTypeId)) { // @ts-expect-error - TS2345 - Argument of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW" | "STYLE_OPACITY" | "STYLE_SIZE" | "STYLE_FILTER" | "STYLE_FONT_VARIATION" | "STYLE_BACKGROUND_COLOR" | "STYLE_BORDER" | "STYLE_TEXT_COLOR" | "PLUGIN_LOTTIE" | "GENERAL_DISPLAY"' is not assignable to parameter of type 'PluginType'. | TS7053 - Element implicitly has an 'any' type because expression of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW" | "STYLE_OPACITY" | "STYLE_SIZE" | "STYLE_FILTER" | "STYLE_FONT_VARIATION" | "STYLE_BACKGROUND_COLOR" | "STYLE_BORDER" | "STYLE_TEXT_COLOR" | "PLUGIN_LOTTIE" | "GENERAL_DISPLAY"' can't be used to index type '{}'. return (0, _IX2VanillaPlugins.getPluginOrigin)(actionTypeId)(refState[actionTypeId], actionItem); } switch(actionItem.actionTypeId){ case TRANSFORM_MOVE: case TRANSFORM_SCALE: case TRANSFORM_ROTATE: case TRANSFORM_SKEW: { return(// @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW"' can't be used to index type '{}'. refState[actionItem.actionTypeId] || transformDefaults[actionItem.actionTypeId]); } case STYLE_FILTER: return getFilterDefaults(// @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type '"STYLE_FILTER"' can't be used to index type '{}'. refState[actionItem.actionTypeId], actionItem.config.filters); case STYLE_FONT_VARIATION: return getFontVariationDefaults(// @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type '"STYLE_FONT_VARIATION"' can't be used to index type '{}'. refState[actionItem.actionTypeId], actionItem.config.fontVariations); case STYLE_OPACITY: return { value: (0, _defaultTo.default)(parseFloat(getStyle(element, OPACITY)), 1.0) }; case STYLE_SIZE: { const inlineWidth = getStyle(element, WIDTH); const inlineHeight = getStyle(element, HEIGHT); let widthValue; let heightValue; // When destination unit is 'AUTO', ensure origin values are in px if (actionItem.config.widthUnit === AUTO) { widthValue = pxValueRegex.test(inlineWidth) ? parseFloat(inlineWidth) : parseFloat(computedStyle.width); } else { widthValue = (0, _defaultTo.default)(parseFloat(inlineWidth), // @ts-expect-error - TS18047 - 'computedStyle' is possibly 'null'. parseFloat(computedStyle.width)); } if (actionItem.config.heightUnit === AUTO) { heightValue = pxValueRegex.test(inlineHeight) ? parseFloat(inlineHeight) : parseFloat(computedStyle.height); } else { heightValue = (0, _defaultTo.default)(parseFloat(inlineHeight), // @ts-expect-error - TS18047 - 'computedStyle' is possibly 'null'. parseFloat(computedStyle.height)); } return { widthValue, heightValue }; } case STYLE_BACKGROUND_COLOR: case STYLE_BORDER: case STYLE_TEXT_COLOR: return parseColor({ element, actionTypeId: actionItem.actionTypeId, computedStyle, getStyle }); case GENERAL_DISPLAY: return { // @ts-expect-error - TS18047 - 'computedStyle' is possibly 'null'. value: (0, _defaultTo.default)(getStyle(element, DISPLAY), computedStyle.display) }; // @ts-expect-error - `OBJECT_VALUE` is not an expected `actionTypeId` case OBJECT_VALUE: // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{}'. | TS2339 - Property 'actionTypeId' does not exist on type 'never'. return refState[actionItem.actionTypeId] || { value: 0 }; default: { // As far as the type system can tell, we're missing a handler for // PLUGIN_LOTTIE. // // This is actually handled by `isPluginType` above. // /*:: (actionItem: empty); */ return; } } } // @ts-expect-error - TS7006 - Parameter 'result' implicitly has an 'any' type. | TS7006 - Parameter 'filter' implicitly has an 'any' type. const reduceFilters = (result, filter)=>{ if (filter) { result[filter.type] = filter.value || 0; } return result; }; const reduceFontVariations = (result, fontVariation)=>{ if (fontVariation) { result[fontVariation.type] = fontVariation.value || 0; } return result; }; const getItemConfigByKey = (actionTypeId, key, config)=>{ if ((0, _IX2VanillaPlugins.isPluginType)(actionTypeId)) { return (0, _IX2VanillaPlugins.getPluginConfig)(actionTypeId)(config, key); } switch(actionTypeId){ case STYLE_FILTER: { const filter = (0, _findLast.default)(config.filters, ({ type })=>type === key); return filter ? filter.value : 0; } case STYLE_FONT_VARIATION: { const fontVariation = (0, _findLast.default)(config.fontVariations, ({ type })=>type === key); return fontVariation ? fontVariation.value : 0; } default: return config[key]; } }; function getDestinationValues({ element, actionItem, elementApi }) { if ((0, _IX2VanillaPlugins.isPluginType)(actionItem.actionTypeId)) { // @ts-expect-error - TS2345 - Argument of type '"TRANSFORM_MOVE" | "TRANSFORM_SCALE" | "TRANSFORM_ROTATE" | "TRANSFORM_SKEW" | "STYLE_OPACITY" | "STYLE_SIZE" | "STYLE_FILTER" | "STYLE_FONT_VARIATION" | "STYLE_BACKGROUND_COLOR" | "STYLE_BORDER" | "STYLE_TEXT_COLOR" | "PLUGIN_LOTTIE" | "GENERAL_DISPLAY"' is not assignable to parameter of type 'PluginType'. return (0, _IX2VanillaPlugins.getPluginDestination)(actionItem.actionTypeId)(actionItem.config); } switch(actionItem.actionTypeId){ case TRANSFORM_MOVE: case TRANSFORM_SCALE: case TRANSFORM_ROTATE: case TRANSFORM_SKEW: { const { xValue, yValue, zValue } = actionItem.config; return { xValue, yValue, zValue }; } case STYLE_SIZE: { const { getStyle, setStyle, getProperty } = elementApi; const { widthUnit, heightUnit } = actionItem.config; let { widthValue, heightValue } = actionItem.config; if (!_IX2BrowserSupport.IS_BROWSER_ENV) { return { widthValue, heightValue }; } if (widthUnit === AUTO) { const temp = getStyle(element, WIDTH); setStyle(element, WIDTH, ''); // @ts-expect-error - TS2322 - Type 'string | null' is not assignable to type 'number | undefined'. widthValue = getProperty(element, 'offsetWidth'); setStyle(element, WIDTH, temp); } if (heightUnit === AUTO) { const temp = getStyle(element, HEIGHT); setStyle(element, HEIGHT, ''); // @ts-expect-error - TS2322 - Type 'string | null' is not assignable to type 'number | undefined'. heightValue = getProperty(element, 'offsetHeight'); setStyle(element, HEIGHT, temp); } return { widthValue, heightValue }; } case STYLE_BACKGROUND_COLOR: case STYLE_BORDER: case STYLE_TEXT_COLOR: { const { rValue, gValue, bValue, aValue, globalSwatchId } = actionItem.config; if (globalSwatchId && globalSwatchId.startsWith('--')) { const { getStyle } = elementApi; const value = getStyle(element, globalSwatchId); const normalizedValue = (0, _normalizeColor.normalizeColor)(value); return { rValue: normalizedValue.red, gValue: normalizedValue.green, bValue: normalizedValue.blue, aValue: normalizedValue.alpha }; } return { rValue, gValue, bValue, aValue }; } case STYLE_FILTER: { return actionItem.config.filters.reduce(reduceFilters, {}); } case STYLE_FONT_VARIATION: { return actionItem.config.fontVariations.reduce(reduceFontVariations, {}); } default: { const { value } = actionItem.config; return { value }; } } } function getRenderType(actionTypeId) { if (/^TRANSFORM_/.test(actionTypeId)) { return RENDER_TRANSFORM; } if (/^STYLE_/.test(actionTypeId)) { return RENDER_STYLE; } if (/^GENERAL_/.test(actionTypeId)) { return RENDER_GENERAL; } if (/^PLUGIN_/.test(actionTypeId)) { return RENDER_PLUGIN; } } function getStyleProp(renderType, actionTypeId) { return renderType === RENDER_STYLE ? actionTypeId.replace('STYLE_', '').toLowerCase() : null; } function renderHTMLElement(element, refState, actionState, eventId, actionItem, styleProp, elementApi, renderType, pluginInstance) { switch(renderType){ case RENDER_TRANSFORM: { return renderTransform(element, refState, actionState, actionItem, elementApi); } case RENDER_STYLE: { return renderStyle(element, refState, actionState, actionItem, styleProp, elementApi); } case RENDER_GENERAL: { return renderGeneral(element, actionItem, elementApi); } case RENDER_PLUGIN: { const { actionTypeId } = actionItem; if ((0, _IX2VanillaPlugins.isPluginType)(actionTypeId)) { return (0, _IX2VanillaPlugins.renderPlugin)(actionTypeId)(pluginInstance, refState, actionItem); } } } } const transformDefaults = { [TRANSFORM_MOVE]: Object.freeze({ xValue: 0, yValue: 0, zValue: 0 }), [TRANSFORM_SCALE]: Object.freeze({ xValue: 1, yValue: 1, zValue: 1 }), [TRANSFORM_ROTATE]: Object.freeze({ xValue: 0, yValue: 0, zValue: 0 }), [TRANSFORM_SKEW]: Object.freeze({ xValue: 0, yValue: 0 }) }; const filterDefaults = Object.freeze({ blur: 0, 'hue-rotate': 0, invert: 0, grayscale: 0, saturate: 100, sepia: 0, contrast: 100, brightness: 100 }); const fontVariationDefaults = Object.freeze({ wght: 0, opsz: 0, wdth: 0, slnt: 0 }); // @ts-expect-error - TS7006 - Parameter 'filterType' implicitly has an 'any' type. | TS7006 - Parameter 'actionItemConfig' implicitly has an 'any' type. const getFilterUnit = (filterType, actionItemConfig)=>{ const filter = (0, _findLast.default)(actionItemConfig.filters, ({ type })=>type === filterType); if (filter && filter.unit) { return filter.unit; } switch(filterType){ case 'blur': return 'px'; case 'hue-rotate': return 'deg'; default: return '%'; } }; const transformKeys = Object.keys(transformDefaults); function renderTransform(element, refState, actionState, actionItem, elementApi) { const newTransform = transformKeys.map((actionTypeId)=>{ // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ readonly TRANSFORM_MOVE: Readonly<{ xValue: 0; yValue: 0; zValue: 0; }>; readonly TRANSFORM_SCALE: Readonly<{ xValue: 1; yValue: 1; zValue: 1; }>; readonly TRANSFORM_ROTATE: Readonly<{ xValue: 0; yValue: 0; zValue: 0; }>; readonly TRANSFORM_SKEW: Readonly<...>; }'. const defaults = transformDefaults[actionTypeId]; const { xValue = defaults.xValue, yValue = defaults.yValue, zValue = defaults.zValue, xUnit = '', yUnit = '', zUnit = '' } = refState[actionTypeId] || {}; switch(actionTypeId){ case TRANSFORM_MOVE: return `${TRANSLATE_3D}(${xValue}${xUnit}, ${yValue}${yUnit}, ${zValue}${zUnit})`; case TRANSFORM_SCALE: return `${SCALE_3D}(${xValue}${xUnit}, ${yValue}${yUnit}, ${zValue}${zUnit})`; case TRANSFORM_ROTATE: return `${ROTATE_X}(${xValue}${xUnit}) ${ROTATE_Y}(${yValue}${yUnit}) ${ROTATE_Z}(${zValue}${zUnit})`; case TRANSFORM_SKEW: return `${SKEW}(${xValue}${xUnit}, ${yValue}${yUnit})`; default: return ''; } }).join(' '); const { setStyle } = elementApi; addWillChange(element, _IX2BrowserSupport.TRANSFORM_PREFIXED, elementApi); setStyle(element, _IX2BrowserSupport.TRANSFORM_PREFIXED, newTransform); // Set transform-style: preserve-3d if (hasDefined3dTransform(actionItem, actionState)) { setStyle(element, _IX2BrowserSupport.TRANSFORM_STYLE_PREFIXED, PRESERVE_3D); } } function renderFilter(element, actionState, actionItemConfig, elementApi) { const filterValue = (0, _reduce.default)(actionState, (result, value, type)=>`${result} ${type}(${value}${getFilterUnit(type, actionItemConfig)})`, ''); const { setStyle } = elementApi; addWillChange(element, FILTER, elementApi); setStyle(element, FILTER, filterValue); } function renderFontVariation(element, actionState, actionItemConfig, elementApi) { const fontVariationValue = (0, _reduce.default)(actionState, (result, value, type)=>{ // @ts-expect-error - TS2345 - Argument of type 'string' is not assignable to parameter of type 'never'. result.push(`"${type}" ${value}`); return result; }, []).join(', '); const { setStyle } = elementApi; addWillChange(element, FONT_VARIATION_SETTINGS, elementApi); setStyle(element, FONT_VARIATION_SETTINGS, fontVariationValue); } // @ts-expect-error - TS7031 - Binding element 'actionTypeId' implicitly has an 'any' type. | TS7031 - Binding element 'xValue' implicitly has an 'any' type. | TS7031 - Binding element 'yValue' implicitly has an 'any' type. | TS7031 - Binding element 'zValue' implicitly has an 'any' type. function hasDefined3dTransform({ actionTypeId }, { xValue, yValue, zValue }) { // TRANSLATE_Z return actionTypeId === TRANSFORM_MOVE && zValue !== undefined || // SCALE_Z actionTypeId === TRANSFORM_SCALE && zValue !== undefined || // ROTATE_X or ROTATE_Y actionTypeId === TRANSFORM_ROTATE && (xValue !== undefined || yValue !== undefined); } const paramCapture = '\\(([^)]+)\\)'; const rgbValidRegex = /^rgb/; const rgbMatchRegex = RegExp(`rgba?${paramCapture}`); function getFirstMatch(regex, value) { const match = regex.exec(value); return match ? match[1] : ''; } // @ts-expect-error - TS7031 - Binding element 'element' implicitly has an 'any' type. | TS7031 - Binding element 'actionTypeId' implicitly has an 'any' type. | TS7031 - Binding element 'computedStyle' implicitly has an 'any' type. | TS7031 - Binding element 'getStyle' implicitly has an 'any' type. function parseColor({ element, actionTypeId, computedStyle, getStyle }) { // @ts-expect-error - TS7053 - Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'Readonly<{ STYLE_BACKGROUND_COLOR: "backgroundColor"; STYLE_BORDER: "borderColor"; STYLE_TEXT_COLOR: "color"; }>'. const prop = colorStyleProps[actionTypeId]; const inlineValue = getStyle(element, prop); const value = rgbValidRegex.test(inlineValue) ? inlineValue : computedStyle[prop]; // @ts-expect-error - TS2532 - Object is possibly 'undefined'. const matches = getFirstMatch(rgbMatchRegex, value).split(COMMA_DELIMITER); return { // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'. rValue: (0, _defaultTo.default)(parseInt(matches[0], 10), 255), // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'. gValue: (0, _defaultTo.default)(parseInt(matches[1], 10), 255), // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'. bValue: (0, _defaultTo.default)(parseInt(matches[2], 10), 255), // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'. aValue: (0, _defaultTo.default)(parseFloat(matches[3]), 1) }; } function renderStyle(element, refState, actionState, actionItem, styleProp, elementApi) { const { setStyle } = elementApi; switch(actionItem.actionTypeId){ case STYLE_SIZE: { let { widthUnit = '', heightUnit = '' } = actionItem.config; const { widthValue, heightValue } = actionState; if (widthValue !== undefined) { if (widthUnit === AUTO) { widthUnit = 'px'; } addWillChange(element, WIDTH, elementApi); setStyle(element, WIDTH, widthValue + widthUnit); } if (heightValue !== undefined) { if (heightUnit === AUTO) { heightUnit = 'px'; } addWillChange(element, HEIGHT, elementApi); setStyle(element, HEIGHT, heightValue + heightUnit); } break; } case STYLE_FILTER: { renderFilter(element, actionState, actionItem.config, elementApi); break; } case STYLE_FONT_VARIATION: { renderFontVariation(element, actionState, actionItem.config, elementApi); break; } case STYLE_BACKGROUND_COLOR: case STYLE_BORDER: case STYLE_TEXT_COLOR: { const prop = colorStyleProps[actionItem.actionTypeId]; const rValue = Math.round(actionState.rValue); const gValue = Math.round(actionState.gValue); const bValue = Math.round(actionState.bValue); const aValue = actionState.aValue; addWillChange(element, prop, elementApi); setStyle(element, prop, aValue >= 1 ? `rgb(${rValue},${gValue},${bValue})` : `rgba(${rValue},${gValue},${bValue},${aValue})`); break; } default: { // @ts-expect-error - TS2339 - Property 'unit' does not exist on type '{ delay: number; easing: IX2EasingType; duration: number; target: ActionItemTargetType; xValue: number | undefined; yValue: number | undefined; zValue: number | undefined; xUnit: "%" | ... 4 more ... | "VW"; yUnit: "%" | ... 4 more ... | "VW"; zUnit: "%" | ... 4 more ... | "VW"; } | ... 5 more ... | { ...; }'. const { unit = '' } = actionItem.config; addWillChange(element, styleProp, elementApi); setStyle(element, styleProp, actionState.value + unit); break; } } } function renderGeneral(element, actionItem, elementApi) { const { setStyle } = elementApi; switch(actionItem.actionTypeId){ case GENERAL_DISPLAY: { const { value } = actionItem.config; if (value === FLEX && _IX2BrowserSupport.IS_BROWSER_ENV) { setStyle(element, DISPLAY, _IX2BrowserSupport.FLEX_PREFIXED); } else { setStyle(element, DISPLAY, value); } return; } } } function addWillChange(element, prop, elementApi) { if (!_IX2BrowserSupport.IS_BROWSER_ENV) { return; } const validProp = willChangeProps[prop]; if (!validProp) { return; } const { getStyle, setStyle } = elementApi; const value = getStyle(element, WILL_CHANGE); if (!value) { setStyle(element, WILL_CHANGE, validProp); return; } const values = value.split(COMMA_DELIMITER).map(trim); if (values.indexOf(validProp) === -1) { setStyle(element, WILL_CHANGE, values.concat(validProp).join(COMMA_DELIMITER)); } } // @ts-expect-error - TS7006 - Parameter 'prop' implicitly has an 'any' type. function removeWillChange(element, prop, elementApi) { if (!_IX2BrowserSupport.IS_BROWSER_ENV) { return; } const validProp = willChangeProps[prop]; if (!validProp) { return; } const { getStyle, setStyle } = elementApi; const value = getStyle(element, WILL_CHANGE); if (!value || value.indexOf(validProp) === -1) { return; } setStyle(element, WILL_CHANGE, value.split(COMMA_DELIMITER).map(trim)// @ts-expect-error - TS7006 - Parameter 'v' implicitly has an 'any' type. .filter((v)=>v !== validProp).join(COMMA_DELIMITER)); } function clearAllStyles({ store, elementApi }) { const { ixData } = store.getState(); const { events = {}, actionLists = {} } = ixData; Object.keys(events).forEach((eventId)=>{ const event = events[eventId]; const { config } = event.action; const { actionListId } = config; const actionList = actionLists[actionListId]; if (actionList) { clearActionListStyles({ actionList, event, elementApi }); } }); Object.keys(actionLists).forEach((actionListId)=>{ // @ts-expect-error - TS2345 - Argument of type '{ actionList: any; elementApi: any; }' is not assignable to parameter of type '{ actionList?: {} | undefined; event: any; elementApi: any; }'. clearActionListStyles({ actionList: actionLists[actionListId], elementApi }); }); } // @ts-expect-error - TS7031 - Binding element 'event' implicitly has an 'any' type. | TS7031 - Binding element 'elementApi' implicitly has an 'any' type. function clearActionListStyles({ actionList = {}, event, elementApi }) { // @ts-expect-error - TS2339 - Property 'actionItemGroups' does not exist on type '{}'. | TS2339 - Property 'continuousParameterGroups' does not exist on type '{}'. const { actionItemGroups, continuousParameterGroups } = actionList; actionItemGroups && // @ts-expect-error - TS7006 - Parameter 'actionGroup' implicitly has an 'any' type. actionItemGroups.forEach((actionGroup)=>{ clearActionGroupStyles({ actionGroup, event, elementApi }); }); continuousParameterGroups && // @ts-expect-error - TS7006 - Parameter 'paramGroup' implicitly has an 'any' type. continuousParameterGroups.forEach((paramGroup)=>{ const { continuousActionGroups } = paramGroup; // @ts-expect-error - TS7006 - Parameter 'actionGroup' implicitly has an 'any' type. continuousActionGroups.forEach((actionGroup)=>{ clearActionGroupStyles({ actionGroup, event, elementApi }); }); }); } // @ts-expect-error - TS7031 - Binding element 'actionGroup' implicitly has an 'any' type. | TS7031 - Binding element 'event' implicitly has an 'any' type. | TS7031 - Binding element 'elementApi' implicitly has an 'any' type. function clearActionGroupStyles({ actionGroup, event, elementApi }) { const { actionItems } = actionGroup; // @ts-expect-error - TS7006 - Parameter 'actionItem' implicitly has an 'any' type. actionItems.forEach((actionItem)=>{ const { actionTypeId, config } = actionItem; let clearElement; if ((0, _IX2VanillaPlugins.isPluginType)(actionTypeId)) { // @ts-expect-error - TS7006 - Parameter 'ref' implicitly has an 'any' type. clearElement = (ref)=>(0, _IX2VanillaPlugins.clearPlugin)(actionTypeId)(ref, actionItem); } else { clearElement = processElementByType({ effect: clearStyleProp, actionTypeId, elementApi }); } getAffectedElements({ config, event, elementApi }).forEach(clearElement); }); } function cleanupHTMLElement(element, actionItem, elementApi) { const { setStyle, getStyle } = elementApi; const { actionTypeId } = actionItem; if (actionTypeId === STYLE_SIZE) { const { config } = actionItem; if (config.widthUnit === AUTO) { setStyle(element, WIDTH, ''); } if (config.heightUnit === AUTO) { setStyle(element, HEIGHT, ''); } } if (getStyle(element, WILL_CHANGE)) { processElementByType({ effect: removeWillChange, actionTypeId, elementApi })(element); } } const processElementByType = ({ effect, actionTypeId, elementApi })=>// @ts-expect-error - TS7006 - Parameter 'element' implicitly has an 'any' type. (element)=>{ switch(actionTypeId){ case TRANSFORM_MOVE: case TRANSFORM_SCALE: case TRANSFORM_ROTATE: case TRANSFORM_SKEW: effect(element, _IX2BrowserSupport.TRANSFORM_PREFIXED, elementApi); break; case STYLE_FILTER: effect(element, FILTER, elementApi); break; case STYLE_FONT_VARIATION: effect(element, FONT_VARIATION_SETTINGS, elementApi); break; case STYLE_OPACITY: effect(element, OPACITY, elementApi); break; case STYLE_SIZE: effect(element, WIDTH, elementApi); effect(element, HEIGHT, elementApi); break; case STYLE_BACKGROUND_COLOR: case STYLE_BORDER: case STYLE_TEXT_COLOR: effect(element, colorStyleProps[actionTypeId], elementApi); break; case GENERAL_DISPLAY: effect(element, DISPLAY, elementApi); break; } }; // @ts-expect-error - TS7006 - Parameter 'prop' implicitly has an 'any' type. function clearStyleProp(element, prop, elementApi) { const { setStyle } = elementApi; removeWillChange(element, prop, elementApi); setStyle(element, prop, ''); // Clear transform-style: preserve-3d if (prop === _IX2BrowserSupport.TRANSFORM_PREFIXED) { setStyle(element, _IX2BrowserSupport.TRANSFORM_STYLE_PREFIXED, ''); } } function getMaxDurationItemIndex(actionItems) { let maxDuration = 0; let resultIndex = 0; // @ts-expect-error - TS7006 - Parameter 'actionItem' implicitly has an 'any' type. | TS7006 - Parameter 'index' implicitly has an 'any' type. actionItems.forEach((actionItem, index)=>{ const { config } = actionItem; const total = config.delay + config.duration; if (total >= maxDuration) { maxDuration = total; resultIndex = index; } }); return resultIndex; } function getActionListProgress(actionList, instance) { const { actionItemGroups, useFirstGroupAsInitialState } = actionList; const { actionItem: instanceItem, verboseTimeElapsed = 0 } = instance; let totalDuration = 0; let elapsedDuration = 0; // @ts-expect-error - TS7006 - Parameter 'group' implicitly has an 'any' type. | TS7006 - Parameter 'index' implicitly has an 'any' type. actionItemGroups.forEach((group, index)=>{ if (useFirstGroupAsInitialState && index === 0) { return; } const { actionItems } = group; const carrierItem = actionItems[getMaxDurationItemIndex(actionItems)]; const { config, actionTypeId } = carrierItem; if (instanceItem.id === carrierItem.id) { elapsedDuration = totalDuration + verboseTimeElapsed; } const duration = getRenderType(actionTypeId) === RENDER_GENERAL ? 0 : config.duration; totalDuration += config.delay + duration; }); return totalDuration > 0 ? (0, _IX2EasingUtils.optimizeFloat)(elapsedDuration / totalDuration) : 0; } function reduceListToGroup({ actionList, actionItemId, rawData }) { // @ts-expect-error - FIXME - TS2339 - Property 'actionItemGroups' does not exist on type 'ActionListType'. const { actionItemGroups, continuousParameterGroups } = actionList; const newActionItems = []; const takeItemUntilMatch = (actionItem)=>{ newActionItems.push((0, _timm.mergeIn)(actionItem, [ 'config' ], { delay: 0, duration: 0 })); return actionItem.id === actionItemId; }; actionItemGroups && actionItemGroups.some(({ actionItems })=>{ return actionItems.some(takeItemUntilMatch); }); continuousParameterGroups && continuousParameterGroups.some((paramGroup)=>{ const { continuousActionGroups } = paramGroup; return continuousActionGroups.some(({ actionItems })=>{ return actionItems.some(takeItemUntilMatch); }); }); return (0, _timm.setIn)(rawData, [ 'actionLists' ], { [actionList.id]: { id: actionList.id, actionItemGroups: [ { actionItems: newActionItems } ] } }); } function shouldNamespaceEventParameter(eventTypeId, { basedOn }) { return eventTypeId === _sharedconstants.EventTypeConsts.SCROLLING_IN_VIEW && (basedOn === _sharedconstants.EventBasedOn.ELEMENT || basedOn == null) || eventTypeId === _sharedconstants.EventTypeConsts.MOUSE_MOVE && basedOn === _sharedconstants.EventBasedOn.ELEMENT; } function getNamespacedParameterId(eventStateKey, continuousParameterGroupId) { const namespacedParameterId = eventStateKey + COLON_DELIMITER + continuousParameterGroupId; return namespacedParameterId; } function shouldAllowMediaQuery(mediaQueries, mediaQueryKey) { // During design mode, current media query key does not exist if (mediaQueryKey == null) { return true; } return mediaQueries.indexOf(mediaQueryKey) !== -1; } function mediaQueriesEqual(listA, listB) { return (0, _shallowEqual.default)(listA && listA.sort(), listB && listB.sort()); } function stringifyTarget(target) { if (typeof target === 'string') { return target; } if (target.pluginElement && target.objectId) { return target.pluginElement + BAR_DELIMITER + target.objectId; } if (target.objectId) { return target.objectId; } const { id = '', selector = '', useEventTarget = '' } = target; return id + BAR_DELIMITER + selector + BAR_DELIMITER + useEventTarget; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC9sb2dpYy9JWDJWYW5pbGxhVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBDb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZCxcbiAgQWN0aW9uSXRlbVR5cGUsXG4gIEFjdGlvbklkLFxuICBGb250VmFyaWF0aW9uSXRlbUNvbmZpZ1R5cGUsXG4gIEZvbnRWYXJpYXRpb25BY3Rpb25Db25maWdUeXBlLFxuICBFdmVudFR5cGUsXG4gIEFjdGlvbkxpc3RUeXBlLFxuICBBY3Rpb25JdGVtc1R5cGUsXG4gIENvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cFR5cGUsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi90eXBlcy1jb3JlJztcblxuaW1wb3J0IGRlZmF1bHRUbyBmcm9tICdsb2Rhc2gvZGVmYXVsdFRvJztcbmltcG9ydCByZWR1Y2UgZnJvbSAnbG9kYXNoL3JlZHVjZSc7XG5pbXBvcnQgZmluZExhc3QgZnJvbSAnbG9kYXNoL2ZpbmRMYXN0JztcbmltcG9ydCB7c2V0SW4sIG1lcmdlSW59IGZyb20gJ3RpbW0nO1xuaW1wb3J0IHtcbiAgRXZlbnRUeXBlQ29uc3RzLFxuICBFdmVudEFwcGxpZXNUbyxcbiAgRXZlbnRCYXNlZE9uLFxuICBBY3Rpb25UeXBlQ29uc3RzLFxuICBJWDJFbmdpbmVDb25zdGFudHMsXG59IGZyb20gJ0BwYWNrYWdlcy9zeXN0ZW1zL2l4Mi9zaGFyZWQtY29uc3RhbnRzJztcbmltcG9ydCBzaGFsbG93RXF1YWwgZnJvbSAnLi9zaGFsbG93RXF1YWwnO1xuXG5pbXBvcnQge29wdGltaXplRmxvYXR9IGZyb20gJy4vSVgyRWFzaW5nVXRpbHMnO1xuXG4vLyBJbXBvcnRpbmcgZGlyZWN0bHkgdG8gYXZvaWQgaW1wb3J0aW5nIHRoZSBlbnRpcmUgc2hhcmVkLXV0aWxzIHBhY2thZ2UuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgd2ViZmxvdy9wYWNrYWdlLWJvdW5kYXJpZXNcbmltcG9ydCB7bm9ybWFsaXplQ29sb3J9IGZyb20gJy4uLy4uL3NoYXJlZC11dGlscy9ub3JtYWxpemVDb2xvcic7XG5pbXBvcnQge1xuICBpc1BsdWdpblR5cGUsXG4gIGdldFBsdWdpbkNvbmZpZyxcbiAgZ2V0UGx1Z2luT3JpZ2luLFxuICBnZXRQbHVnaW5EZXN0aW5hdGlvbixcbiAgcmVuZGVyUGx1Z2luLFxuICBjbGVhclBsdWdpbixcbn0gZnJvbSAnLi9JWDJWYW5pbGxhUGx1Z2lucyc7XG5cbmltcG9ydCB7XG4gIElTX0JST1dTRVJfRU5WLFxuICBGTEVYX1BSRUZJWEVELFxuICBUUkFOU0ZPUk1fUFJFRklYRUQsXG4gIFRSQU5TRk9STV9TVFlMRV9QUkVGSVhFRCxcbn0gZnJvbSAnLi9JWDJCcm93c2VyU3VwcG9ydCc7XG5pbXBvcnQge1xuICB0eXBlIElYMlJhd0RhdGEsXG4gIHR5cGUgcmF3RGF0YUltcG9ydGVkUGF5bG9hZCxcbn0gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvaXgyL2VuZ2luZSc7XG5pbXBvcnQge0JyZWFrcG9pbnRJRH0gZnJvbSAnQHBhY2thZ2VzL3N5c3RlbXMvc3R5bGUvdHlwZXMnO1xuaW1wb3J0IHtSZWZUeXBlc30gZnJvbSAnLi4vcmVkdWNlcnMvSVgyRWxlbWVudHNSZWR1Y2VyJztcblxuZXhwb3J0IHR5cGUgRWxlbWVudEFwaTxFbGVtZW50VHlwZSwgU2VsZWN0b3JUeXBlPiA9IHtcbiAgZ2V0U3R5bGU6IChhcmcxOiBFbGVtZW50VHlwZSwgYXJnMjogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIHNldFN0eWxlOiAoYXJnMTogRWxlbWVudFR5cGUsIGFyZzI6IHN0cmluZywgYXJnMzogc3RyaW5nKSA9PiB2b2lkO1xuICBnZXRQcm9wZXJ0eTogKGFyZzE6IEVsZW1lbnRUeXBlLCBhcmcyOiBzdHJpbmcpID0+IG51bGwgfCBzdHJpbmc7XG4gIGdldFZhbGlkRG9jdW1lbnQ6IChhcmcxOiBJWDJUYXJnZXQpID0+IGFueTtcbiAgZ2V0UXVlcnlTZWxlY3RvcjogKGFyZzE6IElYMlRhcmdldCkgPT4gbnVsbCB8IFNlbGVjdG9yVHlwZTtcbiAgLy8gU2hvdWxkIHRoZXNlIGBBcnJheWBzIGJlIGBOb2RlTGlzdGBzP1xuICBxdWVyeURvY3VtZW50OiAoXG4gICAgYXJnMTogU2VsZWN0b3JUeXBlLFxuICAgIGFyZzI/OiBTZWxlY3RvclR5cGUgfCBudWxsIHwgdW5kZWZpbmVkXG4gICkgPT4gRWxlbWVudFR5cGVbXTtcbiAgZ2V0Q2hpbGRFbGVtZW50czogKGFyZzE6IEVsZW1lbnRUeXBlW10pID0+IEVsZW1lbnRUeXBlW107XG4gIGdldFNpYmxpbmdFbGVtZW50czogKGFyZzE6IEVsZW1lbnRUeXBlW10pID0+IEVsZW1lbnRUeXBlW107XG5cbiAgbWF0Y2hTZWxlY3RvcjogKGFyZzE6IFNlbGVjdG9yVHlwZSkgPT4gKGFyZzE6IEVsZW1lbnRUeXBlKSA9PiBib29sZWFuO1xuICBlbGVtZW50Q29udGFpbnM6IChhcmcxOiBFbGVtZW50VHlwZSwgYXJnMjogRWxlbWVudFR5cGUpID0+IGJvb2xlYW47XG4gIGlzU2libGluZ05vZGU6IChhcmcxOiBFbGVtZW50VHlwZSwgYXJnMjogRWxlbWVudFR5cGUpID0+IGJvb2xlYW47XG4gIGdldENsb3Nlc3RFbGVtZW50OiAoXG4gICAgYXJnMTogRWxlbWVudFR5cGUsXG4gICAgYXJnMjogc3RyaW5nXG4gICkgPT4gRWxlbWVudFR5cGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBnZXRSZWZUeXBlOiAoYXJnMTogRWxlbWVudFR5cGUpID0+IFJlZlR5cGVzIHwgbnVsbDtcbn07XG5cbmNvbnN0IHtcbiAgQkFDS0dST1VORCxcbiAgVFJBTlNGT1JNLFxuICBUUkFOU0xBVEVfM0QsXG4gIFNDQUxFXzNELFxuICBST1RBVEVfWCxcbiAgUk9UQVRFX1ksXG4gIFJPVEFURV9aLFxuICBTS0VXLFxuICBQUkVTRVJWRV8zRCxcbiAgRkxFWCxcbiAgT1BBQ0lUWSxcbiAgRklMVEVSLFxuICBGT05UX1ZBUklBVElPTl9TRVRUSU5HUyxcbiAgV0lEVEgsXG4gIEhFSUdIVCxcbiAgQkFDS0dST1VORF9DT0xPUixcbiAgQk9SREVSX0NPTE9SLFxuICBDT0xPUixcbiAgQ0hJTERSRU4sXG4gIElNTUVESUFURV9DSElMRFJFTixcbiAgU0lCTElOR1MsXG4gIFBBUkVOVCxcbiAgRElTUExBWSxcbiAgV0lMTF9DSEFOR0UsXG4gIEFVVE8sXG4gIENPTU1BX0RFTElNSVRFUixcbiAgQ09MT05fREVMSU1JVEVSLFxuICBCQVJfREVMSU1JVEVSLFxuICBSRU5ERVJfVFJBTlNGT1JNLFxuICBSRU5ERVJfR0VORVJBTCxcbiAgUkVOREVSX1NUWUxFLFxuICBSRU5ERVJfUExVR0lOLFxufSA9IElYMkVuZ2luZUNvbnN0YW50cztcblxuY29uc3Qge1xuICBUUkFOU0ZPUk1fTU9WRSxcbiAgVFJBTlNGT1JNX1NDQUxFLFxuICBUUkFOU0ZPUk1fUk9UQVRFLFxuICBUUkFOU0ZPUk1fU0tFVyxcbiAgU1RZTEVfT1BBQ0lUWSxcbiAgU1RZTEVfRklMVEVSLFxuICBTVFlMRV9GT05UX1ZBUklBVElPTixcbiAgU1RZTEVfU0laRSxcbiAgU1RZTEVfQkFDS0dST1VORF9DT0xPUixcbiAgU1RZTEVfQk9SREVSLFxuICBTVFlMRV9URVhUX0NPTE9SLFxuICBHRU5FUkFMX0RJU1BMQVksXG4gIE9CSkVDVF9WQUxVRSxcbn0gPSBBY3Rpb25UeXBlQ29uc3RzO1xuXG5leHBvcnQge3NoYWxsb3dFcXVhbH07XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3YnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5jb25zdCB0cmltID0gKHYpID0+IHYudHJpbSgpO1xuXG5jb25zdCBjb2xvclN0eWxlUHJvcHMgPSBPYmplY3QuZnJlZXplKHtcbiAgW1NUWUxFX0JBQ0tHUk9VTkRfQ09MT1JdOiBCQUNLR1JPVU5EX0NPTE9SLFxuICBbU1RZTEVfQk9SREVSXTogQk9SREVSX0NPTE9SLFxuICBbU1RZTEVfVEVYVF9DT0xPUl06IENPTE9SLFxufSk7XG5cbmNvbnN0IHdpbGxDaGFuZ2VQcm9wcyA9IE9iamVjdC5mcmVlemUoe1xuICBbVFJBTlNGT1JNX1BSRUZJWEVEXTogVFJBTlNGT1JNLFxuICBbQkFDS0dST1VORF9DT0xPUl06IEJBQ0tHUk9VTkQsXG4gIFtPUEFDSVRZXTogT1BBQ0lUWSxcbiAgW0ZJTFRFUl06IEZJTFRFUixcbiAgW1dJRFRIXTogV0lEVEgsXG4gIFtIRUlHSFRdOiBIRUlHSFQsXG4gIFtGT05UX1ZBUklBVElPTl9TRVRUSU5HU106IEZPTlRfVkFSSUFUSU9OX1NFVFRJTkdTLFxufSk7XG5cbmNvbnN0IG9iamVjdENhY2hlID0gbmV3IE1hcCgpO1xuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJPYmplY3RDYWNoZSgpIHtcbiAgb2JqZWN0Q2FjaGUuY2xlYXIoKTtcbn1cblxubGV0IGluc3RhbmNlQ291bnQgPSAxO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluc3RhbmNlSWQoKSB7XG4gIHJldHVybiAnaScgKyBpbnN0YW5jZUNvdW50Kys7XG59XG5cbmxldCBlbGVtZW50Q291bnQgPSAxO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRJZChpeEVsZW1lbnRzOiBhbnksIHJlZjogYW55KSB7XG4gIC8vIFRPRE86IG9wdGltaXplIGVsZW1lbnQgbG9va3VwXG4gIGZvciAoY29uc3Qga2V5IGluIGl4RWxlbWVudHMpIHtcbiAgICBjb25zdCBpeEVsID0gaXhFbGVtZW50c1trZXldO1xuICAgIGlmIChpeEVsICYmIGl4RWwucmVmID09PSByZWYpIHtcbiAgICAgIHJldHVybiBpeEVsLmlkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJ2UnICsgZWxlbWVudENvdW50Kys7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWlmeVN0YXRlKHtcbiAgZXZlbnRzLFxuICBhY3Rpb25MaXN0cyxcbiAgc2l0ZSxcbn06IFBhcnRpYWw8SVgyUmF3RGF0YT4gPSB7fSk6IHJhd0RhdGFJbXBvcnRlZFBheWxvYWQge1xuICBjb25zdCBldmVudFR5cGVNYXAgPSByZWR1Y2UoXG4gICAgZXZlbnRzLFxuICAgIChyZXN1bHQsIGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7ZXZlbnRUeXBlSWR9ID0gZXZlbnQ7XG5cbiAgICAgIGlmICghcmVzdWx0W2V2ZW50VHlwZUlkXSkge1xuICAgICAgICByZXN1bHRbZXZlbnRUeXBlSWRdID0ge30gYXMge1trZXk6IHN0cmluZ106IEV2ZW50VHlwZX07XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdFtldmVudFR5cGVJZF1bZXZlbnQuaWRdID0gZXZlbnQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAge30gYXMgcmF3RGF0YUltcG9ydGVkUGF5bG9hZFsnaXhEYXRhJ11bJ2V2ZW50VHlwZU1hcCddXG4gICk7XG5cbiAgbGV0IG1lZGlhUXVlcmllcyA9IHNpdGUgJiYgc2l0ZS5tZWRpYVF1ZXJpZXM7XG4gIGxldCBtZWRpYVF1ZXJ5S2V5cyA9IFtdIGFzIEJyZWFrcG9pbnRJRFtdO1xuICBpZiAobWVkaWFRdWVyaWVzKSB7XG4gICAgbWVkaWFRdWVyeUtleXMgPSBtZWRpYVF1ZXJpZXMubWFwKChtcSkgPT4gbXEua2V5KTtcbiAgfSBlbHNlIHtcbiAgICBtZWRpYVF1ZXJpZXMgPSBbXTtcbiAgICBjb25zb2xlLndhcm4oYElYMiBtaXNzaW5nIG1lZGlhUXVlcmllcyBpbiBzaXRlIGRhdGFgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXhEYXRhOiB7XG4gICAgICBldmVudHMsXG4gICAgICBhY3Rpb25MaXN0cyxcbiAgICAgIGV2ZW50VHlwZU1hcCxcbiAgICAgIG1lZGlhUXVlcmllcyxcbiAgICAgIG1lZGlhUXVlcnlLZXlzLFxuICAgIH0sXG4gIH07XG59XG5cbmNvbnN0IHN0cmljdEVxdWFsID0gKGE6IGFueSwgYjogYW55KSA9PiBhID09PSBiO1xuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZVN0b3JlKHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnc3RvcmUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIHN0b3JlLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdzZWxlY3QnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIHNlbGVjdCxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnb25DaGFuZ2UnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIG9uQ2hhbmdlLFxuICBjb21wYXJhdG9yID0gc3RyaWN0RXF1YWwsXG59KSB7XG4gIGNvbnN0IHtnZXRTdGF0ZSwgc3Vic2NyaWJlfSA9IHN0b3JlO1xuICBjb25zdCB1bnN1YnNjcmliZSA9IHN1YnNjcmliZShoYW5kbGVDaGFuZ2UpO1xuICBsZXQgY3VycmVudFN0YXRlID0gc2VsZWN0KGdldFN0YXRlKCkpO1xuICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoKSB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gc2VsZWN0KGdldFN0YXRlKCkpO1xuICAgIGlmIChuZXh0U3RhdGUgPT0gbnVsbCkge1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFjb21wYXJhdG9yKG5leHRTdGF0ZSwgY3VycmVudFN0YXRlKSkge1xuICAgICAgY3VycmVudFN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgb25DaGFuZ2UoY3VycmVudFN0YXRlLCBzdG9yZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bnN1YnNjcmliZTtcbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAndGFyZ2V0JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZnVuY3Rpb24gbm9ybWFsaXplVGFyZ2V0KHRhcmdldCkge1xuICBjb25zdCB0eXBlID0gdHlwZW9mIHRhcmdldDtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHtpZDogdGFyZ2V0fTtcbiAgfSBlbHNlIGlmICh0YXJnZXQgIT0gbnVsbCAmJiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHtpZCwgb2JqZWN0SWQsIHNlbGVjdG9yLCBzZWxlY3Rvckd1aWRzLCBhcHBsaWVzVG8sIHVzZUV2ZW50VGFyZ2V0fSA9XG4gICAgICB0YXJnZXQ7XG4gICAgcmV0dXJuIHtpZCwgb2JqZWN0SWQsIHNlbGVjdG9yLCBzZWxlY3Rvckd1aWRzLCBhcHBsaWVzVG8sIHVzZUV2ZW50VGFyZ2V0fTtcbiAgfVxuICByZXR1cm4ge307XG59XG5cbnR5cGUgSVgyVGFyZ2V0ID0gYW55OyAvLyBzZXJpYWxpemVkIElYMkV2ZW50VGFyZ2V0RGF0YVxuXG50eXBlIEFmZmVjdGVkRWxlbWVudHNQcm9wczxFbGVtZW50VHlwZSwgU2VsZWN0b3JUeXBlPiA9IHtcbiAgY29uZmlnOiB7XG4gICAgdGFyZ2V0OiBJWDJUYXJnZXQ7XG4gICAgdGFyZ2V0cz86IEFycmF5PElYMlRhcmdldD47XG4gIH07XG4gIGV2ZW50PzogYW55OyAvLyBzZXJpYWxpemVkIElYMkV2ZW50VHlwZTtcbiAgZXZlbnRUYXJnZXQ/OiBFbGVtZW50VHlwZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGVsZW1lbnRSb290PzogRWxlbWVudFR5cGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBlbGVtZW50QXBpOiBFbGVtZW50QXBpPEVsZW1lbnRUeXBlLCBTZWxlY3RvclR5cGU+O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFmZmVjdGVkRWxlbWVudHM8RWxlbWVudFR5cGUsIFNlbGVjdG9yVHlwZT4oe1xuICBjb25maWcsXG4gIGV2ZW50LFxuICBldmVudFRhcmdldCxcbiAgZWxlbWVudFJvb3QsXG4gIGVsZW1lbnRBcGksXG59OiBBZmZlY3RlZEVsZW1lbnRzUHJvcHM8RWxlbWVudFR5cGUsIFNlbGVjdG9yVHlwZT4pOiBFbGVtZW50VHlwZVtdIHtcbiAgaWYgKCFlbGVtZW50QXBpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJWDIgbWlzc2luZyBlbGVtZW50QXBpJyk7XG4gIH1cblxuICBjb25zdCB7dGFyZ2V0c30gPSBjb25maWc7XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldHMpICYmIHRhcmdldHMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0YXJnZXRzLnJlZHVjZTxBcnJheTxhbnk+PihcbiAgICAgIChhY2N1bXVsYXRvciwgdGFyZ2V0KTogQXJyYXk8SFRNTEVsZW1lbnQ+ID0+XG4gICAgICAgIGFjY3VtdWxhdG9yLmNvbmNhdChcbiAgICAgICAgICBnZXRBZmZlY3RlZEVsZW1lbnRzKHtcbiAgICAgICAgICAgIGNvbmZpZzoge3RhcmdldH0sXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICAgICAgZWxlbWVudFJvb3QsXG4gICAgICAgICAgICBlbGVtZW50QXBpLFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICBbXVxuICAgICk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgZ2V0VmFsaWREb2N1bWVudCxcbiAgICBnZXRRdWVyeVNlbGVjdG9yLFxuICAgIHF1ZXJ5RG9jdW1lbnQsXG4gICAgZ2V0Q2hpbGRFbGVtZW50cyxcbiAgICBnZXRTaWJsaW5nRWxlbWVudHMsXG4gICAgbWF0Y2hTZWxlY3RvcixcbiAgICBlbGVtZW50Q29udGFpbnMsXG4gICAgaXNTaWJsaW5nTm9kZSxcbiAgfSA9IGVsZW1lbnRBcGk7XG5cbiAgY29uc3Qge3RhcmdldH0gPSBjb25maWc7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlkLFxuXG4gICAgb2JqZWN0SWQsXG5cbiAgICBzZWxlY3RvcixcblxuICAgIHNlbGVjdG9yR3VpZHMsXG5cbiAgICBhcHBsaWVzVG8sXG5cbiAgICB1c2VFdmVudFRhcmdldCxcbiAgfSA9IG5vcm1hbGl6ZVRhcmdldCh0YXJnZXQpO1xuXG4gIGlmIChvYmplY3RJZCkge1xuICAgIGNvbnN0IHJlZiA9IG9iamVjdENhY2hlLmhhcyhvYmplY3RJZClcbiAgICAgID8gb2JqZWN0Q2FjaGUuZ2V0KG9iamVjdElkKVxuICAgICAgOiBvYmplY3RDYWNoZS5zZXQob2JqZWN0SWQsIHt9KS5nZXQob2JqZWN0SWQpO1xuICAgIHJldHVybiBbcmVmXTtcbiAgfVxuXG4gIGlmIChhcHBsaWVzVG8gPT09IEV2ZW50QXBwbGllc1RvLlBBR0UpIHtcbiAgICBjb25zdCBkb2MgPSBnZXRWYWxpZERvY3VtZW50KGlkKTtcbiAgICByZXR1cm4gZG9jID8gW2RvY10gOiBbXTtcbiAgfVxuXG4gIGNvbnN0IG92ZXJyaWRlcyA9IGV2ZW50Py5hY3Rpb24/LmNvbmZpZz8uYWZmZWN0ZWRFbGVtZW50cyA/PyB7fTtcbiAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXNbaWQgfHwgc2VsZWN0b3JdIHx8IHt9O1xuICBjb25zdCB2YWxpZE92ZXJyaWRlID0gQm9vbGVhbihvdmVycmlkZS5pZCB8fCBvdmVycmlkZS5zZWxlY3Rvcik7XG5cbiAgbGV0IGxpbWl0QWZmZWN0ZWRFbGVtZW50cztcbiAgbGV0IGJhc2VTZWxlY3RvcjtcbiAgbGV0IGZpbmFsU2VsZWN0b3I7XG5cbiAgY29uc3QgZXZlbnRUYXJnZXRTZWxlY3RvciA9XG4gICAgZXZlbnQgJiYgZ2V0UXVlcnlTZWxlY3Rvcihub3JtYWxpemVUYXJnZXQoZXZlbnQudGFyZ2V0KSk7XG5cbiAgaWYgKHZhbGlkT3ZlcnJpZGUpIHtcbiAgICBsaW1pdEFmZmVjdGVkRWxlbWVudHMgPSBvdmVycmlkZS5saW1pdEFmZmVjdGVkRWxlbWVudHM7XG4gICAgYmFzZVNlbGVjdG9yID0gZXZlbnRUYXJnZXRTZWxlY3RvcjtcbiAgICBmaW5hbFNlbGVjdG9yID0gZ2V0UXVlcnlTZWxlY3RvcihvdmVycmlkZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gcGFzcyBpbiBzZWxlY3Rvckd1aWRzIGFzIHdlbGwgZm9yIHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICBiYXNlU2VsZWN0b3IgPSBmaW5hbFNlbGVjdG9yID0gZ2V0UXVlcnlTZWxlY3Rvcih7XG4gICAgICBpZCxcbiAgICAgIHNlbGVjdG9yLFxuICAgICAgc2VsZWN0b3JHdWlkcyxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChldmVudCAmJiB1c2VFdmVudFRhcmdldCkge1xuICAgIC8vIGV2ZW50VGFyZ2V0IGlzIG5vdCBkZWZpbmVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gYSBjbGVhciByZXF1ZXN0LCBzbyBmaW5kXG4gICAgLy8gYWxsIHRhcmdldCBlbGVtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50IGRhdGEsIGFuZCByZXR1cm4gYWZmZWN0ZWQgZWxlbWVudHMuXG4gICAgY29uc3QgZXZlbnRUYXJnZXRzID1cbiAgICAgIGV2ZW50VGFyZ2V0ICYmIChmaW5hbFNlbGVjdG9yIHx8IHVzZUV2ZW50VGFyZ2V0ID09PSB0cnVlKVxuICAgICAgICA/IFtldmVudFRhcmdldF1cbiAgICAgICAgOiBxdWVyeURvY3VtZW50KGV2ZW50VGFyZ2V0U2VsZWN0b3IpO1xuXG4gICAgaWYgKGZpbmFsU2VsZWN0b3IpIHtcbiAgICAgIGlmICh1c2VFdmVudFRhcmdldCA9PT0gUEFSRU5UKSB7XG4gICAgICAgIHJldHVybiBxdWVyeURvY3VtZW50KGZpbmFsU2VsZWN0b3IpLmZpbHRlcigocGFyZW50RWxlbWVudCkgPT5cbiAgICAgICAgICBldmVudFRhcmdldHMuc29tZSgodGFyZ2V0RWxlbWVudCkgPT5cbiAgICAgICAgICAgIGVsZW1lbnRDb250YWlucyhwYXJlbnRFbGVtZW50LCB0YXJnZXRFbGVtZW50KVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VFdmVudFRhcmdldCA9PT0gQ0hJTERSRU4pIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5RG9jdW1lbnQoZmluYWxTZWxlY3RvcikuZmlsdGVyKChjaGlsZEVsZW1lbnQpID0+XG4gICAgICAgICAgZXZlbnRUYXJnZXRzLnNvbWUoKHRhcmdldEVsZW1lbnQpID0+XG4gICAgICAgICAgICBlbGVtZW50Q29udGFpbnModGFyZ2V0RWxlbWVudCwgY2hpbGRFbGVtZW50KVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VFdmVudFRhcmdldCA9PT0gU0lCTElOR1MpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5RG9jdW1lbnQoZmluYWxTZWxlY3RvcikuZmlsdGVyKChzaWJsaW5nRWxlbWVudCkgPT5cbiAgICAgICAgICBldmVudFRhcmdldHMuc29tZSgodGFyZ2V0RWxlbWVudCkgPT5cbiAgICAgICAgICAgIGlzU2libGluZ05vZGUodGFyZ2V0RWxlbWVudCwgc2libGluZ0VsZW1lbnQpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXZlbnRUYXJnZXRzO1xuICB9XG5cbiAgaWYgKGJhc2VTZWxlY3RvciA9PSBudWxsIHx8IGZpbmFsU2VsZWN0b3IgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmIChJU19CUk9XU0VSX0VOViAmJiBlbGVtZW50Um9vdCkge1xuICAgIHJldHVybiBxdWVyeURvY3VtZW50KGZpbmFsU2VsZWN0b3IpLmZpbHRlcigoZWxlbWVudCkgPT5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBlbGVtZW50Um9vdCBpcyBIVE1MRWxlbWVudCBpbiBicm93c2VyXG4gICAgICBlbGVtZW50Um9vdC5jb250YWlucyhlbGVtZW50KVxuICAgICk7XG4gIH1cblxuICBpZiAobGltaXRBZmZlY3RlZEVsZW1lbnRzID09PSBDSElMRFJFTikge1xuICAgIHJldHVybiBxdWVyeURvY3VtZW50KGJhc2VTZWxlY3RvciwgZmluYWxTZWxlY3Rvcik7XG4gIH0gZWxzZSBpZiAobGltaXRBZmZlY3RlZEVsZW1lbnRzID09PSBJTU1FRElBVEVfQ0hJTERSRU4pIHtcbiAgICByZXR1cm4gZ2V0Q2hpbGRFbGVtZW50cyhxdWVyeURvY3VtZW50KGJhc2VTZWxlY3RvcikpLmZpbHRlcihcbiAgICAgIG1hdGNoU2VsZWN0b3IoZmluYWxTZWxlY3RvcilcbiAgICApO1xuICB9IGVsc2UgaWYgKGxpbWl0QWZmZWN0ZWRFbGVtZW50cyA9PT0gU0lCTElOR1MpIHtcbiAgICByZXR1cm4gZ2V0U2libGluZ0VsZW1lbnRzKHF1ZXJ5RG9jdW1lbnQoYmFzZVNlbGVjdG9yKSkuZmlsdGVyKFxuICAgICAgbWF0Y2hTZWxlY3RvcihmaW5hbFNlbGVjdG9yKVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHF1ZXJ5RG9jdW1lbnQoZmluYWxTZWxlY3Rvcik7XG4gIH1cbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZWxlbWVudCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2FjdGlvbkl0ZW0nIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZSh7ZWxlbWVudCwgYWN0aW9uSXRlbX0pIHtcbiAgaWYgKCFJU19CUk9XU0VSX0VOVikge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCB7YWN0aW9uVHlwZUlkfSA9IGFjdGlvbkl0ZW07XG4gIHN3aXRjaCAoYWN0aW9uVHlwZUlkKSB7XG4gICAgY2FzZSBTVFlMRV9TSVpFOlxuICAgIGNhc2UgU1RZTEVfQkFDS0dST1VORF9DT0xPUjpcbiAgICBjYXNlIFNUWUxFX0JPUkRFUjpcbiAgICBjYXNlIFNUWUxFX1RFWFRfQ09MT1I6XG4gICAgY2FzZSBHRU5FUkFMX0RJU1BMQVk6XG4gICAgICByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5jb25zdCBweFZhbHVlUmVnZXggPSAvcHgvO1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdmaWx0ZXJzJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuY29uc3QgZ2V0RmlsdGVyRGVmYXVsdHMgPSAoYWN0aW9uU3RhdGU6IGFueSwgZmlsdGVycykgPT5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAncmVzdWx0JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciAnZmlsdGVyJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICBmaWx0ZXJzLnJlZHVjZSgocmVzdWx0LCBmaWx0ZXIpID0+IHtcbiAgICBpZiAocmVzdWx0W2ZpbHRlci50eXBlXSA9PSBudWxsKSB7XG4gICAgICByZXN1bHRbZmlsdGVyLnR5cGVdID1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnYW55JyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ1JlYWRvbmx5PHsgYmx1cjogMDsgJ2h1ZS1yb3RhdGUnOiAwOyBpbnZlcnQ6IDA7IGdyYXlzY2FsZTogMDsgc2F0dXJhdGU6IDEwMDsgc2VwaWE6IDA7IGNvbnRyYXN0OiAxMDA7IGJyaWdodG5lc3M6IDEwMDsgfT4nLlxuICAgICAgICBmaWx0ZXJEZWZhdWx0c1tmaWx0ZXIudHlwZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgYWN0aW9uU3RhdGUgfHwge30pO1xuXG5jb25zdCBnZXRGb250VmFyaWF0aW9uRGVmYXVsdHMgPSAoXG4gIGFjdGlvblN0YXRlOiBhbnksXG4gIGZvbnRWYXJpYXRpb25zOiBBcnJheTxGb250VmFyaWF0aW9uSXRlbUNvbmZpZ1R5cGU+XG4pID0+XG4gIGZvbnRWYXJpYXRpb25zLnJlZHVjZSgocmVzdWx0LCBmb250VmFyaWF0aW9uKSA9PiB7XG4gICAgaWYgKHJlc3VsdFtmb250VmFyaWF0aW9uLnR5cGVdID09IG51bGwpIHtcbiAgICAgIHJlc3VsdFtmb250VmFyaWF0aW9uLnR5cGVdID1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnc3RyaW5nJyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ1JlYWRvbmx5PHsgd2dodDogMDsgb3BzejogMDsgd2R0aDogMDsgc2xudDogMDsgfT4nLlxuICAgICAgICBmb250VmFyaWF0aW9uRGVmYXVsdHNbZm9udFZhcmlhdGlvbi50eXBlXSB8fFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzM5IC0gUHJvcGVydHkgJ2RlZmF1bHRWYWx1ZScgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAnRm9udFZhcmlhdGlvbkl0ZW1Db25maWdUeXBlJy5cbiAgICAgICAgZm9udFZhcmlhdGlvbi5kZWZhdWx0VmFsdWUgfHxcbiAgICAgICAgMDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCBhY3Rpb25TdGF0ZSB8fCB7fSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnN0YW5jZU9yaWdpbihcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG5cbiAgcmVmU3RhdGUgPSB7fSxcbiAgY29tcHV0ZWRTdHlsZTpcbiAgICB8IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICAgICAgfVxuICAgIHwgbnVsbFxuICAgIHwgdW5kZWZpbmVkID0ge30sXG4gIGFjdGlvbkl0ZW06IEFjdGlvbkl0ZW1UeXBlLFxuICBlbGVtZW50QXBpOiBFbGVtZW50QXBpPEhUTUxFbGVtZW50LCBzdHJpbmc+XG4pIHtcbiAgY29uc3Qge2dldFN0eWxlfSA9IGVsZW1lbnRBcGk7XG4gIC8vIEZsb3cgSGFjazogUGFzc2luZyBhY3Rpb25UeXBlSWQgdG8gaXNQbHVnaW5UeXBlIGFuZCB0aGVuIHRyeWluZ1xuICAvLyB0byBkbyB0eXBlIHJlZmluZW1lbnQgdXNpbmcgdGhlIHNhbWUgdmFyaWFibGUgdmlhIGEgc3dpdGNoIHN0YXRlbWVudFxuICAvLyBicmVha3MgZG93bi4gVGhpcyBpcyBpcyBhIHdvcmthcm91bmQgdG8gZW5zdXJlIHdlIGNhbiB1c2UgdHlwZSByZWZpbmVtZW50LlxuICBjb25zdCB7YWN0aW9uVHlwZUlkfSA9IGFjdGlvbkl0ZW07XG5cbiAgaWYgKGlzUGx1Z2luVHlwZShhY3Rpb25UeXBlSWQpKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjM0NSAtIEFyZ3VtZW50IG9mIHR5cGUgJ1wiVFJBTlNGT1JNX01PVkVcIiB8IFwiVFJBTlNGT1JNX1NDQUxFXCIgfCBcIlRSQU5TRk9STV9ST1RBVEVcIiB8IFwiVFJBTlNGT1JNX1NLRVdcIiB8IFwiU1RZTEVfT1BBQ0lUWVwiIHwgXCJTVFlMRV9TSVpFXCIgfCBcIlNUWUxFX0ZJTFRFUlwiIHwgXCJTVFlMRV9GT05UX1ZBUklBVElPTlwiIHwgXCJTVFlMRV9CQUNLR1JPVU5EX0NPTE9SXCIgfCBcIlNUWUxFX0JPUkRFUlwiIHwgXCJTVFlMRV9URVhUX0NPTE9SXCIgfCBcIlBMVUdJTl9MT1RUSUVcIiB8IFwiR0VORVJBTF9ESVNQTEFZXCInIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdQbHVnaW5UeXBlJy4gfCBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ1wiVFJBTlNGT1JNX01PVkVcIiB8IFwiVFJBTlNGT1JNX1NDQUxFXCIgfCBcIlRSQU5TRk9STV9ST1RBVEVcIiB8IFwiVFJBTlNGT1JNX1NLRVdcIiB8IFwiU1RZTEVfT1BBQ0lUWVwiIHwgXCJTVFlMRV9TSVpFXCIgfCBcIlNUWUxFX0ZJTFRFUlwiIHwgXCJTVFlMRV9GT05UX1ZBUklBVElPTlwiIHwgXCJTVFlMRV9CQUNLR1JPVU5EX0NPTE9SXCIgfCBcIlNUWUxFX0JPUkRFUlwiIHwgXCJTVFlMRV9URVhUX0NPTE9SXCIgfCBcIlBMVUdJTl9MT1RUSUVcIiB8IFwiR0VORVJBTF9ESVNQTEFZXCInIGNhbid0IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAne30nLlxuICAgIHJldHVybiBnZXRQbHVnaW5PcmlnaW4oYWN0aW9uVHlwZUlkKShyZWZTdGF0ZVthY3Rpb25UeXBlSWRdLCBhY3Rpb25JdGVtKTtcbiAgfVxuXG4gIHN3aXRjaCAoYWN0aW9uSXRlbS5hY3Rpb25UeXBlSWQpIHtcbiAgICBjYXNlIFRSQU5TRk9STV9NT1ZFOlxuICAgIGNhc2UgVFJBTlNGT1JNX1NDQUxFOlxuICAgIGNhc2UgVFJBTlNGT1JNX1JPVEFURTpcbiAgICBjYXNlIFRSQU5TRk9STV9TS0VXOiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDUzIC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgZXhwcmVzc2lvbiBvZiB0eXBlICdcIlRSQU5TRk9STV9NT1ZFXCIgfCBcIlRSQU5TRk9STV9TQ0FMRVwiIHwgXCJUUkFOU0ZPUk1fUk9UQVRFXCIgfCBcIlRSQU5TRk9STV9TS0VXXCInIGNhbid0IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAne30nLlxuICAgICAgICByZWZTdGF0ZVthY3Rpb25JdGVtLmFjdGlvblR5cGVJZF0gfHxcbiAgICAgICAgdHJhbnNmb3JtRGVmYXVsdHNbYWN0aW9uSXRlbS5hY3Rpb25UeXBlSWRdXG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIFNUWUxFX0ZJTFRFUjpcbiAgICAgIHJldHVybiBnZXRGaWx0ZXJEZWZhdWx0cyhcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnXCJTVFlMRV9GSUxURVJcIicgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICd7fScuXG4gICAgICAgIHJlZlN0YXRlW2FjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkXSxcbiAgICAgICAgYWN0aW9uSXRlbS5jb25maWcuZmlsdGVyc1xuICAgICAgKTtcbiAgICBjYXNlIFNUWUxFX0ZPTlRfVkFSSUFUSU9OOlxuICAgICAgcmV0dXJuIGdldEZvbnRWYXJpYXRpb25EZWZhdWx0cyhcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnXCJTVFlMRV9GT05UX1ZBUklBVElPTlwiJyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ3t9Jy5cbiAgICAgICAgcmVmU3RhdGVbYWN0aW9uSXRlbS5hY3Rpb25UeXBlSWRdLFxuICAgICAgICBhY3Rpb25JdGVtLmNvbmZpZy5mb250VmFyaWF0aW9uc1xuICAgICAgKTtcbiAgICBjYXNlIFNUWUxFX09QQUNJVFk6XG4gICAgICByZXR1cm4ge3ZhbHVlOiBkZWZhdWx0VG8ocGFyc2VGbG9hdChnZXRTdHlsZShlbGVtZW50LCBPUEFDSVRZKSksIDEuMCl9O1xuICAgIGNhc2UgU1RZTEVfU0laRToge1xuICAgICAgY29uc3QgaW5saW5lV2lkdGggPSBnZXRTdHlsZShlbGVtZW50LCBXSURUSCk7XG4gICAgICBjb25zdCBpbmxpbmVIZWlnaHQgPSBnZXRTdHlsZShlbGVtZW50LCBIRUlHSFQpO1xuICAgICAgbGV0IHdpZHRoVmFsdWU7XG4gICAgICBsZXQgaGVpZ2h0VmFsdWU7XG4gICAgICAvLyBXaGVuIGRlc3RpbmF0aW9uIHVuaXQgaXMgJ0FVVE8nLCBlbnN1cmUgb3JpZ2luIHZhbHVlcyBhcmUgaW4gcHhcbiAgICAgIGlmIChhY3Rpb25JdGVtLmNvbmZpZy53aWR0aFVuaXQgPT09IEFVVE8pIHtcbiAgICAgICAgd2lkdGhWYWx1ZSA9IHB4VmFsdWVSZWdleC50ZXN0KGlubGluZVdpZHRoKVxuICAgICAgICAgID8gcGFyc2VGbG9hdChpbmxpbmVXaWR0aClcbiAgICAgICAgICA6IC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzE4MDQ3IC0gJ2NvbXB1dGVkU3R5bGUnIGlzIHBvc3NpYmx5ICdudWxsJy5cbiAgICAgICAgICAgIHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS53aWR0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aWR0aFZhbHVlID0gZGVmYXVsdFRvKFxuICAgICAgICAgIHBhcnNlRmxvYXQoaW5saW5lV2lkdGgpLFxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzE4MDQ3IC0gJ2NvbXB1dGVkU3R5bGUnIGlzIHBvc3NpYmx5ICdudWxsJy5cbiAgICAgICAgICBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUud2lkdGgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uSXRlbS5jb25maWcuaGVpZ2h0VW5pdCA9PT0gQVVUTykge1xuICAgICAgICBoZWlnaHRWYWx1ZSA9IHB4VmFsdWVSZWdleC50ZXN0KGlubGluZUhlaWdodClcbiAgICAgICAgICA/IHBhcnNlRmxvYXQoaW5saW5lSGVpZ2h0KVxuICAgICAgICAgIDogLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMTgwNDcgLSAnY29tcHV0ZWRTdHlsZScgaXMgcG9zc2libHkgJ251bGwnLlxuICAgICAgICAgICAgcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmhlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWlnaHRWYWx1ZSA9IGRlZmF1bHRUbyhcbiAgICAgICAgICBwYXJzZUZsb2F0KGlubGluZUhlaWdodCksXG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMTgwNDcgLSAnY29tcHV0ZWRTdHlsZScgaXMgcG9zc2libHkgJ251bGwnLlxuICAgICAgICAgIHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5oZWlnaHQpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aFZhbHVlLFxuICAgICAgICBoZWlnaHRWYWx1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgU1RZTEVfQkFDS0dST1VORF9DT0xPUjpcbiAgICBjYXNlIFNUWUxFX0JPUkRFUjpcbiAgICBjYXNlIFNUWUxFX1RFWFRfQ09MT1I6XG4gICAgICByZXR1cm4gcGFyc2VDb2xvcih7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGFjdGlvblR5cGVJZDogYWN0aW9uSXRlbS5hY3Rpb25UeXBlSWQsXG4gICAgICAgIGNvbXB1dGVkU3R5bGUsXG4gICAgICAgIGdldFN0eWxlLFxuICAgICAgfSk7XG4gICAgY2FzZSBHRU5FUkFMX0RJU1BMQVk6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMxODA0NyAtICdjb21wdXRlZFN0eWxlJyBpcyBwb3NzaWJseSAnbnVsbCcuXG4gICAgICAgIHZhbHVlOiBkZWZhdWx0VG8oZ2V0U3R5bGUoZWxlbWVudCwgRElTUExBWSksIGNvbXB1dGVkU3R5bGUuZGlzcGxheSksXG4gICAgICB9O1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBgT0JKRUNUX1ZBTFVFYCBpcyBub3QgYW4gZXhwZWN0ZWQgYGFjdGlvblR5cGVJZGBcbiAgICBjYXNlIE9CSkVDVF9WQUxVRTpcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwNTMgLSBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUgYmVjYXVzZSBleHByZXNzaW9uIG9mIHR5cGUgJ2FueScgY2FuJ3QgYmUgdXNlZCB0byBpbmRleCB0eXBlICd7fScuIHwgVFMyMzM5IC0gUHJvcGVydHkgJ2FjdGlvblR5cGVJZCcgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAnbmV2ZXInLlxuICAgICAgcmV0dXJuIHJlZlN0YXRlW2FjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkXSB8fCB7dmFsdWU6IDB9O1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIEFzIGZhciBhcyB0aGUgdHlwZSBzeXN0ZW0gY2FuIHRlbGwsIHdlJ3JlIG1pc3NpbmcgYSBoYW5kbGVyIGZvclxuICAgICAgLy8gUExVR0lOX0xPVFRJRS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGlzIGlzIGFjdHVhbGx5IGhhbmRsZWQgYnkgYGlzUGx1Z2luVHlwZWAgYWJvdmUuXG4gICAgICAvL1xuICAgICAgLyo6OiAoYWN0aW9uSXRlbTogZW1wdHkpOyAqL1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdyZXN1bHQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDA2IC0gUGFyYW1ldGVyICdmaWx0ZXInIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5jb25zdCByZWR1Y2VGaWx0ZXJzID0gKHJlc3VsdCwgZmlsdGVyKSA9PiB7XG4gIGlmIChmaWx0ZXIpIHtcbiAgICByZXN1bHRbZmlsdGVyLnR5cGVdID0gZmlsdGVyLnZhbHVlIHx8IDA7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IHJlZHVjZUZvbnRWYXJpYXRpb25zID0gKFxuICByZXN1bHQ6IFJlY29yZDxhbnksIGFueT4sXG4gIGZvbnRWYXJpYXRpb246XG4gICAgfCBGb250VmFyaWF0aW9uSXRlbUNvbmZpZ1R5cGVcbiAgICB8IHtcbiAgICAgICAgaWQ6IG51bGwgfCBzdHJpbmc7XG4gICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgdmFsdWU6IG51bWJlcjtcbiAgICAgIH1cbikgPT4ge1xuICBpZiAoZm9udFZhcmlhdGlvbikge1xuICAgIHJlc3VsdFtmb250VmFyaWF0aW9uLnR5cGVdID0gZm9udFZhcmlhdGlvbi52YWx1ZSB8fCAwO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SXRlbUNvbmZpZ0J5S2V5ID0gKFxuICBhY3Rpb25UeXBlSWQ6IGFueSxcbiAga2V5OiBhbnksXG4gIGNvbmZpZzogYW55XG4pID0+IHtcbiAgaWYgKGlzUGx1Z2luVHlwZShhY3Rpb25UeXBlSWQpKSB7XG4gICAgcmV0dXJuIGdldFBsdWdpbkNvbmZpZyhhY3Rpb25UeXBlSWQpKGNvbmZpZywga2V5KTtcbiAgfVxuXG4gIHN3aXRjaCAoYWN0aW9uVHlwZUlkKSB7XG4gICAgY2FzZSBTVFlMRV9GSUxURVI6IHtcbiAgICAgIGNvbnN0IGZpbHRlciA9IGZpbmRMYXN0KGNvbmZpZy5maWx0ZXJzLCAoe3R5cGV9KSA9PiB0eXBlID09PSBrZXkpO1xuICAgICAgcmV0dXJuIGZpbHRlciA/IGZpbHRlci52YWx1ZSA6IDA7XG4gICAgfVxuICAgIGNhc2UgU1RZTEVfRk9OVF9WQVJJQVRJT046IHtcbiAgICAgIGNvbnN0IGZvbnRWYXJpYXRpb24gPSBmaW5kTGFzdChcbiAgICAgICAgY29uZmlnLmZvbnRWYXJpYXRpb25zLFxuICAgICAgICAoe3R5cGV9KSA9PiB0eXBlID09PSBrZXlcbiAgICAgICk7XG4gICAgICByZXR1cm4gZm9udFZhcmlhdGlvbiA/IGZvbnRWYXJpYXRpb24udmFsdWUgOiAwO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbmZpZ1trZXldO1xuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVzdGluYXRpb25WYWx1ZXM8RWxlbWVudFR5cGUsIFNlbGVjdG9yVHlwZT4oe1xuICBlbGVtZW50LFxuICBhY3Rpb25JdGVtLFxuICBlbGVtZW50QXBpLFxufToge1xuICBlbGVtZW50OiBFbGVtZW50VHlwZTtcbiAgYWN0aW9uSXRlbTogQWN0aW9uSXRlbVR5cGU7XG4gIGVsZW1lbnRBcGk6IEVsZW1lbnRBcGk8RWxlbWVudFR5cGUsIFNlbGVjdG9yVHlwZT47XG59KSB7XG4gIGlmIChpc1BsdWdpblR5cGUoYWN0aW9uSXRlbS5hY3Rpb25UeXBlSWQpKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjM0NSAtIEFyZ3VtZW50IG9mIHR5cGUgJ1wiVFJBTlNGT1JNX01PVkVcIiB8IFwiVFJBTlNGT1JNX1NDQUxFXCIgfCBcIlRSQU5TRk9STV9ST1RBVEVcIiB8IFwiVFJBTlNGT1JNX1NLRVdcIiB8IFwiU1RZTEVfT1BBQ0lUWVwiIHwgXCJTVFlMRV9TSVpFXCIgfCBcIlNUWUxFX0ZJTFRFUlwiIHwgXCJTVFlMRV9GT05UX1ZBUklBVElPTlwiIHwgXCJTVFlMRV9CQUNLR1JPVU5EX0NPTE9SXCIgfCBcIlNUWUxFX0JPUkRFUlwiIHwgXCJTVFlMRV9URVhUX0NPTE9SXCIgfCBcIlBMVUdJTl9MT1RUSUVcIiB8IFwiR0VORVJBTF9ESVNQTEFZXCInIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdQbHVnaW5UeXBlJy5cbiAgICByZXR1cm4gZ2V0UGx1Z2luRGVzdGluYXRpb24oYWN0aW9uSXRlbS5hY3Rpb25UeXBlSWQpKGFjdGlvbkl0ZW0uY29uZmlnKTtcbiAgfVxuXG4gIHN3aXRjaCAoYWN0aW9uSXRlbS5hY3Rpb25UeXBlSWQpIHtcbiAgICBjYXNlIFRSQU5TRk9STV9NT1ZFOlxuICAgIGNhc2UgVFJBTlNGT1JNX1NDQUxFOlxuICAgIGNhc2UgVFJBTlNGT1JNX1JPVEFURTpcbiAgICBjYXNlIFRSQU5TRk9STV9TS0VXOiB7XG4gICAgICBjb25zdCB7eFZhbHVlLCB5VmFsdWUsIHpWYWx1ZX0gPSBhY3Rpb25JdGVtLmNvbmZpZztcbiAgICAgIHJldHVybiB7eFZhbHVlLCB5VmFsdWUsIHpWYWx1ZX07XG4gICAgfVxuICAgIGNhc2UgU1RZTEVfU0laRToge1xuICAgICAgY29uc3Qge2dldFN0eWxlLCBzZXRTdHlsZSwgZ2V0UHJvcGVydHl9ID0gZWxlbWVudEFwaTtcbiAgICAgIGNvbnN0IHt3aWR0aFVuaXQsIGhlaWdodFVuaXR9ID0gYWN0aW9uSXRlbS5jb25maWc7XG4gICAgICBsZXQge3dpZHRoVmFsdWUsIGhlaWdodFZhbHVlfSA9IGFjdGlvbkl0ZW0uY29uZmlnO1xuICAgICAgaWYgKCFJU19CUk9XU0VSX0VOVikge1xuICAgICAgICByZXR1cm4ge3dpZHRoVmFsdWUsIGhlaWdodFZhbHVlfTtcbiAgICAgIH1cbiAgICAgIGlmICh3aWR0aFVuaXQgPT09IEFVVE8pIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IGdldFN0eWxlKGVsZW1lbnQsIFdJRFRIKTtcbiAgICAgICAgc2V0U3R5bGUoZWxlbWVudCwgV0lEVEgsICcnKTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjMyMiAtIFR5cGUgJ3N0cmluZyB8IG51bGwnIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHR5cGUgJ251bWJlciB8IHVuZGVmaW5lZCcuXG4gICAgICAgIHdpZHRoVmFsdWUgPSBnZXRQcm9wZXJ0eShlbGVtZW50LCAnb2Zmc2V0V2lkdGgnKTtcbiAgICAgICAgc2V0U3R5bGUoZWxlbWVudCwgV0lEVEgsIHRlbXApO1xuICAgICAgfVxuICAgICAgaWYgKGhlaWdodFVuaXQgPT09IEFVVE8pIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IGdldFN0eWxlKGVsZW1lbnQsIEhFSUdIVCk7XG4gICAgICAgIHNldFN0eWxlKGVsZW1lbnQsIEhFSUdIVCwgJycpO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzIyIC0gVHlwZSAnc3RyaW5nIHwgbnVsbCcgaXMgbm90IGFzc2lnbmFibGUgdG8gdHlwZSAnbnVtYmVyIHwgdW5kZWZpbmVkJy5cbiAgICAgICAgaGVpZ2h0VmFsdWUgPSBnZXRQcm9wZXJ0eShlbGVtZW50LCAnb2Zmc2V0SGVpZ2h0Jyk7XG4gICAgICAgIHNldFN0eWxlKGVsZW1lbnQsIEhFSUdIVCwgdGVtcCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge3dpZHRoVmFsdWUsIGhlaWdodFZhbHVlfTtcbiAgICB9XG4gICAgY2FzZSBTVFlMRV9CQUNLR1JPVU5EX0NPTE9SOlxuICAgIGNhc2UgU1RZTEVfQk9SREVSOlxuICAgIGNhc2UgU1RZTEVfVEVYVF9DT0xPUjoge1xuICAgICAgY29uc3Qge3JWYWx1ZSwgZ1ZhbHVlLCBiVmFsdWUsIGFWYWx1ZSwgZ2xvYmFsU3dhdGNoSWR9ID1cbiAgICAgICAgYWN0aW9uSXRlbS5jb25maWc7XG5cbiAgICAgIGlmIChnbG9iYWxTd2F0Y2hJZCAmJiBnbG9iYWxTd2F0Y2hJZC5zdGFydHNXaXRoKCctLScpKSB7XG4gICAgICAgIGNvbnN0IHtnZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldFN0eWxlKGVsZW1lbnQsIGdsb2JhbFN3YXRjaElkKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplQ29sb3IodmFsdWUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJWYWx1ZTogbm9ybWFsaXplZFZhbHVlLnJlZCxcbiAgICAgICAgICBnVmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZS5ncmVlbixcbiAgICAgICAgICBiVmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZS5ibHVlLFxuICAgICAgICAgIGFWYWx1ZTogbm9ybWFsaXplZFZhbHVlLmFscGhhLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge3JWYWx1ZSwgZ1ZhbHVlLCBiVmFsdWUsIGFWYWx1ZX07XG4gICAgfVxuICAgIGNhc2UgU1RZTEVfRklMVEVSOiB7XG4gICAgICByZXR1cm4gYWN0aW9uSXRlbS5jb25maWcuZmlsdGVycy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgYW55Pj4oXG4gICAgICAgIHJlZHVjZUZpbHRlcnMsXG4gICAgICAgIHt9XG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIFNUWUxFX0ZPTlRfVkFSSUFUSU9OOiB7XG4gICAgICByZXR1cm4gYWN0aW9uSXRlbS5jb25maWcuZm9udFZhcmlhdGlvbnMucmVkdWNlPFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICAgICAgICByZWR1Y2VGb250VmFyaWF0aW9ucyxcbiAgICAgICAge31cbiAgICAgICk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnN0IHt2YWx1ZX0gPSBhY3Rpb25JdGVtLmNvbmZpZztcbiAgICAgIHJldHVybiB7dmFsdWV9O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVuZGVyVHlwZShhY3Rpb25UeXBlSWQ6IGFueSkge1xuICBpZiAoL15UUkFOU0ZPUk1fLy50ZXN0KGFjdGlvblR5cGVJZCkpIHtcbiAgICByZXR1cm4gUkVOREVSX1RSQU5TRk9STTtcbiAgfVxuICBpZiAoL15TVFlMRV8vLnRlc3QoYWN0aW9uVHlwZUlkKSkge1xuICAgIHJldHVybiBSRU5ERVJfU1RZTEU7XG4gIH1cbiAgaWYgKC9eR0VORVJBTF8vLnRlc3QoYWN0aW9uVHlwZUlkKSkge1xuICAgIHJldHVybiBSRU5ERVJfR0VORVJBTDtcbiAgfVxuICBpZiAoL15QTFVHSU5fLy50ZXN0KGFjdGlvblR5cGVJZCkpIHtcbiAgICByZXR1cm4gUkVOREVSX1BMVUdJTjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVQcm9wKHJlbmRlclR5cGU6IGFueSwgYWN0aW9uVHlwZUlkOiBhbnkpIHtcbiAgcmV0dXJuIHJlbmRlclR5cGUgPT09IFJFTkRFUl9TVFlMRVxuICAgID8gYWN0aW9uVHlwZUlkLnJlcGxhY2UoJ1NUWUxFXycsICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVySFRNTEVsZW1lbnQ8RWxlbWVudFR5cGUsIFNlbGVjdG9yVHlwZT4oXG4gIGVsZW1lbnQ6IEVsZW1lbnRUeXBlLFxuXG4gIHJlZlN0YXRlOiBhbnksXG5cbiAgYWN0aW9uU3RhdGU6IGFueSxcblxuICBldmVudElkOiBhbnksXG5cbiAgYWN0aW9uSXRlbTogYW55LFxuXG4gIHN0eWxlUHJvcDogYW55LFxuXG4gIGVsZW1lbnRBcGk6IEVsZW1lbnRBcGk8RWxlbWVudFR5cGUsIFNlbGVjdG9yVHlwZT4sXG5cbiAgcmVuZGVyVHlwZTogYW55LFxuXG4gIHBsdWdpbkluc3RhbmNlOiBhbnlcbikge1xuICBzd2l0Y2ggKHJlbmRlclR5cGUpIHtcbiAgICBjYXNlIFJFTkRFUl9UUkFOU0ZPUk06IHtcbiAgICAgIHJldHVybiByZW5kZXJUcmFuc2Zvcm0oXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIHJlZlN0YXRlLFxuICAgICAgICBhY3Rpb25TdGF0ZSxcbiAgICAgICAgYWN0aW9uSXRlbSxcbiAgICAgICAgZWxlbWVudEFwaVxuICAgICAgKTtcbiAgICB9XG4gICAgY2FzZSBSRU5ERVJfU1RZTEU6IHtcbiAgICAgIHJldHVybiByZW5kZXJTdHlsZShcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgcmVmU3RhdGUsXG4gICAgICAgIGFjdGlvblN0YXRlLFxuICAgICAgICBhY3Rpb25JdGVtLFxuICAgICAgICBzdHlsZVByb3AsXG4gICAgICAgIGVsZW1lbnRBcGlcbiAgICAgICk7XG4gICAgfVxuICAgIGNhc2UgUkVOREVSX0dFTkVSQUw6IHtcbiAgICAgIHJldHVybiByZW5kZXJHZW5lcmFsKGVsZW1lbnQsIGFjdGlvbkl0ZW0sIGVsZW1lbnRBcGkpO1xuICAgIH1cbiAgICBjYXNlIFJFTkRFUl9QTFVHSU46IHtcbiAgICAgIGNvbnN0IHthY3Rpb25UeXBlSWR9ID0gYWN0aW9uSXRlbTtcbiAgICAgIGlmIChpc1BsdWdpblR5cGUoYWN0aW9uVHlwZUlkKSkge1xuICAgICAgICByZXR1cm4gcmVuZGVyUGx1Z2luKGFjdGlvblR5cGVJZCkocGx1Z2luSW5zdGFuY2UsIHJlZlN0YXRlLCBhY3Rpb25JdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgdHJhbnNmb3JtRGVmYXVsdHMgPSB7XG4gIFtUUkFOU0ZPUk1fTU9WRV06IE9iamVjdC5mcmVlemUoe1xuICAgIHhWYWx1ZTogMCxcbiAgICB5VmFsdWU6IDAsXG4gICAgelZhbHVlOiAwLFxuICB9KSxcbiAgW1RSQU5TRk9STV9TQ0FMRV06IE9iamVjdC5mcmVlemUoe1xuICAgIHhWYWx1ZTogMSxcbiAgICB5VmFsdWU6IDEsXG4gICAgelZhbHVlOiAxLFxuICB9KSxcbiAgW1RSQU5TRk9STV9ST1RBVEVdOiBPYmplY3QuZnJlZXplKHtcbiAgICB4VmFsdWU6IDAsXG4gICAgeVZhbHVlOiAwLFxuICAgIHpWYWx1ZTogMCxcbiAgfSksXG4gIFtUUkFOU0ZPUk1fU0tFV106IE9iamVjdC5mcmVlemUoe1xuICAgIHhWYWx1ZTogMCxcbiAgICB5VmFsdWU6IDAsXG4gIH0pLFxufSBhcyBjb25zdDtcblxuY29uc3QgZmlsdGVyRGVmYXVsdHMgPSBPYmplY3QuZnJlZXplKHtcbiAgYmx1cjogMCxcbiAgJ2h1ZS1yb3RhdGUnOiAwLFxuICBpbnZlcnQ6IDAsXG4gIGdyYXlzY2FsZTogMCxcbiAgc2F0dXJhdGU6IDEwMCxcbiAgc2VwaWE6IDAsXG4gIGNvbnRyYXN0OiAxMDAsXG4gIGJyaWdodG5lc3M6IDEwMCxcbn0pO1xuXG5jb25zdCBmb250VmFyaWF0aW9uRGVmYXVsdHMgPSBPYmplY3QuZnJlZXplKHtcbiAgd2dodDogMCxcbiAgb3BzejogMCxcbiAgd2R0aDogMCxcbiAgc2xudDogMCxcbn0pO1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdmaWx0ZXJUeXBlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciAnYWN0aW9uSXRlbUNvbmZpZycgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmNvbnN0IGdldEZpbHRlclVuaXQgPSAoZmlsdGVyVHlwZSwgYWN0aW9uSXRlbUNvbmZpZykgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBmaW5kTGFzdChcbiAgICBhY3Rpb25JdGVtQ29uZmlnLmZpbHRlcnMsXG4gICAgKHt0eXBlfSkgPT4gdHlwZSA9PT0gZmlsdGVyVHlwZVxuICApO1xuXG4gIGlmIChmaWx0ZXIgJiYgZmlsdGVyLnVuaXQpIHtcbiAgICByZXR1cm4gZmlsdGVyLnVuaXQ7XG4gIH1cblxuICBzd2l0Y2ggKGZpbHRlclR5cGUpIHtcbiAgICBjYXNlICdibHVyJzpcbiAgICAgIHJldHVybiAncHgnO1xuICAgIGNhc2UgJ2h1ZS1yb3RhdGUnOlxuICAgICAgcmV0dXJuICdkZWcnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyUnO1xuICB9XG59O1xuXG5jb25zdCB0cmFuc2Zvcm1LZXlzID0gT2JqZWN0LmtleXModHJhbnNmb3JtRGVmYXVsdHMpO1xuXG5mdW5jdGlvbiByZW5kZXJUcmFuc2Zvcm08RWxlbWVudFR5cGUsIFNlbGVjdG9yVHlwZT4oXG4gIGVsZW1lbnQ6IEVsZW1lbnRUeXBlLFxuICByZWZTdGF0ZTogYW55LFxuICBhY3Rpb25TdGF0ZTogYW55LFxuICBhY3Rpb25JdGVtOiBhbnksXG4gIGVsZW1lbnRBcGk6IEVsZW1lbnRBcGk8RWxlbWVudFR5cGUsIFNlbGVjdG9yVHlwZT5cbikge1xuICBjb25zdCBuZXdUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1LZXlzXG4gICAgLm1hcCgoYWN0aW9uVHlwZUlkKSA9PiB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDUzIC0gRWxlbWVudCBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlIGJlY2F1c2UgZXhwcmVzc2lvbiBvZiB0eXBlICdzdHJpbmcnIGNhbid0IGJlIHVzZWQgdG8gaW5kZXggdHlwZSAneyByZWFkb25seSBUUkFOU0ZPUk1fTU9WRTogUmVhZG9ubHk8eyB4VmFsdWU6IDA7IHlWYWx1ZTogMDsgelZhbHVlOiAwOyB9PjsgcmVhZG9ubHkgVFJBTlNGT1JNX1NDQUxFOiBSZWFkb25seTx7IHhWYWx1ZTogMTsgeVZhbHVlOiAxOyB6VmFsdWU6IDE7IH0+OyByZWFkb25seSBUUkFOU0ZPUk1fUk9UQVRFOiBSZWFkb25seTx7IHhWYWx1ZTogMDsgeVZhbHVlOiAwOyB6VmFsdWU6IDA7IH0+OyByZWFkb25seSBUUkFOU0ZPUk1fU0tFVzogUmVhZG9ubHk8Li4uPjsgfScuXG4gICAgICBjb25zdCBkZWZhdWx0cyA9IHRyYW5zZm9ybURlZmF1bHRzW2FjdGlvblR5cGVJZF07XG4gICAgICBjb25zdCB7XG4gICAgICAgIHhWYWx1ZSA9IGRlZmF1bHRzLnhWYWx1ZSxcbiAgICAgICAgeVZhbHVlID0gZGVmYXVsdHMueVZhbHVlLFxuXG4gICAgICAgIHpWYWx1ZSA9IGRlZmF1bHRzLnpWYWx1ZSxcbiAgICAgICAgeFVuaXQgPSAnJyxcbiAgICAgICAgeVVuaXQgPSAnJyxcbiAgICAgICAgelVuaXQgPSAnJyxcbiAgICAgIH0gPSByZWZTdGF0ZVthY3Rpb25UeXBlSWRdIHx8IHt9O1xuICAgICAgc3dpdGNoIChhY3Rpb25UeXBlSWQpIHtcbiAgICAgICAgY2FzZSBUUkFOU0ZPUk1fTU9WRTpcbiAgICAgICAgICByZXR1cm4gYCR7VFJBTlNMQVRFXzNEfSgke3hWYWx1ZX0ke3hVbml0fSwgJHt5VmFsdWV9JHt5VW5pdH0sICR7elZhbHVlfSR7elVuaXR9KWA7XG4gICAgICAgIGNhc2UgVFJBTlNGT1JNX1NDQUxFOlxuICAgICAgICAgIHJldHVybiBgJHtTQ0FMRV8zRH0oJHt4VmFsdWV9JHt4VW5pdH0sICR7eVZhbHVlfSR7eVVuaXR9LCAke3pWYWx1ZX0ke3pVbml0fSlgO1xuICAgICAgICBjYXNlIFRSQU5TRk9STV9ST1RBVEU6XG4gICAgICAgICAgcmV0dXJuIGAke1JPVEFURV9YfSgke3hWYWx1ZX0ke3hVbml0fSkgJHtST1RBVEVfWX0oJHt5VmFsdWV9JHt5VW5pdH0pICR7Uk9UQVRFX1p9KCR7elZhbHVlfSR7elVuaXR9KWA7XG4gICAgICAgIGNhc2UgVFJBTlNGT1JNX1NLRVc6XG4gICAgICAgICAgcmV0dXJuIGAke1NLRVd9KCR7eFZhbHVlfSR7eFVuaXR9LCAke3lWYWx1ZX0ke3lVbml0fSlgO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9KVxuICAgIC5qb2luKCcgJyk7XG5cbiAgY29uc3Qge3NldFN0eWxlfSA9IGVsZW1lbnRBcGk7XG4gIGFkZFdpbGxDaGFuZ2UoZWxlbWVudCwgVFJBTlNGT1JNX1BSRUZJWEVELCBlbGVtZW50QXBpKTtcbiAgc2V0U3R5bGUoZWxlbWVudCwgVFJBTlNGT1JNX1BSRUZJWEVELCBuZXdUcmFuc2Zvcm0pO1xuXG4gIC8vIFNldCB0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkXG4gIGlmIChoYXNEZWZpbmVkM2RUcmFuc2Zvcm0oYWN0aW9uSXRlbSwgYWN0aW9uU3RhdGUpKSB7XG4gICAgc2V0U3R5bGUoZWxlbWVudCwgVFJBTlNGT1JNX1NUWUxFX1BSRUZJWEVELCBQUkVTRVJWRV8zRCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyRmlsdGVyPEVsZW1lbnRUeXBlLCBTZWxlY3RvclR5cGU+KFxuICBlbGVtZW50OiBFbGVtZW50VHlwZSxcbiAgYWN0aW9uU3RhdGU6IGFueSxcbiAgYWN0aW9uSXRlbUNvbmZpZzogYW55LFxuICBlbGVtZW50QXBpOiBFbGVtZW50QXBpPEVsZW1lbnRUeXBlLCBTZWxlY3RvclR5cGU+XG4pIHtcbiAgY29uc3QgZmlsdGVyVmFsdWUgPSByZWR1Y2UoXG4gICAgYWN0aW9uU3RhdGUsXG4gICAgKHJlc3VsdCwgdmFsdWUsIHR5cGUpID0+XG4gICAgICBgJHtyZXN1bHR9ICR7dHlwZX0oJHt2YWx1ZX0ke2dldEZpbHRlclVuaXQodHlwZSwgYWN0aW9uSXRlbUNvbmZpZyl9KWAsXG4gICAgJydcbiAgKTtcblxuICBjb25zdCB7c2V0U3R5bGV9ID0gZWxlbWVudEFwaTtcbiAgYWRkV2lsbENoYW5nZShlbGVtZW50LCBGSUxURVIsIGVsZW1lbnRBcGkpO1xuICBzZXRTdHlsZShlbGVtZW50LCBGSUxURVIsIGZpbHRlclZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyRm9udFZhcmlhdGlvbjxFbGVtZW50VHlwZSwgU2VsZWN0b3JUeXBlPihcbiAgZWxlbWVudDogRWxlbWVudFR5cGUsXG4gIGFjdGlvblN0YXRlOiBhbnksXG4gIGFjdGlvbkl0ZW1Db25maWc6IEZvbnRWYXJpYXRpb25BY3Rpb25Db25maWdUeXBlLFxuICBlbGVtZW50QXBpOiBFbGVtZW50QXBpPEVsZW1lbnRUeXBlLCBTZWxlY3RvclR5cGU+XG4pIHtcbiAgY29uc3QgZm9udFZhcmlhdGlvblZhbHVlID0gcmVkdWNlKFxuICAgIGFjdGlvblN0YXRlLFxuICAgIChyZXN1bHQsIHZhbHVlLCB0eXBlKSA9PiB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAnc3RyaW5nJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInLlxuICAgICAgcmVzdWx0LnB1c2goYFwiJHt0eXBlfVwiICR7dmFsdWV9YCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgW11cbiAgKS5qb2luKCcsICcpO1xuXG4gIGNvbnN0IHtzZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICBhZGRXaWxsQ2hhbmdlKGVsZW1lbnQsIEZPTlRfVkFSSUFUSU9OX1NFVFRJTkdTLCBlbGVtZW50QXBpKTtcbiAgc2V0U3R5bGUoZWxlbWVudCwgRk9OVF9WQVJJQVRJT05fU0VUVElOR1MsIGZvbnRWYXJpYXRpb25WYWx1ZSk7XG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2FjdGlvblR5cGVJZCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ3hWYWx1ZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ3lWYWx1ZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ3pWYWx1ZScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmZ1bmN0aW9uIGhhc0RlZmluZWQzZFRyYW5zZm9ybSh7YWN0aW9uVHlwZUlkfSwge3hWYWx1ZSwgeVZhbHVlLCB6VmFsdWV9KSB7XG4gIC8vIFRSQU5TTEFURV9aXG4gIHJldHVybiAoXG4gICAgKGFjdGlvblR5cGVJZCA9PT0gVFJBTlNGT1JNX01PVkUgJiYgelZhbHVlICE9PSB1bmRlZmluZWQpIHx8XG4gICAgLy8gU0NBTEVfWlxuICAgIChhY3Rpb25UeXBlSWQgPT09IFRSQU5TRk9STV9TQ0FMRSAmJiB6VmFsdWUgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAvLyBST1RBVEVfWCBvciBST1RBVEVfWVxuICAgIChhY3Rpb25UeXBlSWQgPT09IFRSQU5TRk9STV9ST1RBVEUgJiZcbiAgICAgICh4VmFsdWUgIT09IHVuZGVmaW5lZCB8fCB5VmFsdWUgIT09IHVuZGVmaW5lZCkpXG4gICk7XG59XG5cbmNvbnN0IHBhcmFtQ2FwdHVyZSA9ICdcXFxcKChbXildKylcXFxcKSc7XG5jb25zdCByZ2JWYWxpZFJlZ2V4ID0gL15yZ2IvO1xuY29uc3QgcmdiTWF0Y2hSZWdleCA9IFJlZ0V4cChgcmdiYT8ke3BhcmFtQ2FwdHVyZX1gKTtcblxuZnVuY3Rpb24gZ2V0Rmlyc3RNYXRjaChyZWdleDogUmVnRXhwLCB2YWx1ZTogc3RyaW5nKSB7XG4gIGNvbnN0IG1hdGNoID0gcmVnZXguZXhlYyh2YWx1ZSk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2VsZW1lbnQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdhY3Rpb25UeXBlSWQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdjb21wdXRlZFN0eWxlJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZ2V0U3R5bGUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5mdW5jdGlvbiBwYXJzZUNvbG9yKHtlbGVtZW50LCBhY3Rpb25UeXBlSWQsIGNvbXB1dGVkU3R5bGUsIGdldFN0eWxlfSk6IHtcbiAgclZhbHVlOiBudW1iZXI7XG4gIGdWYWx1ZTogbnVtYmVyO1xuICBiVmFsdWU6IG51bWJlcjtcbiAgYVZhbHVlOiBudW1iZXI7XG59IHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzA1MyAtIEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZSBiZWNhdXNlIGV4cHJlc3Npb24gb2YgdHlwZSAnYW55JyBjYW4ndCBiZSB1c2VkIHRvIGluZGV4IHR5cGUgJ1JlYWRvbmx5PHsgU1RZTEVfQkFDS0dST1VORF9DT0xPUjogXCJiYWNrZ3JvdW5kQ29sb3JcIjsgU1RZTEVfQk9SREVSOiBcImJvcmRlckNvbG9yXCI7IFNUWUxFX1RFWFRfQ09MT1I6IFwiY29sb3JcIjsgfT4nLlxuICBjb25zdCBwcm9wID0gY29sb3JTdHlsZVByb3BzW2FjdGlvblR5cGVJZF07XG4gIGNvbnN0IGlubGluZVZhbHVlID0gZ2V0U3R5bGUoZWxlbWVudCwgcHJvcCk7XG4gIGNvbnN0IHZhbHVlID0gcmdiVmFsaWRSZWdleC50ZXN0KGlubGluZVZhbHVlKVxuICAgID8gaW5saW5lVmFsdWVcbiAgICA6IGNvbXB1dGVkU3R5bGVbcHJvcF07XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1MzIgLSBPYmplY3QgaXMgcG9zc2libHkgJ3VuZGVmaW5lZCcuXG4gIGNvbnN0IG1hdGNoZXMgPSBnZXRGaXJzdE1hdGNoKHJnYk1hdGNoUmVnZXgsIHZhbHVlKS5zcGxpdChDT01NQV9ERUxJTUlURVIpO1xuICByZXR1cm4ge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdzdHJpbmcgfCB1bmRlZmluZWQnIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdzdHJpbmcnLlxuICAgIHJWYWx1ZTogZGVmYXVsdFRvKHBhcnNlSW50KG1hdGNoZXNbMF0sIDEwKSwgMjU1KSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAnc3RyaW5nIHwgdW5kZWZpbmVkJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnc3RyaW5nJy5cbiAgICBnVmFsdWU6IGRlZmF1bHRUbyhwYXJzZUludChtYXRjaGVzWzFdLCAxMCksIDI1NSksXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjM0NSAtIEFyZ3VtZW50IG9mIHR5cGUgJ3N0cmluZyB8IHVuZGVmaW5lZCcgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ3N0cmluZycuXG4gICAgYlZhbHVlOiBkZWZhdWx0VG8ocGFyc2VJbnQobWF0Y2hlc1syXSwgMTApLCAyNTUpLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzNDUgLSBBcmd1bWVudCBvZiB0eXBlICdzdHJpbmcgfCB1bmRlZmluZWQnIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdzdHJpbmcnLlxuICAgIGFWYWx1ZTogZGVmYXVsdFRvKHBhcnNlRmxvYXQobWF0Y2hlc1szXSksIDEpLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHlsZTxFbGVtZW50VHlwZSwgU2VsZWN0b3JUeXBlPihcbiAgZWxlbWVudDogRWxlbWVudFR5cGUsXG4gIHJlZlN0YXRlOiBhbnksXG4gIGFjdGlvblN0YXRlOiBhbnksXG4gIGFjdGlvbkl0ZW06IEFjdGlvbkl0ZW1UeXBlLFxuICBzdHlsZVByb3A6IGFueSxcbiAgZWxlbWVudEFwaTogRWxlbWVudEFwaTxFbGVtZW50VHlwZSwgU2VsZWN0b3JUeXBlPlxuKSB7XG4gIGNvbnN0IHtzZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICBzd2l0Y2ggKGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkKSB7XG4gICAgY2FzZSBTVFlMRV9TSVpFOiB7XG4gICAgICBsZXQge3dpZHRoVW5pdCA9ICcnLCBoZWlnaHRVbml0ID0gJyd9ID0gYWN0aW9uSXRlbS5jb25maWc7XG4gICAgICBjb25zdCB7d2lkdGhWYWx1ZSwgaGVpZ2h0VmFsdWV9ID0gYWN0aW9uU3RhdGU7XG4gICAgICBpZiAod2lkdGhWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh3aWR0aFVuaXQgPT09IEFVVE8pIHtcbiAgICAgICAgICB3aWR0aFVuaXQgPSAncHgnO1xuICAgICAgICB9XG4gICAgICAgIGFkZFdpbGxDaGFuZ2UoZWxlbWVudCwgV0lEVEgsIGVsZW1lbnRBcGkpO1xuICAgICAgICBzZXRTdHlsZShlbGVtZW50LCBXSURUSCwgd2lkdGhWYWx1ZSArIHdpZHRoVW5pdCk7XG4gICAgICB9XG4gICAgICBpZiAoaGVpZ2h0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaGVpZ2h0VW5pdCA9PT0gQVVUTykge1xuICAgICAgICAgIGhlaWdodFVuaXQgPSAncHgnO1xuICAgICAgICB9XG4gICAgICAgIGFkZFdpbGxDaGFuZ2UoZWxlbWVudCwgSEVJR0hULCBlbGVtZW50QXBpKTtcbiAgICAgICAgc2V0U3R5bGUoZWxlbWVudCwgSEVJR0hULCBoZWlnaHRWYWx1ZSArIGhlaWdodFVuaXQpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgU1RZTEVfRklMVEVSOiB7XG4gICAgICByZW5kZXJGaWx0ZXIoZWxlbWVudCwgYWN0aW9uU3RhdGUsIGFjdGlvbkl0ZW0uY29uZmlnLCBlbGVtZW50QXBpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFNUWUxFX0ZPTlRfVkFSSUFUSU9OOiB7XG4gICAgICByZW5kZXJGb250VmFyaWF0aW9uKGVsZW1lbnQsIGFjdGlvblN0YXRlLCBhY3Rpb25JdGVtLmNvbmZpZywgZWxlbWVudEFwaSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBTVFlMRV9CQUNLR1JPVU5EX0NPTE9SOlxuICAgIGNhc2UgU1RZTEVfQk9SREVSOlxuICAgIGNhc2UgU1RZTEVfVEVYVF9DT0xPUjoge1xuICAgICAgY29uc3QgcHJvcCA9IGNvbG9yU3R5bGVQcm9wc1thY3Rpb25JdGVtLmFjdGlvblR5cGVJZF07XG5cbiAgICAgIGNvbnN0IHJWYWx1ZSA9IE1hdGgucm91bmQoYWN0aW9uU3RhdGUuclZhbHVlKTtcbiAgICAgIGNvbnN0IGdWYWx1ZSA9IE1hdGgucm91bmQoYWN0aW9uU3RhdGUuZ1ZhbHVlKTtcbiAgICAgIGNvbnN0IGJWYWx1ZSA9IE1hdGgucm91bmQoYWN0aW9uU3RhdGUuYlZhbHVlKTtcbiAgICAgIGNvbnN0IGFWYWx1ZSA9IGFjdGlvblN0YXRlLmFWYWx1ZTtcblxuICAgICAgYWRkV2lsbENoYW5nZShlbGVtZW50LCBwcm9wLCBlbGVtZW50QXBpKTtcblxuICAgICAgc2V0U3R5bGUoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGFWYWx1ZSA+PSAxXG4gICAgICAgICAgPyBgcmdiKCR7clZhbHVlfSwke2dWYWx1ZX0sJHtiVmFsdWV9KWBcbiAgICAgICAgICA6IGByZ2JhKCR7clZhbHVlfSwke2dWYWx1ZX0sJHtiVmFsdWV9LCR7YVZhbHVlfSlgXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzIzMzkgLSBQcm9wZXJ0eSAndW5pdCcgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAneyBkZWxheTogbnVtYmVyOyBlYXNpbmc6IElYMkVhc2luZ1R5cGU7IGR1cmF0aW9uOiBudW1iZXI7IHRhcmdldDogQWN0aW9uSXRlbVRhcmdldFR5cGU7IHhWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkOyB5VmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZDsgelZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQ7IHhVbml0OiBcIiVcIiB8IC4uLiA0IG1vcmUgLi4uIHwgXCJWV1wiOyB5VW5pdDogXCIlXCIgfCAuLi4gNCBtb3JlIC4uLiB8IFwiVldcIjsgelVuaXQ6IFwiJVwiIHwgLi4uIDQgbW9yZSAuLi4gfCBcIlZXXCI7IH0gfCAuLi4gNSBtb3JlIC4uLiB8IHsgLi4uOyB9Jy5cbiAgICAgIGNvbnN0IHt1bml0ID0gJyd9ID0gYWN0aW9uSXRlbS5jb25maWc7XG4gICAgICBhZGRXaWxsQ2hhbmdlKGVsZW1lbnQsIHN0eWxlUHJvcCwgZWxlbWVudEFwaSk7XG4gICAgICBzZXRTdHlsZShlbGVtZW50LCBzdHlsZVByb3AsIGFjdGlvblN0YXRlLnZhbHVlICsgdW5pdCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyR2VuZXJhbDxFbGVtZW50VHlwZSwgU2VsZWN0b3JUeXBlPihcbiAgZWxlbWVudDogRWxlbWVudFR5cGUsXG4gIGFjdGlvbkl0ZW06IGFueSxcbiAgZWxlbWVudEFwaTogRWxlbWVudEFwaTxFbGVtZW50VHlwZSwgU2VsZWN0b3JUeXBlPlxuKSB7XG4gIGNvbnN0IHtzZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICBzd2l0Y2ggKGFjdGlvbkl0ZW0uYWN0aW9uVHlwZUlkKSB7XG4gICAgY2FzZSBHRU5FUkFMX0RJU1BMQVk6IHtcbiAgICAgIGNvbnN0IHt2YWx1ZX0gPSBhY3Rpb25JdGVtLmNvbmZpZztcbiAgICAgIGlmICh2YWx1ZSA9PT0gRkxFWCAmJiBJU19CUk9XU0VSX0VOVikge1xuICAgICAgICBzZXRTdHlsZShlbGVtZW50LCBESVNQTEFZLCBGTEVYX1BSRUZJWEVEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFN0eWxlKGVsZW1lbnQsIERJU1BMQVksIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkV2lsbENoYW5nZTxFbGVtZW50VHlwZSwgU2VsZWN0b3JUeXBlPihcbiAgZWxlbWVudDogRWxlbWVudFR5cGUsXG4gIHByb3A6IHN0cmluZyxcbiAgZWxlbWVudEFwaTogRWxlbWVudEFwaTxFbGVtZW50VHlwZSwgU2VsZWN0b3JUeXBlPlxuKSB7XG4gIGlmICghSVNfQlJPV1NFUl9FTlYpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdmFsaWRQcm9wID0gd2lsbENoYW5nZVByb3BzW3Byb3BdO1xuICBpZiAoIXZhbGlkUHJvcCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB7Z2V0U3R5bGUsIHNldFN0eWxlfSA9IGVsZW1lbnRBcGk7XG4gIGNvbnN0IHZhbHVlID0gZ2V0U3R5bGUoZWxlbWVudCwgV0lMTF9DSEFOR0UpO1xuICBpZiAoIXZhbHVlKSB7XG4gICAgc2V0U3R5bGUoZWxlbWVudCwgV0lMTF9DSEFOR0UsIHZhbGlkUHJvcCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHZhbHVlcyA9IHZhbHVlLnNwbGl0KENPTU1BX0RFTElNSVRFUikubWFwKHRyaW0pO1xuICBpZiAodmFsdWVzLmluZGV4T2YodmFsaWRQcm9wKSA9PT0gLTEpIHtcbiAgICBzZXRTdHlsZShcbiAgICAgIGVsZW1lbnQsXG4gICAgICBXSUxMX0NIQU5HRSxcbiAgICAgIHZhbHVlcy5jb25jYXQodmFsaWRQcm9wKS5qb2luKENPTU1BX0RFTElNSVRFUilcbiAgICApO1xuICB9XG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ3Byb3AnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG5mdW5jdGlvbiByZW1vdmVXaWxsQ2hhbmdlKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwcm9wLCBlbGVtZW50QXBpOiBhbnkpIHtcbiAgaWYgKCFJU19CUk9XU0VSX0VOVikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB2YWxpZFByb3AgPSB3aWxsQ2hhbmdlUHJvcHNbcHJvcF07XG4gIGlmICghdmFsaWRQcm9wKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHtnZXRTdHlsZSwgc2V0U3R5bGV9ID0gZWxlbWVudEFwaTtcbiAgY29uc3QgdmFsdWUgPSBnZXRTdHlsZShlbGVtZW50LCBXSUxMX0NIQU5HRSk7XG4gIGlmICghdmFsdWUgfHwgdmFsdWUuaW5kZXhPZih2YWxpZFByb3ApID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuICBzZXRTdHlsZShcbiAgICBlbGVtZW50LFxuICAgIFdJTExfQ0hBTkdFLFxuICAgIHZhbHVlXG4gICAgICAuc3BsaXQoQ09NTUFfREVMSU1JVEVSKVxuICAgICAgLm1hcCh0cmltKVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAndicgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbiAgICAgIC5maWx0ZXIoKHYpID0+IHYgIT09IHZhbGlkUHJvcClcbiAgICAgIC5qb2luKENPTU1BX0RFTElNSVRFUilcbiAgKTtcbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnc3RvcmUnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdlbGVtZW50QXBpJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQWxsU3R5bGVzKHtzdG9yZSwgZWxlbWVudEFwaX0pIHtcbiAgY29uc3Qge2l4RGF0YX0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBjb25zdCB7ZXZlbnRzID0ge30sIGFjdGlvbkxpc3RzID0ge319ID0gaXhEYXRhO1xuICBPYmplY3Qua2V5cyhldmVudHMpLmZvckVhY2goKGV2ZW50SWQpID0+IHtcbiAgICBjb25zdCBldmVudCA9IGV2ZW50c1tldmVudElkXTtcbiAgICBjb25zdCB7Y29uZmlnfSA9IGV2ZW50LmFjdGlvbjtcbiAgICBjb25zdCB7YWN0aW9uTGlzdElkfSA9IGNvbmZpZztcbiAgICBjb25zdCBhY3Rpb25MaXN0ID0gYWN0aW9uTGlzdHNbYWN0aW9uTGlzdElkXTtcbiAgICBpZiAoYWN0aW9uTGlzdCkge1xuICAgICAgY2xlYXJBY3Rpb25MaXN0U3R5bGVzKHthY3Rpb25MaXN0LCBldmVudCwgZWxlbWVudEFwaX0pO1xuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5rZXlzKGFjdGlvbkxpc3RzKS5mb3JFYWNoKChhY3Rpb25MaXN0SWQpID0+IHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzQ1IC0gQXJndW1lbnQgb2YgdHlwZSAneyBhY3Rpb25MaXN0OiBhbnk7IGVsZW1lbnRBcGk6IGFueTsgfScgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ3sgYWN0aW9uTGlzdD86IHt9IHwgdW5kZWZpbmVkOyBldmVudDogYW55OyBlbGVtZW50QXBpOiBhbnk7IH0nLlxuICAgIGNsZWFyQWN0aW9uTGlzdFN0eWxlcyh7YWN0aW9uTGlzdDogYWN0aW9uTGlzdHNbYWN0aW9uTGlzdElkXSwgZWxlbWVudEFwaX0pO1xuICB9KTtcbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZXZlbnQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuIHwgVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdlbGVtZW50QXBpJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZnVuY3Rpb24gY2xlYXJBY3Rpb25MaXN0U3R5bGVzKHthY3Rpb25MaXN0ID0ge30sIGV2ZW50LCBlbGVtZW50QXBpfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMyMzM5IC0gUHJvcGVydHkgJ2FjdGlvbkl0ZW1Hcm91cHMnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ3t9Jy4gfCBUUzIzMzkgLSBQcm9wZXJ0eSAnY29udGludW91c1BhcmFtZXRlckdyb3VwcycgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAne30nLlxuICBjb25zdCB7YWN0aW9uSXRlbUdyb3VwcywgY29udGludW91c1BhcmFtZXRlckdyb3Vwc30gPSBhY3Rpb25MaXN0O1xuICBhY3Rpb25JdGVtR3JvdXBzICYmXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAnYWN0aW9uR3JvdXAnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gICAgYWN0aW9uSXRlbUdyb3Vwcy5mb3JFYWNoKChhY3Rpb25Hcm91cCkgPT4ge1xuICAgICAgY2xlYXJBY3Rpb25Hcm91cFN0eWxlcyh7YWN0aW9uR3JvdXAsIGV2ZW50LCBlbGVtZW50QXBpfSk7XG4gICAgfSk7XG4gIGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cHMgJiZcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdwYXJhbUdyb3VwJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgIGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cHMuZm9yRWFjaCgocGFyYW1Hcm91cCkgPT4ge1xuICAgICAgY29uc3Qge2NvbnRpbnVvdXNBY3Rpb25Hcm91cHN9ID0gcGFyYW1Hcm91cDtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2FjdGlvbkdyb3VwJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgICAgY29udGludW91c0FjdGlvbkdyb3Vwcy5mb3JFYWNoKChhY3Rpb25Hcm91cCkgPT4ge1xuICAgICAgICBjbGVhckFjdGlvbkdyb3VwU3R5bGVzKHthY3Rpb25Hcm91cCwgZXZlbnQsIGVsZW1lbnRBcGl9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xufVxuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdhY3Rpb25Hcm91cCcgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS4gfCBUUzcwMzEgLSBCaW5kaW5nIGVsZW1lbnQgJ2V2ZW50JyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAzMSAtIEJpbmRpbmcgZWxlbWVudCAnZWxlbWVudEFwaScgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZS5cbmZ1bmN0aW9uIGNsZWFyQWN0aW9uR3JvdXBTdHlsZXMoe2FjdGlvbkdyb3VwLCBldmVudCwgZWxlbWVudEFwaX0pIHtcbiAgY29uc3Qge2FjdGlvbkl0ZW1zfSA9IGFjdGlvbkdyb3VwO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdhY3Rpb25JdGVtJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICBhY3Rpb25JdGVtcy5mb3JFYWNoKChhY3Rpb25JdGVtKSA9PiB7XG4gICAgY29uc3Qge2FjdGlvblR5cGVJZCwgY29uZmlnfSA9IGFjdGlvbkl0ZW07XG4gICAgbGV0IGNsZWFyRWxlbWVudDtcblxuICAgIGlmIChpc1BsdWdpblR5cGUoYWN0aW9uVHlwZUlkKSkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTNzAwNiAtIFBhcmFtZXRlciAncmVmJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuICAgICAgY2xlYXJFbGVtZW50ID0gKHJlZikgPT4gY2xlYXJQbHVnaW4oYWN0aW9uVHlwZUlkKShyZWYsIGFjdGlvbkl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGVhckVsZW1lbnQgPSBwcm9jZXNzRWxlbWVudEJ5VHlwZSh7XG4gICAgICAgIGVmZmVjdDogY2xlYXJTdHlsZVByb3AsXG4gICAgICAgIGFjdGlvblR5cGVJZCxcbiAgICAgICAgZWxlbWVudEFwaSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEFmZmVjdGVkRWxlbWVudHMoe2NvbmZpZywgZXZlbnQsIGVsZW1lbnRBcGl9KS5mb3JFYWNoKGNsZWFyRWxlbWVudCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW51cEhUTUxFbGVtZW50KFxuICBlbGVtZW50OiBhbnksXG4gIGFjdGlvbkl0ZW06IGFueSxcbiAgZWxlbWVudEFwaTogYW55XG4pIHtcbiAgY29uc3Qge3NldFN0eWxlLCBnZXRTdHlsZX0gPSBlbGVtZW50QXBpO1xuICBjb25zdCB7YWN0aW9uVHlwZUlkfSA9IGFjdGlvbkl0ZW07XG5cbiAgaWYgKGFjdGlvblR5cGVJZCA9PT0gU1RZTEVfU0laRSkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uSXRlbTtcbiAgICBpZiAoY29uZmlnLndpZHRoVW5pdCA9PT0gQVVUTykge1xuICAgICAgc2V0U3R5bGUoZWxlbWVudCwgV0lEVEgsICcnKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5oZWlnaHRVbml0ID09PSBBVVRPKSB7XG4gICAgICBzZXRTdHlsZShlbGVtZW50LCBIRUlHSFQsICcnKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZ2V0U3R5bGUoZWxlbWVudCwgV0lMTF9DSEFOR0UpKSB7XG4gICAgcHJvY2Vzc0VsZW1lbnRCeVR5cGUoe2VmZmVjdDogcmVtb3ZlV2lsbENoYW5nZSwgYWN0aW9uVHlwZUlkLCBlbGVtZW50QXBpfSkoXG4gICAgICBlbGVtZW50XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBwcm9jZXNzRWxlbWVudEJ5VHlwZSA9XG4gICh7XG4gICAgZWZmZWN0LFxuICAgIGFjdGlvblR5cGVJZCxcbiAgICBlbGVtZW50QXBpLFxuICB9OiB7XG4gICAgZWZmZWN0OiAoXG4gICAgICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICAgIHByb3A6IGFueSB8IHVuZGVmaW5lZCB8IHN0cmluZyxcblxuICAgICAgZWxlbWVudEFwaT86IGFueVxuICAgICkgPT4gdm9pZDtcbiAgICBhY3Rpb25UeXBlSWQ6IEFjdGlvbklkO1xuICAgIGVsZW1lbnRBcGk6IEVsZW1lbnRBcGk8SFRNTEVsZW1lbnQsIHN0cmluZz47XG4gIH0pID0+XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2VsZW1lbnQnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIChlbGVtZW50KSA9PiB7XG4gICAgc3dpdGNoIChhY3Rpb25UeXBlSWQpIHtcbiAgICAgIGNhc2UgVFJBTlNGT1JNX01PVkU6XG4gICAgICBjYXNlIFRSQU5TRk9STV9TQ0FMRTpcbiAgICAgIGNhc2UgVFJBTlNGT1JNX1JPVEFURTpcbiAgICAgIGNhc2UgVFJBTlNGT1JNX1NLRVc6XG4gICAgICAgIGVmZmVjdChlbGVtZW50LCBUUkFOU0ZPUk1fUFJFRklYRUQsIGVsZW1lbnRBcGkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU1RZTEVfRklMVEVSOlxuICAgICAgICBlZmZlY3QoZWxlbWVudCwgRklMVEVSLCBlbGVtZW50QXBpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNUWUxFX0ZPTlRfVkFSSUFUSU9OOlxuICAgICAgICBlZmZlY3QoZWxlbWVudCwgRk9OVF9WQVJJQVRJT05fU0VUVElOR1MsIGVsZW1lbnRBcGkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU1RZTEVfT1BBQ0lUWTpcbiAgICAgICAgZWZmZWN0KGVsZW1lbnQsIE9QQUNJVFksIGVsZW1lbnRBcGkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU1RZTEVfU0laRTpcbiAgICAgICAgZWZmZWN0KGVsZW1lbnQsIFdJRFRILCBlbGVtZW50QXBpKTtcbiAgICAgICAgZWZmZWN0KGVsZW1lbnQsIEhFSUdIVCwgZWxlbWVudEFwaSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTVFlMRV9CQUNLR1JPVU5EX0NPTE9SOlxuICAgICAgY2FzZSBTVFlMRV9CT1JERVI6XG4gICAgICBjYXNlIFNUWUxFX1RFWFRfQ09MT1I6XG4gICAgICAgIGVmZmVjdChlbGVtZW50LCBjb2xvclN0eWxlUHJvcHNbYWN0aW9uVHlwZUlkXSwgZWxlbWVudEFwaSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBHRU5FUkFMX0RJU1BMQVk6XG4gICAgICAgIGVmZmVjdChlbGVtZW50LCBESVNQTEFZLCBlbGVtZW50QXBpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9O1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdwcm9wJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZnVuY3Rpb24gY2xlYXJTdHlsZVByb3AoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3AsIGVsZW1lbnRBcGk6IGFueSkge1xuICBjb25zdCB7c2V0U3R5bGV9ID0gZWxlbWVudEFwaTtcbiAgcmVtb3ZlV2lsbENoYW5nZShlbGVtZW50LCBwcm9wLCBlbGVtZW50QXBpKTtcbiAgc2V0U3R5bGUoZWxlbWVudCwgcHJvcCwgJycpO1xuICAvLyBDbGVhciB0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkXG4gIGlmIChwcm9wID09PSBUUkFOU0ZPUk1fUFJFRklYRUQpIHtcbiAgICBzZXRTdHlsZShlbGVtZW50LCBUUkFOU0ZPUk1fU1RZTEVfUFJFRklYRUQsICcnKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF4RHVyYXRpb25JdGVtSW5kZXgoYWN0aW9uSXRlbXM6IGFueSkge1xuICBsZXQgbWF4RHVyYXRpb24gPSAwO1xuICBsZXQgcmVzdWx0SW5kZXggPSAwO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDA2IC0gUGFyYW1ldGVyICdhY3Rpb25JdGVtJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciAnaW5kZXgnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGFjdGlvbkl0ZW1zLmZvckVhY2goKGFjdGlvbkl0ZW0sIGluZGV4KSA9PiB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb25JdGVtO1xuICAgIGNvbnN0IHRvdGFsID0gY29uZmlnLmRlbGF5ICsgY29uZmlnLmR1cmF0aW9uO1xuICAgIGlmICh0b3RhbCA+PSBtYXhEdXJhdGlvbikge1xuICAgICAgbWF4RHVyYXRpb24gPSB0b3RhbDtcbiAgICAgIHJlc3VsdEluZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdEluZGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9uTGlzdFByb2dyZXNzKGFjdGlvbkxpc3Q6IGFueSwgaW5zdGFuY2U6IGFueSkge1xuICBjb25zdCB7YWN0aW9uSXRlbUdyb3VwcywgdXNlRmlyc3RHcm91cEFzSW5pdGlhbFN0YXRlfSA9IGFjdGlvbkxpc3Q7XG4gIGNvbnN0IHthY3Rpb25JdGVtOiBpbnN0YW5jZUl0ZW0sIHZlcmJvc2VUaW1lRWxhcHNlZCA9IDB9ID0gaW5zdGFuY2U7XG4gIGxldCB0b3RhbER1cmF0aW9uID0gMDtcbiAgbGV0IGVsYXBzZWREdXJhdGlvbiA9IDA7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzcwMDYgLSBQYXJhbWV0ZXIgJ2dyb3VwJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLiB8IFRTNzAwNiAtIFBhcmFtZXRlciAnaW5kZXgnIGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGUuXG4gIGFjdGlvbkl0ZW1Hcm91cHMuZm9yRWFjaCgoZ3JvdXAsIGluZGV4KSA9PiB7XG4gICAgaWYgKHVzZUZpcnN0R3JvdXBBc0luaXRpYWxTdGF0ZSAmJiBpbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7YWN0aW9uSXRlbXN9ID0gZ3JvdXA7XG4gICAgY29uc3QgY2Fycmllckl0ZW0gPSBhY3Rpb25JdGVtc1tnZXRNYXhEdXJhdGlvbkl0ZW1JbmRleChhY3Rpb25JdGVtcyldO1xuICAgIGNvbnN0IHtjb25maWcsIGFjdGlvblR5cGVJZH0gPSBjYXJyaWVySXRlbTtcbiAgICBpZiAoaW5zdGFuY2VJdGVtLmlkID09PSBjYXJyaWVySXRlbS5pZCkge1xuICAgICAgZWxhcHNlZER1cmF0aW9uID0gdG90YWxEdXJhdGlvbiArIHZlcmJvc2VUaW1lRWxhcHNlZDtcbiAgICB9XG4gICAgY29uc3QgZHVyYXRpb24gPVxuICAgICAgZ2V0UmVuZGVyVHlwZShhY3Rpb25UeXBlSWQpID09PSBSRU5ERVJfR0VORVJBTCA/IDAgOiBjb25maWcuZHVyYXRpb247XG4gICAgdG90YWxEdXJhdGlvbiArPSBjb25maWcuZGVsYXkgKyBkdXJhdGlvbjtcbiAgfSk7XG4gIHJldHVybiB0b3RhbER1cmF0aW9uID4gMCA/IG9wdGltaXplRmxvYXQoZWxhcHNlZER1cmF0aW9uIC8gdG90YWxEdXJhdGlvbikgOiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlTGlzdFRvR3JvdXAoe1xuICBhY3Rpb25MaXN0LFxuICBhY3Rpb25JdGVtSWQsXG4gIHJhd0RhdGEsXG59OiB7XG4gIGFjdGlvbkxpc3Q6IEFjdGlvbkxpc3RUeXBlO1xuICBhY3Rpb25JdGVtSWQ6IHN0cmluZztcbiAgcmF3RGF0YTogSVgyUmF3RGF0YTtcbn0pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIEZJWE1FIC0gVFMyMzM5IC0gUHJvcGVydHkgJ2FjdGlvbkl0ZW1Hcm91cHMnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0FjdGlvbkxpc3RUeXBlJy5cbiAgY29uc3Qge2FjdGlvbkl0ZW1Hcm91cHMsIGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cHN9ID0gYWN0aW9uTGlzdDtcbiAgY29uc3QgbmV3QWN0aW9uSXRlbXM6IEFycmF5PEFjdGlvbkl0ZW1UeXBlPiA9IFtdO1xuXG4gIGNvbnN0IHRha2VJdGVtVW50aWxNYXRjaCA9IChhY3Rpb25JdGVtOiBBY3Rpb25JdGVtVHlwZSkgPT4ge1xuICAgIG5ld0FjdGlvbkl0ZW1zLnB1c2goXG4gICAgICBtZXJnZUluKGFjdGlvbkl0ZW0sIFsnY29uZmlnJ10sIHtcbiAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgIGR1cmF0aW9uOiAwLFxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiBhY3Rpb25JdGVtLmlkID09PSBhY3Rpb25JdGVtSWQ7XG4gIH07XG5cbiAgYWN0aW9uSXRlbUdyb3VwcyAmJlxuICAgIGFjdGlvbkl0ZW1Hcm91cHMuc29tZSgoe2FjdGlvbkl0ZW1zfToge2FjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtc1R5cGV9KSA9PiB7XG4gICAgICByZXR1cm4gYWN0aW9uSXRlbXMuc29tZSh0YWtlSXRlbVVudGlsTWF0Y2gpO1xuICAgIH0pO1xuXG4gIGNvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cHMgJiZcbiAgICBjb250aW51b3VzUGFyYW1ldGVyR3JvdXBzLnNvbWUoXG4gICAgICAoXG4gICAgICAgIHBhcmFtR3JvdXA6XG4gICAgICAgICAgfCBDb250aW51b3VzUGFyYW1ldGVyR3JvdXBUeXBlPCdNT1VTRV9YJz5cbiAgICAgICAgICB8IENvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cFR5cGU8J01PVVNFX1knPlxuICAgICAgICAgIHwgQ29udGludW91c1BhcmFtZXRlckdyb3VwVHlwZTwnU0NST0xMX1BST0dSRVNTJz5cbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCB7Y29udGludW91c0FjdGlvbkdyb3Vwc30gPSBwYXJhbUdyb3VwO1xuICAgICAgICByZXR1cm4gY29udGludW91c0FjdGlvbkdyb3Vwcy5zb21lKFxuICAgICAgICAgICh7YWN0aW9uSXRlbXN9OiB7YWN0aW9uSXRlbXM6IEFjdGlvbkl0ZW1zVHlwZX0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb25JdGVtcy5zb21lKHRha2VJdGVtVW50aWxNYXRjaCk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG5cbiAgcmV0dXJuIHNldEluKHJhd0RhdGEsIFsnYWN0aW9uTGlzdHMnXSwge1xuICAgIFthY3Rpb25MaXN0LmlkXToge1xuICAgICAgaWQ6IGFjdGlvbkxpc3QuaWQsXG4gICAgICBhY3Rpb25JdGVtR3JvdXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb25JdGVtczogbmV3QWN0aW9uSXRlbXMsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gVFM3MDMxIC0gQmluZGluZyBlbGVtZW50ICdiYXNlZE9uJyBpbXBsaWNpdGx5IGhhcyBhbiAnYW55JyB0eXBlLlxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZE5hbWVzcGFjZUV2ZW50UGFyYW1ldGVyKGV2ZW50VHlwZUlkOiBhbnksIHtiYXNlZE9ufSkge1xuICByZXR1cm4gKFxuICAgIChldmVudFR5cGVJZCA9PT0gRXZlbnRUeXBlQ29uc3RzLlNDUk9MTElOR19JTl9WSUVXICYmXG4gICAgICAoYmFzZWRPbiA9PT0gRXZlbnRCYXNlZE9uLkVMRU1FTlQgfHwgYmFzZWRPbiA9PSBudWxsKSkgfHxcbiAgICAoZXZlbnRUeXBlSWQgPT09IEV2ZW50VHlwZUNvbnN0cy5NT1VTRV9NT1ZFICYmXG4gICAgICBiYXNlZE9uID09PSBFdmVudEJhc2VkT24uRUxFTUVOVClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVzcGFjZWRQYXJhbWV0ZXJJZChcbiAgZXZlbnRTdGF0ZUtleTogYW55LFxuICBjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZDogQ29udGludW91c1BhcmFtZXRlckdyb3VwSWRcbikge1xuICBjb25zdCBuYW1lc3BhY2VkUGFyYW1ldGVySWQgPVxuICAgIGV2ZW50U3RhdGVLZXkgKyBDT0xPTl9ERUxJTUlURVIgKyBjb250aW51b3VzUGFyYW1ldGVyR3JvdXBJZDtcblxuICByZXR1cm4gbmFtZXNwYWNlZFBhcmFtZXRlcklkIGFzIENvbnRpbnVvdXNQYXJhbWV0ZXJHcm91cElkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkQWxsb3dNZWRpYVF1ZXJ5KG1lZGlhUXVlcmllczogYW55LCBtZWRpYVF1ZXJ5S2V5OiBhbnkpIHtcbiAgLy8gRHVyaW5nIGRlc2lnbiBtb2RlLCBjdXJyZW50IG1lZGlhIHF1ZXJ5IGtleSBkb2VzIG5vdCBleGlzdFxuICBpZiAobWVkaWFRdWVyeUtleSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG1lZGlhUXVlcmllcy5pbmRleE9mKG1lZGlhUXVlcnlLZXkpICE9PSAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lZGlhUXVlcmllc0VxdWFsKGxpc3RBOiBhbnksIGxpc3RCOiBhbnkpIHtcbiAgcmV0dXJuIHNoYWxsb3dFcXVhbChsaXN0QSAmJiBsaXN0QS5zb3J0KCksIGxpc3RCICYmIGxpc3RCLnNvcnQoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlUYXJnZXQodGFyZ2V0OiBhbnkpIHtcbiAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuICBpZiAodGFyZ2V0LnBsdWdpbkVsZW1lbnQgJiYgdGFyZ2V0Lm9iamVjdElkKSB7XG4gICAgcmV0dXJuIHRhcmdldC5wbHVnaW5FbGVtZW50ICsgQkFSX0RFTElNSVRFUiArIHRhcmdldC5vYmplY3RJZDtcbiAgfVxuICBpZiAodGFyZ2V0Lm9iamVjdElkKSB7XG4gICAgcmV0dXJuIHRhcmdldC5vYmplY3RJZDtcbiAgfVxuICBjb25zdCB7aWQgPSAnJywgc2VsZWN0b3IgPSAnJywgdXNlRXZlbnRUYXJnZXQgPSAnJ30gPSB0YXJnZXQ7XG4gIHJldHVybiBpZCArIEJBUl9ERUxJTUlURVIgKyBzZWxlY3RvciArIEJBUl9ERUxJTUlURVIgKyB1c2VFdmVudFRhcmdldDtcbn1cbiJdLCJuYW1lcyI6WyJjbGVhbnVwSFRNTEVsZW1lbnQiLCJjbGVhckFsbFN0eWxlcyIsImNsZWFyT2JqZWN0Q2FjaGUiLCJnZXRBY3Rpb25MaXN0UHJvZ3Jlc3MiLCJnZXRBZmZlY3RlZEVsZW1lbnRzIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImdldERlc3RpbmF0aW9uVmFsdWVzIiwiZ2V0RWxlbWVudElkIiwiZ2V0SW5zdGFuY2VJZCIsImdldEluc3RhbmNlT3JpZ2luIiwiZ2V0SXRlbUNvbmZpZ0J5S2V5IiwiZ2V0TWF4RHVyYXRpb25JdGVtSW5kZXgiLCJnZXROYW1lc3BhY2VkUGFyYW1ldGVySWQiLCJnZXRSZW5kZXJUeXBlIiwiZ2V0U3R5bGVQcm9wIiwibWVkaWFRdWVyaWVzRXF1YWwiLCJvYnNlcnZlU3RvcmUiLCJyZWR1Y2VMaXN0VG9Hcm91cCIsInJlaWZ5U3RhdGUiLCJyZW5kZXJIVE1MRWxlbWVudCIsInNoYWxsb3dFcXVhbCIsInNob3VsZEFsbG93TWVkaWFRdWVyeSIsInNob3VsZE5hbWVzcGFjZUV2ZW50UGFyYW1ldGVyIiwic3RyaW5naWZ5VGFyZ2V0IiwiQkFDS0dST1VORCIsIlRSQU5TRk9STSIsIlRSQU5TTEFURV8zRCIsIlNDQUxFXzNEIiwiUk9UQVRFX1giLCJST1RBVEVfWSIsIlJPVEFURV9aIiwiU0tFVyIsIlBSRVNFUlZFXzNEIiwiRkxFWCIsIk9QQUNJVFkiLCJGSUxURVIiLCJGT05UX1ZBUklBVElPTl9TRVRUSU5HUyIsIldJRFRIIiwiSEVJR0hUIiwiQkFDS0dST1VORF9DT0xPUiIsIkJPUkRFUl9DT0xPUiIsIkNPTE9SIiwiQ0hJTERSRU4iLCJJTU1FRElBVEVfQ0hJTERSRU4iLCJTSUJMSU5HUyIsIlBBUkVOVCIsIkRJU1BMQVkiLCJXSUxMX0NIQU5HRSIsIkFVVE8iLCJDT01NQV9ERUxJTUlURVIiLCJDT0xPTl9ERUxJTUlURVIiLCJCQVJfREVMSU1JVEVSIiwiUkVOREVSX1RSQU5TRk9STSIsIlJFTkRFUl9HRU5FUkFMIiwiUkVOREVSX1NUWUxFIiwiUkVOREVSX1BMVUdJTiIsIklYMkVuZ2luZUNvbnN0YW50cyIsIlRSQU5TRk9STV9NT1ZFIiwiVFJBTlNGT1JNX1NDQUxFIiwiVFJBTlNGT1JNX1JPVEFURSIsIlRSQU5TRk9STV9TS0VXIiwiU1RZTEVfT1BBQ0lUWSIsIlNUWUxFX0ZJTFRFUiIsIlNUWUxFX0ZPTlRfVkFSSUFUSU9OIiwiU1RZTEVfU0laRSIsIlNUWUxFX0JBQ0tHUk9VTkRfQ09MT1IiLCJTVFlMRV9CT1JERVIiLCJTVFlMRV9URVhUX0NPTE9SIiwiR0VORVJBTF9ESVNQTEFZIiwiT0JKRUNUX1ZBTFVFIiwiQWN0aW9uVHlwZUNvbnN0cyIsInRyaW0iLCJ2IiwiY29sb3JTdHlsZVByb3BzIiwiT2JqZWN0IiwiZnJlZXplIiwid2lsbENoYW5nZVByb3BzIiwiVFJBTlNGT1JNX1BSRUZJWEVEIiwib2JqZWN0Q2FjaGUiLCJNYXAiLCJjbGVhciIsImluc3RhbmNlQ291bnQiLCJlbGVtZW50Q291bnQiLCJpeEVsZW1lbnRzIiwicmVmIiwia2V5IiwiaXhFbCIsImlkIiwiZXZlbnRzIiwiYWN0aW9uTGlzdHMiLCJzaXRlIiwiZXZlbnRUeXBlTWFwIiwicmVkdWNlIiwicmVzdWx0IiwiZXZlbnQiLCJldmVudFR5cGVJZCIsIm1lZGlhUXVlcmllcyIsIm1lZGlhUXVlcnlLZXlzIiwibWFwIiwibXEiLCJjb25zb2xlIiwid2FybiIsIml4RGF0YSIsInN0cmljdEVxdWFsIiwiYSIsImIiLCJzdG9yZSIsInNlbGVjdCIsIm9uQ2hhbmdlIiwiY29tcGFyYXRvciIsImdldFN0YXRlIiwic3Vic2NyaWJlIiwidW5zdWJzY3JpYmUiLCJoYW5kbGVDaGFuZ2UiLCJjdXJyZW50U3RhdGUiLCJuZXh0U3RhdGUiLCJub3JtYWxpemVUYXJnZXQiLCJ0YXJnZXQiLCJ0eXBlIiwib2JqZWN0SWQiLCJzZWxlY3RvciIsInNlbGVjdG9yR3VpZHMiLCJhcHBsaWVzVG8iLCJ1c2VFdmVudFRhcmdldCIsImNvbmZpZyIsImV2ZW50VGFyZ2V0IiwiZWxlbWVudFJvb3QiLCJlbGVtZW50QXBpIiwiRXJyb3IiLCJ0YXJnZXRzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiYWNjdW11bGF0b3IiLCJjb25jYXQiLCJnZXRWYWxpZERvY3VtZW50IiwiZ2V0UXVlcnlTZWxlY3RvciIsInF1ZXJ5RG9jdW1lbnQiLCJnZXRDaGlsZEVsZW1lbnRzIiwiZ2V0U2libGluZ0VsZW1lbnRzIiwibWF0Y2hTZWxlY3RvciIsImVsZW1lbnRDb250YWlucyIsImlzU2libGluZ05vZGUiLCJoYXMiLCJnZXQiLCJzZXQiLCJFdmVudEFwcGxpZXNUbyIsIlBBR0UiLCJkb2MiLCJvdmVycmlkZXMiLCJhY3Rpb24iLCJhZmZlY3RlZEVsZW1lbnRzIiwib3ZlcnJpZGUiLCJ2YWxpZE92ZXJyaWRlIiwiQm9vbGVhbiIsImxpbWl0QWZmZWN0ZWRFbGVtZW50cyIsImJhc2VTZWxlY3RvciIsImZpbmFsU2VsZWN0b3IiLCJldmVudFRhcmdldFNlbGVjdG9yIiwiZXZlbnRUYXJnZXRzIiwiZmlsdGVyIiwicGFyZW50RWxlbWVudCIsInNvbWUiLCJ0YXJnZXRFbGVtZW50IiwiY2hpbGRFbGVtZW50Iiwic2libGluZ0VsZW1lbnQiLCJJU19CUk9XU0VSX0VOViIsImVsZW1lbnQiLCJjb250YWlucyIsImFjdGlvbkl0ZW0iLCJhY3Rpb25UeXBlSWQiLCJ3aW5kb3ciLCJweFZhbHVlUmVnZXgiLCJnZXRGaWx0ZXJEZWZhdWx0cyIsImFjdGlvblN0YXRlIiwiZmlsdGVycyIsImZpbHRlckRlZmF1bHRzIiwiZ2V0Rm9udFZhcmlhdGlvbkRlZmF1bHRzIiwiZm9udFZhcmlhdGlvbnMiLCJmb250VmFyaWF0aW9uIiwiZm9udFZhcmlhdGlvbkRlZmF1bHRzIiwiZGVmYXVsdFZhbHVlIiwicmVmU3RhdGUiLCJjb21wdXRlZFN0eWxlIiwiZ2V0U3R5bGUiLCJpc1BsdWdpblR5cGUiLCJnZXRQbHVnaW5PcmlnaW4iLCJ0cmFuc2Zvcm1EZWZhdWx0cyIsInZhbHVlIiwiZGVmYXVsdFRvIiwicGFyc2VGbG9hdCIsImlubGluZVdpZHRoIiwiaW5saW5lSGVpZ2h0Iiwid2lkdGhWYWx1ZSIsImhlaWdodFZhbHVlIiwid2lkdGhVbml0IiwidGVzdCIsIndpZHRoIiwiaGVpZ2h0VW5pdCIsImhlaWdodCIsInBhcnNlQ29sb3IiLCJkaXNwbGF5IiwicmVkdWNlRmlsdGVycyIsInJlZHVjZUZvbnRWYXJpYXRpb25zIiwiZ2V0UGx1Z2luQ29uZmlnIiwiZmluZExhc3QiLCJnZXRQbHVnaW5EZXN0aW5hdGlvbiIsInhWYWx1ZSIsInlWYWx1ZSIsInpWYWx1ZSIsInNldFN0eWxlIiwiZ2V0UHJvcGVydHkiLCJ0ZW1wIiwiclZhbHVlIiwiZ1ZhbHVlIiwiYlZhbHVlIiwiYVZhbHVlIiwiZ2xvYmFsU3dhdGNoSWQiLCJzdGFydHNXaXRoIiwibm9ybWFsaXplZFZhbHVlIiwibm9ybWFsaXplQ29sb3IiLCJyZWQiLCJncmVlbiIsImJsdWUiLCJhbHBoYSIsInJlbmRlclR5cGUiLCJyZXBsYWNlIiwidG9Mb3dlckNhc2UiLCJldmVudElkIiwic3R5bGVQcm9wIiwicGx1Z2luSW5zdGFuY2UiLCJyZW5kZXJUcmFuc2Zvcm0iLCJyZW5kZXJTdHlsZSIsInJlbmRlckdlbmVyYWwiLCJyZW5kZXJQbHVnaW4iLCJibHVyIiwiaW52ZXJ0IiwiZ3JheXNjYWxlIiwic2F0dXJhdGUiLCJzZXBpYSIsImNvbnRyYXN0IiwiYnJpZ2h0bmVzcyIsIndnaHQiLCJvcHN6Iiwid2R0aCIsInNsbnQiLCJnZXRGaWx0ZXJVbml0IiwiZmlsdGVyVHlwZSIsImFjdGlvbkl0ZW1Db25maWciLCJ1bml0IiwidHJhbnNmb3JtS2V5cyIsImtleXMiLCJuZXdUcmFuc2Zvcm0iLCJkZWZhdWx0cyIsInhVbml0IiwieVVuaXQiLCJ6VW5pdCIsImpvaW4iLCJhZGRXaWxsQ2hhbmdlIiwiaGFzRGVmaW5lZDNkVHJhbnNmb3JtIiwiVFJBTlNGT1JNX1NUWUxFX1BSRUZJWEVEIiwicmVuZGVyRmlsdGVyIiwiZmlsdGVyVmFsdWUiLCJyZW5kZXJGb250VmFyaWF0aW9uIiwiZm9udFZhcmlhdGlvblZhbHVlIiwicHVzaCIsInVuZGVmaW5lZCIsInBhcmFtQ2FwdHVyZSIsInJnYlZhbGlkUmVnZXgiLCJyZ2JNYXRjaFJlZ2V4IiwiUmVnRXhwIiwiZ2V0Rmlyc3RNYXRjaCIsInJlZ2V4IiwibWF0Y2giLCJleGVjIiwicHJvcCIsImlubGluZVZhbHVlIiwibWF0Y2hlcyIsInNwbGl0IiwicGFyc2VJbnQiLCJNYXRoIiwicm91bmQiLCJGTEVYX1BSRUZJWEVEIiwidmFsaWRQcm9wIiwidmFsdWVzIiwiaW5kZXhPZiIsInJlbW92ZVdpbGxDaGFuZ2UiLCJmb3JFYWNoIiwiYWN0aW9uTGlzdElkIiwiYWN0aW9uTGlzdCIsImNsZWFyQWN0aW9uTGlzdFN0eWxlcyIsImFjdGlvbkl0ZW1Hcm91cHMiLCJjb250aW51b3VzUGFyYW1ldGVyR3JvdXBzIiwiYWN0aW9uR3JvdXAiLCJjbGVhckFjdGlvbkdyb3VwU3R5bGVzIiwicGFyYW1Hcm91cCIsImNvbnRpbnVvdXNBY3Rpb25Hcm91cHMiLCJhY3Rpb25JdGVtcyIsImNsZWFyRWxlbWVudCIsImNsZWFyUGx1Z2luIiwicHJvY2Vzc0VsZW1lbnRCeVR5cGUiLCJlZmZlY3QiLCJjbGVhclN0eWxlUHJvcCIsIm1heER1cmF0aW9uIiwicmVzdWx0SW5kZXgiLCJpbmRleCIsInRvdGFsIiwiZGVsYXkiLCJkdXJhdGlvbiIsImluc3RhbmNlIiwidXNlRmlyc3RHcm91cEFzSW5pdGlhbFN0YXRlIiwiaW5zdGFuY2VJdGVtIiwidmVyYm9zZVRpbWVFbGFwc2VkIiwidG90YWxEdXJhdGlvbiIsImVsYXBzZWREdXJhdGlvbiIsImdyb3VwIiwiY2Fycmllckl0ZW0iLCJvcHRpbWl6ZUZsb2F0IiwiYWN0aW9uSXRlbUlkIiwicmF3RGF0YSIsIm5ld0FjdGlvbkl0ZW1zIiwidGFrZUl0ZW1VbnRpbE1hdGNoIiwibWVyZ2VJbiIsInNldEluIiwiYmFzZWRPbiIsIkV2ZW50VHlwZUNvbnN0cyIsIlNDUk9MTElOR19JTl9WSUVXIiwiRXZlbnRCYXNlZE9uIiwiRUxFTUVOVCIsIk1PVVNFX01PVkUiLCJldmVudFN0YXRlS2V5IiwiY29udGludW91c1BhcmFtZXRlckdyb3VwSWQiLCJuYW1lc3BhY2VkUGFyYW1ldGVySWQiLCJtZWRpYVF1ZXJ5S2V5IiwibGlzdEEiLCJsaXN0QiIsInNvcnQiLCJwbHVnaW5FbGVtZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQW9xQ2dCQSxrQkFBa0I7ZUFBbEJBOztJQTdEQUMsY0FBYztlQUFkQTs7SUFqOUJBQyxnQkFBZ0I7ZUFBaEJB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 }), 7164: (function (__unused_webpack_module, exports) { "use strict"; // from https://github.com/acdlite/recompose/blob/master/src/packages/recompose/shallowEqual.js /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @providesModule shallowEqual * @typechecks */ /* eslint-disable no-self-compare */ /** * inlined Object.is polyfill to avoid requiring consumers ship their own * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is */ Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "default", ({ enumerable: true, get: function() { return _default; } })); function is(x, y) { // SameValue algorithm if (x === y) { // Steps 1-5, 7-10 // Steps 6.b-6.e: +0 != -0 // Added the nonzero y check to make Flow happy, but it is redundant return x !== 0 || y !== 0 || 1 / x === 1 / y; } // Step 6.a: NaN == NaN return x !== x && y !== y; } /** * Performs equality by iterating through keys on an object and returning false * when any key has values which are not strictly equal between the arguments. * Returns true when the values of all keys are strictly equal. */ function shallowEqual(objA, objB) { if (is(objA, objB)) { return true; } if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) { return false; } const keysA = Object.keys(objA); const keysB = Object.keys(objB); if (keysA.length !== keysB.length) { return false; } // Test for A's keys different from B. for(let i = 0; i < keysA.length; i++){ if (!Object.hasOwn(objB, // @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'PropertyKey'. keysA[i]) || // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type. | TS2538 - Type 'undefined' cannot be used as an index type. !is(objA[keysA[i]], objB[keysA[i]])) { return false; } } return true; } const _default = shallowEqual; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC9sb2dpYy9zaGFsbG93RXF1YWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWNkbGl0ZS9yZWNvbXBvc2UvYmxvYi9tYXN0ZXIvc3JjL3BhY2thZ2VzL3JlY29tcG9zZS9zaGFsbG93RXF1YWwuanNcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgc2hhbGxvd0VxdWFsXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuXG4vKipcbiAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICovXG5mdW5jdGlvbiBpcyh4OiBudW1iZXIgfCBSZWNvcmQ8YW55LCBhbnk+LCB5OiBudW1iZXIgfCBSZWNvcmQ8YW55LCBhbnk+KSB7XG4gIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgaWYgKHggPT09IHkpIHtcbiAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgIC8vIEFkZGVkIHRoZSBub256ZXJvIHkgY2hlY2sgdG8gbWFrZSBGbG93IGhhcHB5LCBidXQgaXQgaXMgcmVkdW5kYW50XG4gICAgcmV0dXJuIHggIT09IDAgfHwgeSAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gIH1cbiAgLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU5cbiAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbn1cblxuLyoqXG4gKiBQZXJmb3JtcyBlcXVhbGl0eSBieSBpdGVyYXRpbmcgdGhyb3VnaCBrZXlzIG9uIGFuIG9iamVjdCBhbmQgcmV0dXJuaW5nIGZhbHNlXG4gKiB3aGVuIGFueSBrZXkgaGFzIHZhbHVlcyB3aGljaCBhcmUgbm90IHN0cmljdGx5IGVxdWFsIGJldHdlZW4gdGhlIGFyZ3VtZW50cy5cbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZXMgb2YgYWxsIGtleXMgYXJlIHN0cmljdGx5IGVxdWFsLlxuICovXG5mdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQTogUmVjb3JkPGFueSwgYW55Piwgb2JqQjogUmVjb3JkPGFueSwgYW55Pik6IGJvb2xlYW4ge1xuICBpZiAoaXMob2JqQSwgb2JqQikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChcbiAgICB0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHxcbiAgICBvYmpBID09PSBudWxsIHx8XG4gICAgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8XG4gICAgb2JqQiA9PT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xuICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoXG4gICAgICAhT2JqZWN0Lmhhc093bihcbiAgICAgICAgb2JqQixcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTMjM0NSAtIEFyZ3VtZW50IG9mIHR5cGUgJ3N0cmluZyB8IHVuZGVmaW5lZCcgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ1Byb3BlcnR5S2V5Jy5cbiAgICAgICAga2V5c0FbaV1cbiAgICAgICkgfHxcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1MzggLSBUeXBlICd1bmRlZmluZWQnIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGluZGV4IHR5cGUuIHwgVFMyNTM4IC0gVHlwZSAndW5kZWZpbmVkJyBjYW5ub3QgYmUgdXNlZCBhcyBhbiBpbmRleCB0eXBlLlxuICAgICAgIWlzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSlcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2hhbGxvd0VxdWFsO1xuIl0sIm5hbWVzIjpbImlzIiwieCIsInkiLCJzaGFsbG93RXF1YWwiLCJvYmpBIiwib2JqQiIsImtleXNBIiwiT2JqZWN0Iiwia2V5cyIsImtleXNCIiwibGVuZ3RoIiwiaSIsImhhc093biJdLCJtYXBwaW5ncyI6IkFBQUEsK0ZBQStGO0FBRS9GOzs7Ozs7OztDQVFDLEdBRUQsa0NBQWtDLEdBRWxDOzs7Q0FHQzs7OzsrQkF5REQ7OztlQUFBOzs7QUF4REEsU0FBU0EsR0FBR0MsQ0FBNEIsRUFBRUMsQ0FBNEI7SUFDcEUsc0JBQXNCO0lBQ3RCLElBQUlELE1BQU1DLEdBQUc7UUFDWCxrQkFBa0I7UUFDbEIsMEJBQTBCO1FBQzFCLG9FQUFvRTtRQUNwRSxPQUFPRCxNQUFNLEtBQUtDLE1BQU0sS0FBSyxJQUFJRCxNQUFNLElBQUlDO0lBQzdDO0lBQ0EsdUJBQXVCO0lBQ3ZCLE9BQU9ELE1BQU1BLEtBQUtDLE1BQU1BO0FBQzFCO0FBRUE7Ozs7Q0FJQyxHQUNELFNBQVNDLGFBQWFDLElBQXNCLEVBQUVDLElBQXNCO0lBQ2xFLElBQUlMLEdBQUdJLE1BQU1DLE9BQU87UUFDbEIsT0FBTztJQUNUO0lBRUEsSUFDRSxPQUFPRCxTQUFTLFlBQ2hCQSxTQUFTLFFBQ1QsT0FBT0MsU0FBUyxZQUNoQkEsU0FBUyxNQUNUO1FBQ0EsT0FBTztJQUNUO0lBRUEsTUFBTUMsUUFBUUMsT0FBT0MsSUFBSSxDQUFDSjtJQUMxQixNQUFNSyxRQUFRRixPQUFPQyxJQUFJLENBQUNIO0lBRTFCLElBQUlDLE1BQU1JLE1BQU0sS0FBS0QsTUFBTUMsTUFBTSxFQUFFO1FBQ2pDLE9BQU87SUFDVDtJQUVBLHNDQUFzQztJQUN0QyxJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUwsTUFBTUksTUFBTSxFQUFFQyxJQUFLO1FBQ3JDLElBQ0UsQ0FBQ0osT0FBT0ssTUFBTSxDQUNaUCxNQUNBLDBIQUEwSDtRQUMxSEMsS0FBSyxDQUFDSyxFQUFFLEtBRVYsNklBQTZJO1FBQzdJLENBQUNYLEdBQUdJLElBQUksQ0FBQ0UsS0FBSyxDQUFDSyxFQUFFLENBQUMsRUFBRU4sSUFBSSxDQUFDQyxLQUFLLENBQUNLLEVBQUUsQ0FBQyxHQUNsQztZQUNBLE9BQU87UUFDVDtJQUNGO0lBRUEsT0FBTztBQUNUO01BRUEsV0FBZVIifQ== }), 5861: (function (__unused_webpack_module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { createElementState: function() { return createElementState; }, ixElements: function() { return ixElements; }, mergeActionState: function() { return mergeActionState; } }); const _timm = __webpack_require__(1185); const _sharedconstants = __webpack_require__(7087); const { HTML_ELEMENT, PLAIN_OBJECT, EXPRESSION_ELEMENT, CONFIG_X_VALUE, CONFIG_Y_VALUE, CONFIG_Z_VALUE, CONFIG_VALUE, CONFIG_X_UNIT, CONFIG_Y_UNIT, CONFIG_Z_UNIT, CONFIG_UNIT } = _sharedconstants.IX2EngineConstants; const { IX2_SESSION_STOPPED, IX2_INSTANCE_ADDED, IX2_ELEMENT_STATE_CHANGED } = _sharedconstants.IX2EngineActionTypes; const initialState = {}; const refState = 'refState'; const ixElements = (state = initialState, action = {})=>{ switch(action.type){ case IX2_SESSION_STOPPED: { return initialState; } case IX2_INSTANCE_ADDED: { const { elementId, element: ref, origin, actionItem, refType } = action.payload; const { actionTypeId } = actionItem; let newState = state; // Create new ref entry if it doesn't exist if ((0, _timm.getIn)(newState, [ elementId, ref ]) !== ref) { newState = createElementState(newState, ref, refType, elementId, actionItem); } // Merge origin values into ref state return mergeActionState(newState, elementId, actionTypeId, origin, actionItem); } case IX2_ELEMENT_STATE_CHANGED: { const { elementId, actionTypeId, current, actionItem } = action.payload; return mergeActionState(state, elementId, actionTypeId, current, actionItem); } default: { return state; } } }; function createElementState(state, ref, refType, elementId, actionItem) { const refId = refType === PLAIN_OBJECT ? (0, _timm.getIn)(actionItem, [ 'config', 'target', 'objectId' ]) : null; return (0, _timm.mergeIn)(state, [ elementId ], { id: elementId, ref, refId, refType }); } function mergeActionState(state, elementId, actionTypeId, actionState, actionItem) { const units = pickUnits(actionItem); const mergePath = [ elementId, refState, actionTypeId ]; return (0, _timm.mergeIn)(state, mergePath, actionState, units); } const valueUnitPairs = [ [ CONFIG_X_VALUE, CONFIG_X_UNIT ], [ CONFIG_Y_VALUE, CONFIG_Y_UNIT ], [ CONFIG_Z_VALUE, CONFIG_Z_UNIT ], [ CONFIG_VALUE, CONFIG_UNIT ] ]; function pickUnits(actionItem) { const { config } = actionItem; return valueUnitPairs.reduce((result, pair)=>{ const valueKey = pair[0]; const unitKey = pair[1]; // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type. const configValue = config[valueKey]; // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type. const configUnit = config[unitKey]; if (configValue != null && configUnit != null) { // @ts-expect-error - TS2538 - Type 'undefined' cannot be used as an index type. result[unitKey] = configUnit; } return result; }, {}); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N5c3RlbXMvaXgyL3NoYXJlZC9yZWR1Y2Vycy9JWDJFbGVtZW50c1JlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtnZXRJbiwgbWVyZ2VJbn0gZnJvbSAndGltbSc7XG5pbXBvcnQge1xuICBJWDJFbmdpbmVBY3Rpb25UeXBlcyxcbiAgSVgyRW5naW5lQ29uc3RhbnRzLFxufSBmcm9tICdAcGFja2FnZXMvc3lzdGVtcy9peDIvc2hhcmVkLWNvbnN0YW50cyc7XG5cbmNvbnN0IHtcbiAgSFRNTF9FTEVNRU5ULFxuICBQTEFJTl9PQkpFQ1QsXG4gIEVYUFJFU1NJT05fRUxFTUVOVCxcbiAgQ09ORklHX1hfVkFMVUUsXG4gIENPTkZJR19ZX1ZBTFVFLFxuICBDT05GSUdfWl9WQUxVRSxcbiAgQ09ORklHX1ZBTFVFLFxuICBDT05GSUdfWF9VTklULFxuICBDT05GSUdfWV9VTklULFxuICBDT05GSUdfWl9VTklULFxuICBDT05GSUdfVU5JVCxcbn0gPSBJWDJFbmdpbmVDb25zdGFudHM7XG5cbmNvbnN0IHtJWDJfU0VTU0lPTl9TVE9QUEVELCBJWDJfSU5TVEFOQ0VfQURERUQsIElYMl9FTEVNRU5UX1NUQVRFX0NIQU5HRUR9ID1cbiAgSVgyRW5naW5lQWN0aW9uVHlwZXM7XG5cbmV4cG9ydCB0eXBlIFJlZlR5cGVzID1cbiAgfCB0eXBlb2YgSFRNTF9FTEVNRU5UXG4gIHwgdHlwZW9mIFBMQUlOX09CSkVDVFxuICB8IHR5cGVvZiBFWFBSRVNTSU9OX0VMRU1FTlQ7XG5cbnR5cGUgQWN0aW9uU3RhdGUgPSB7XG4gIHhWYWx1ZT86IG51bWJlcjtcbiAgeVZhbHVlPzogbnVtYmVyO1xuICB6VmFsdWU/OiBudW1iZXI7XG4gIHZhbHVlPzogbnVtYmVyO1xuICB4VW5pdD86IHN0cmluZztcbiAgeVVuaXQ/OiBzdHJpbmc7XG4gIHpVbml0Pzogc3RyaW5nO1xuICB1bml0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRWxlbWVudHNTdGF0ZTxFbGVtZW50VHlwZT4gPSB7XG4gIFtlbGVtZW50SWQ6IHN0cmluZ106IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHJlZjogRWxlbWVudFR5cGU7IC8vIEhUTUxFbGVtZW50IHwgT2JqZWN0O1xuICAgIHJlZklkOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlZlR5cGU6IFJlZlR5cGVzO1xuICAgIHJlZlN0YXRlOiB7XG4gICAgICBbYWN0aW9uVHlwZUlkOiBzdHJpbmddOiBBY3Rpb25TdGF0ZTtcbiAgICB9O1xuICB9O1xufTtcblxuY29uc3QgaW5pdGlhbFN0YXRlOiBFbGVtZW50c1N0YXRlPGFueT4gPSB7fTtcbmNvbnN0IHJlZlN0YXRlID0gJ3JlZlN0YXRlJztcblxuZXhwb3J0IGNvbnN0IGl4RWxlbWVudHMgPSA8RWxlbWVudFR5cGU+KFxuICBzdGF0ZTogRWxlbWVudHNTdGF0ZTxFbGVtZW50VHlwZT4gPSBpbml0aWFsU3RhdGUsXG4gIGFjdGlvbjogUmVjb3JkPGFueSwgYW55PiA9IHt9XG4pOiBFbGVtZW50c1N0YXRlPEVsZW1lbnRUeXBlPiA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIElYMl9TRVNTSU9OX1NUT1BQRUQ6IHtcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgfVxuICAgIGNhc2UgSVgyX0lOU1RBTkNFX0FEREVEOiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAgZWxlbWVudDogcmVmLFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGFjdGlvbkl0ZW0sXG4gICAgICAgIHJlZlR5cGUsXG4gICAgICB9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgICAgIGNvbnN0IHthY3Rpb25UeXBlSWR9ID0gYWN0aW9uSXRlbTtcbiAgICAgIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gICAgICAvLyBDcmVhdGUgbmV3IHJlZiBlbnRyeSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICBpZiAoZ2V0SW4obmV3U3RhdGUsIFtlbGVtZW50SWQsIHJlZl0pICE9PSByZWYpIHtcbiAgICAgICAgbmV3U3RhdGUgPSBjcmVhdGVFbGVtZW50U3RhdGUoXG4gICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgcmVmLFxuICAgICAgICAgIHJlZlR5cGUsXG4gICAgICAgICAgZWxlbWVudElkLFxuICAgICAgICAgIGFjdGlvbkl0ZW1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gTWVyZ2Ugb3JpZ2luIHZhbHVlcyBpbnRvIHJlZiBzdGF0ZVxuICAgICAgcmV0dXJuIG1lcmdlQWN0aW9uU3RhdGUoXG4gICAgICAgIG5ld1N0YXRlLFxuICAgICAgICBlbGVtZW50SWQsXG4gICAgICAgIGFjdGlvblR5cGVJZCxcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICBhY3Rpb25JdGVtXG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIElYMl9FTEVNRU5UX1NUQVRFX0NIQU5HRUQ6IHtcbiAgICAgIGNvbnN0IHtlbGVtZW50SWQsIGFjdGlvblR5cGVJZCwgY3VycmVudCwgYWN0aW9uSXRlbX0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIHJldHVybiBtZXJnZUFjdGlvblN0YXRlKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgZWxlbWVudElkLFxuICAgICAgICBhY3Rpb25UeXBlSWQsXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIGFjdGlvbkl0ZW1cbiAgICAgICk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbGVtZW50U3RhdGU8RWxlbWVudFR5cGU+KFxuICBzdGF0ZTogRWxlbWVudHNTdGF0ZTxFbGVtZW50VHlwZT4sXG4gIHJlZjogRWxlbWVudFR5cGUsXG4gIHJlZlR5cGU6IFJlZlR5cGVzLFxuICBlbGVtZW50SWQ6IHN0cmluZyxcbiAgYWN0aW9uSXRlbToge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxuKTogRWxlbWVudHNTdGF0ZTxFbGVtZW50VHlwZT4ge1xuICBjb25zdCByZWZJZCA9XG4gICAgcmVmVHlwZSA9PT0gUExBSU5fT0JKRUNUXG4gICAgICA/IGdldEluKGFjdGlvbkl0ZW0sIFsnY29uZmlnJywgJ3RhcmdldCcsICdvYmplY3RJZCddKVxuICAgICAgOiBudWxsO1xuICByZXR1cm4gbWVyZ2VJbihzdGF0ZSwgW2VsZW1lbnRJZF0sIHtcbiAgICBpZDogZWxlbWVudElkLFxuICAgIHJlZixcbiAgICByZWZJZCxcbiAgICByZWZUeXBlLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQWN0aW9uU3RhdGU8RWxlbWVudFR5cGU+KFxuICBzdGF0ZTogRWxlbWVudHNTdGF0ZTxFbGVtZW50VHlwZT4sXG4gIGVsZW1lbnRJZDogc3RyaW5nLFxuICBhY3Rpb25UeXBlSWQ6IHN0cmluZyxcbiAgYWN0aW9uU3RhdGU6IEFjdGlvblN0YXRlLFxuICBhY3Rpb25JdGVtOiBSZWNvcmQ8YW55LCBhbnk+XG4pOiBFbGVtZW50c1N0YXRlPEVsZW1lbnRUeXBlPiB7XG4gIGNvbnN0IHVuaXRzID0gcGlja1VuaXRzKGFjdGlvbkl0ZW0pO1xuICBjb25zdCBtZXJnZVBhdGggPSBbZWxlbWVudElkLCByZWZTdGF0ZSwgYWN0aW9uVHlwZUlkXTtcbiAgcmV0dXJuIG1lcmdlSW4oc3RhdGUsIG1lcmdlUGF0aCwgYWN0aW9uU3RhdGUsIHVuaXRzKTtcbn1cblxuY29uc3QgdmFsdWVVbml0UGFpcnMgPSBbXG4gIFtDT05GSUdfWF9WQUxVRSwgQ09ORklHX1hfVU5JVF0sXG4gIFtDT05GSUdfWV9WQUxVRSwgQ09ORklHX1lfVU5JVF0sXG4gIFtDT05GSUdfWl9WQUxVRSwgQ09ORklHX1pfVU5JVF0sXG4gIFtDT05GSUdfVkFMVUUsIENPTkZJR19VTklUXSxcbl07XG5cbmZ1bmN0aW9uIHBpY2tVbml0cyhhY3Rpb25JdGVtOiBSZWNvcmQ8YW55LCBhbnk+KSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uSXRlbTtcbiAgcmV0dXJuIHZhbHVlVW5pdFBhaXJzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PigocmVzdWx0LCBwYWlyKSA9PiB7XG4gICAgY29uc3QgdmFsdWVLZXkgPSBwYWlyWzBdO1xuICAgIGNvbnN0IHVuaXRLZXkgPSBwYWlyWzFdO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1MzggLSBUeXBlICd1bmRlZmluZWQnIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGluZGV4IHR5cGUuXG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBjb25maWdbdmFsdWVLZXldO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1MzggLSBUeXBlICd1bmRlZmluZWQnIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGluZGV4IHR5cGUuXG4gICAgY29uc3QgY29uZmlnVW5pdCA9IGNvbmZpZ1t1bml0S2V5XTtcbiAgICBpZiAoY29uZmlnVmFsdWUgIT0gbnVsbCAmJiBjb25maWdVbml0ICE9IG51bGwpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUUzI1MzggLSBUeXBlICd1bmRlZmluZWQnIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGluZGV4IHR5cGUuXG4gICAgICByZXN1bHRbdW5pdEtleV0gPSBjb25maWdVbml0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlRWxlbWVudFN0YXRlIiwiaXhFbGVtZW50cyIsIm1lcmdlQWN0aW9uU3RhdGUiLCJIVE1MX0VMRU1FTlQiLCJQTEFJTl9PQkpFQ1QiLCJFWFBSRVNTSU9OX0VMRU1FTlQiLCJDT05GSUdfWF9WQUxVRSIsIkNPTkZJR19ZX1ZBTFVFIiwiQ09ORklHX1pfVkFMVUUiLCJDT05GSUdfVkFMVUUiLCJDT05GSUdfWF9VTklUIiwiQ09ORklHX1lfVU5JVCIsIkNPTkZJR19aX1VOSVQiLCJDT05GSUdfVU5JVCIsIklYMkVuZ2luZUNvbnN0YW50cyIsIklYMl9TRVNTSU9OX1NUT1BQRUQiLCJJWDJfSU5TVEFOQ0VfQURERUQiLCJJWDJfRUxFTUVOVF9TVEFURV9DSEFOR0VEIiwiSVgyRW5naW5lQWN0aW9uVHlwZXMiLCJpbml0aWFsU3RhdGUiLCJyZWZTdGF0ZSIsInN0YXRlIiwiYWN0aW9uIiwidHlwZSIsImVsZW1lbnRJZCIsImVsZW1lbnQiLCJyZWYiLCJvcmlnaW4iLCJhY3Rpb25JdGVtIiwicmVmVHlwZSIsInBheWxvYWQiLCJhY3Rpb25UeXBlSWQiLCJuZXdTdGF0ZSIsImdldEluIiwiY3VycmVudCIsInJlZklkIiwibWVyZ2VJbiIsImlkIiwiYWN0aW9uU3RhdGUiLCJ1bml0cyIsInBpY2tVbml0cyIsIm1lcmdlUGF0aCIsInZhbHVlVW5pdFBhaXJzIiwiY29uZmlnIiwicmVkdWNlIiwicmVzdWx0IiwicGFpciIsInZhbHVlS2V5IiwidW5pdEtleSIsImNvbmZpZ1ZhbHVlIiwiY29uZmlnVW5pdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUE4R2dCQSxrQkFBa0I7ZUFBbEJBOztJQXhESEMsVUFBVTtlQUFWQTs7SUE2RUdDLGdCQUFnQjtlQUFoQkE7OztzQkFuSWE7aUNBSXRCO0FBRVAsTUFBTSxFQUNKQyxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsa0JBQWtCLEVBQ2xCQyxjQUFjLEVBQ2RDLGNBQWMsRUFDZEMsY0FBYyxFQUNkQyxZQUFZLEVBQ1pDLGFBQWEsRUFDYkMsYUFBYSxFQUNiQyxhQUFhLEVBQ2JDLFdBQVcsRUFDWixHQUFHQyxtQ0FBa0I7QUFFdEIsTUFBTSxFQUFDQyxtQkFBbUIsRUFBRUMsa0JBQWtCLEVBQUVDLHlCQUF5QixFQUFDLEdBQ3hFQyxxQ0FBb0I7QUE4QnRCLE1BQU1DLGVBQW1DLENBQUM7QUFDMUMsTUFBTUMsV0FBVztBQUVWLE1BQU1uQixhQUFhLENBQ3hCb0IsUUFBb0NGLFlBQVksRUFDaERHLFNBQTJCLENBQUMsQ0FBQztJQUU3QixPQUFRQSxPQUFPQyxJQUFJO1FBQ2pCLEtB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 }), 3220: (function () { /** * ---------------------------------------------------------------------- * Webflow: Interactions 2.0: Init */ Webflow.require('ix2').init( {"events":{"e":{"id":"e","name":"","animationType":"custom","eventTypeId":"MOUSE_CLICK","action":{"id":"","actionTypeId":"GENERAL_START_ACTION","config":{"delay":0,"easing":"","duration":0,"actionListId":"a","affectedElements":{},"playInReverse":false,"autoStopEventId":"e-51"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e51","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e51","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":null,"scrollOffsetUnit":null,"delay":null,"direction":null,"effectIn":null},"createdOn":1770774629932},"e-2":{"id":"e-2","name":"","animationType":"custom","eventTypeId":"MOUSE_SECOND_CLICK","action":{"id":"","actionTypeId":"GENERAL_START_ACTION","config":{"delay":0,"easing":"","duration":0,"actionListId":"a-2","affectedElements":{},"playInReverse":false,"autoStopEventId":"e-50"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e51","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e51","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":null,"scrollOffsetUnit":null,"delay":null,"direction":null,"effectIn":null},"createdOn":1770774629933},"e-3":{"id":"e-3","name":"","animationType":"preset","eventTypeId":"MOUSE_CLICK","action":{"id":"","actionTypeId":"GENERAL_START_ACTION","config":{"delay":0,"easing":"","duration":0,"actionListId":"a","affectedElements":{},"playInReverse":false,"autoStopEventId":"e-49"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":null,"scrollOffsetUnit":null,"delay":null,"direction":null,"effectIn":null},"createdOn":1769136330014},"e-4":{"id":"e-4","name":"","animationType":"preset","eventTypeId":"MOUSE_SECOND_CLICK","action":{"id":"","actionTypeId":"GENERAL_START_ACTION","config":{"delay":0,"easing":"","duration":0,"actionListId":"a-2","affectedElements":{},"playInReverse":false,"autoStopEventId":"e-48"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":null,"scrollOffsetUnit":null,"delay":null,"direction":null,"effectIn":null},"createdOn":1769136330014},"e-5":{"id":"e-5","name":"","animationType":"custom","eventTypeId":"MOUSE_CLICK","action":{"id":"","actionTypeId":"GENERAL_START_ACTION","config":{"delay":0,"easing":"","duration":0,"actionListId":"a","affectedElements":{},"playInReverse":false,"autoStopEventId":"e-51"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":null,"scrollOffsetUnit":null,"delay":null,"direction":null,"effectIn":null},"createdOn":1770774629932},"e-6":{"id":"e-6","name":"","animationType":"custom","eventTypeId":"MOUSE_SECOND_CLICK","action":{"id":"","actionTypeId":"GENERAL_START_ACTION","config":{"delay":0,"easing":"","duration":0,"actionListId":"a-2","affectedElements":{},"playInReverse":false,"autoStopEventId":"e-50"}},"mediaQueries":["main","medium","small","tiny"],"target":{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]},"targets":[{"id":"69a4ed7f00fa7ef312d3e944|b68be0d7-9843-ca81-3858-13fa4fbb8e60","appliesTo":"ELEMENT","styleBlockIds":[]}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":null,"scrollOffsetUnit":null,"delay":null,"direction":null,"effectIn":null},"createdOn":1770774629933},"e-33":{"id":"e-33","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-58"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-34":{"id":"e-34","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-57"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-40,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-43":{"id":"e-43","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-44"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-5","originalId":"69eec4c48371fc750675f5c4|61251b70-ce92-b562-c80d-74e8144229be","appliesTo":"CLASS"},"targets":[{"selector":".row-5","originalId":"69eec4c48371fc750675f5c4|61251b70-ce92-b562-c80d-74e8144229be","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-44":{"id":"e-44","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-43"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-5","originalId":"69eec4c48371fc750675f5c4|61251b70-ce92-b562-c80d-74e8144229be","appliesTo":"CLASS"},"targets":[{"selector":".row-5","originalId":"69eec4c48371fc750675f5c4|61251b70-ce92-b562-c80d-74e8144229be","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-57":{"id":"e-57","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-58"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".pdp-layout-row","originalId":"69c2668b77c7997eafe5e62b|1a99fdf6-2700-f79b-be84-a1ba6cb307c0","appliesTo":"CLASS"},"targets":[{"selector":".pdp-layout-row","originalId":"69c2668b77c7997eafe5e62b|1a99fdf6-2700-f79b-be84-a1ba6cb307c0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-58":{"id":"e-58","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-57"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".pdp-layout-row","originalId":"69c2668b77c7997eafe5e62b|1a99fdf6-2700-f79b-be84-a1ba6cb307c0","appliesTo":"CLASS"},"targets":[{"selector":".pdp-layout-row","originalId":"69c2668b77c7997eafe5e62b|1a99fdf6-2700-f79b-be84-a1ba6cb307c0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-59":{"id":"e-59","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-58"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-8","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-8","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-60":{"id":"e-60","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-57"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-8","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-8","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-61":{"id":"e-61","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-62"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-3","originalId":"69d61ae0e707bad0c9eb8a59|f3d407b1-7a10-56d4-2fe0-3777fc0127eb","appliesTo":"CLASS"},"targets":[{"selector":".row-3","originalId":"69d61ae0e707bad0c9eb8a59|f3d407b1-7a10-56d4-2fe0-3777fc0127eb","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-62":{"id":"e-62","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-61"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-3","originalId":"69d61ae0e707bad0c9eb8a59|f3d407b1-7a10-56d4-2fe0-3777fc0127eb","appliesTo":"CLASS"},"targets":[{"selector":".row-3","originalId":"69d61ae0e707bad0c9eb8a59|f3d407b1-7a10-56d4-2fe0-3777fc0127eb","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-63":{"id":"e-63","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-28"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-9","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-9","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-64":{"id":"e-64","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-27"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-9","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-9","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-65":{"id":"e-65","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-28"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-10","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-10","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-66":{"id":"e-66","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-27"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-10","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-10","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-67":{"id":"e-67","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-28"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-11","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-11","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-68":{"id":"e-68","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-27"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-11","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-11","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":0,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-69":{"id":"e-69","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-58"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":null,"originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":null,"originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-70":{"id":"e-70","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-57"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":null,"originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":null,"originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-40,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-71":{"id":"e-71","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-58"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-12","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-12","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-72":{"id":"e-72","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-57"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-12","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-12","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-40,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-73":{"id":"e-73","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-78"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-14","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-14","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-74":{"id":"e-74","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-77"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-14","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-14","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-40,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-75":{"id":"e-75","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-78"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-15","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-15","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-76":{"id":"e-76","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-77"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-15","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-15","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-40,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-77":{"id":"e-77","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-78"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".pdp-layout-row","originalId":"69c2668b77c7997eafe5e62b|1a99fdf6-2700-f79b-be84-a1ba6cb307c0","appliesTo":"CLASS"},"targets":[{"selector":".pdp-layout-row","originalId":"69c2668b77c7997eafe5e62b|1a99fdf6-2700-f79b-be84-a1ba6cb307c0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-78":{"id":"e-78","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-77"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".pdp-layout-row","originalId":"69c2668b77c7997eafe5e62b|1a99fdf6-2700-f79b-be84-a1ba6cb307c0","appliesTo":"CLASS"},"targets":[{"selector":".pdp-layout-row","originalId":"69c2668b77c7997eafe5e62b|1a99fdf6-2700-f79b-be84-a1ba6cb307c0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-79":{"id":"e-79","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-28"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-16","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-16","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-80":{"id":"e-80","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-27"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-16","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-16","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-40,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-81":{"id":"e-81","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-82"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-11","originalId":"6aaa300ad9203962d6e96072|db145562-7fe8-7eaa-b5b8-6c2170248be9","appliesTo":"CLASS"},"targets":[{"selector":".row-11","originalId":"6aaa300ad9203962d6e96072|db145562-7fe8-7eaa-b5b8-6c2170248be9","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":20,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-82":{"id":"e-82","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-81"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-11","originalId":"6aaa300ad9203962d6e96072|db145562-7fe8-7eaa-b5b8-6c2170248be9","appliesTo":"CLASS"},"targets":[{"selector":".row-11","originalId":"6aaa300ad9203962d6e96072|db145562-7fe8-7eaa-b5b8-6c2170248be9","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-83":{"id":"e-83","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-58"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-17","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-17","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-84":{"id":"e-84","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-57"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-17","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-17","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-40,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-85":{"id":"e-85","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-58"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":null,"originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":null,"originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-86":{"id":"e-86","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-57"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":null,"originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":null,"originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-40,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-87":{"id":"e-87","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-58"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-18","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-18","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-88":{"id":"e-88","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-57"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-18","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-18","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-40,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-89":{"id":"e-89","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-58"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":null,"originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":null,"originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-90":{"id":"e-90","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-57"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":null,"originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":null,"originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-40,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-91":{"id":"e-91","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-58"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-19","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-19","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-92":{"id":"e-92","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-57"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-19","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-19","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-40,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379},"e-93":{"id":"e-93","name":"","animationType":"preset","eventTypeId":"SCROLL_INTO_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideInBottom","autoStopEventId":"e-58"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-21","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-21","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":10,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":true},"createdOn":1774948767378},"e-94":{"id":"e-94","name":"","animationType":"preset","eventTypeId":"SCROLL_OUT_OF_VIEW","action":{"id":"","actionTypeId":"SLIDE_EFFECT","instant":false,"config":{"actionListId":"slideOutBottom","autoStopEventId":"e-57"}},"mediaQueries":["main","medium","small","tiny"],"target":{"selector":".row-21","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"},"targets":[{"selector":".row-21","originalId":"69c2668b77c7997eafe5e62b|d92a2758-0b59-f155-f50a-3059a5d1bed0","appliesTo":"CLASS"}],"config":{"loop":false,"playInReverse":false,"scrollOffsetValue":-40,"scrollOffsetUnit":"%","delay":0,"direction":"BOTTOM","effectIn":false},"createdOn":1774948767379}},"actionLists":{"a":{"id":"a","title":"color-red 2","actionItemGroups":[{"actionItems":[{"id":"a-n","actionTypeId":"STYLE_BACKGROUND_COLOR","config":{"delay":0,"easing":"","duration":500,"target":{},"globalSwatchId":"","rValue":255,"bValue":62,"gValue":62,"aValue":1}},{"id":"a-n-2","actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"","duration":500,"target":{},"value":1,"unit":""}},{"id":"a-n-3","actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"","duration":500,"target":{},"value":0,"unit":""}},{"id":"a-n-4","actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"","duration":500,"target":{},"xValue":-41,"xUnit":"px","yUnit":"PX","zUnit":"PX"}},{"id":"a-n-5","actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"","duration":500,"target":{},"value":0,"unit":""}}]}],"useFirstGroupAsInitialState":false,"createdOn":1769064936911},"a-2":{"id":"a-2","title":"color-red 5","actionItemGroups":[{"actionItems":[{"id":"a-2-n","actionTypeId":"STYLE_BACKGROUND_COLOR","config":{"delay":0,"easing":"","duration":500,"target":{},"globalSwatchId":"","rValue":56,"bValue":236,"gValue":152,"aValue":1}},{"id":"a-2-n-2","actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"","duration":500,"target":{},"value":0,"unit":""}},{"id":"a-2-n-3","actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"","duration":500,"target":{},"value":1,"unit":""}},{"id":"a-2-n-4","actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"","duration":500,"target":{},"xValue":0,"xUnit":"px","yUnit":"PX","zUnit":"PX"}},{"id":"a-2-n-5","actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"","duration":500,"target":{},"value":1,"unit":""}}]}],"useFirstGroupAsInitialState":false,"createdOn":1769064936911},"slideInBottom":{"id":"slideInBottom","useFirstGroupAsInitialState":true,"actionItemGroups":[{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":0}}]},{"actionItems":[{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"duration":0,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":0,"yValue":100,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]},{"actionItems":[{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":0,"yValue":0,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}},{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"outQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":1}}]}]},"slideOutBottom":{"id":"slideOutBottom","actionItemGroups":[{"actionItems":[{"actionTypeId":"STYLE_OPACITY","config":{"delay":0,"easing":"inQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"value":0}},{"actionTypeId":"TRANSFORM_MOVE","config":{"delay":0,"easing":"inQuart","duration":1000,"target":{"id":"N/A","appliesTo":"TRIGGER_ELEMENT","useEventTarget":true},"xValue":0,"yValue":100,"xUnit":"PX","yUnit":"PX","zUnit":"PX"}}]}]}},"site":{"mediaQueries":[{"key":"main","min":992,"max":10000},{"key":"medium","min":768,"max":991},{"key":"small","min":480,"max":767},{"key":"tiny","min":0,"max":479}]}} ); }), }); /************************************************************************/ // The module cache var __webpack_module_cache__ = {}; // The require function function __webpack_require__(moduleId) { // Check if module is in cache var cachedModule = __webpack_module_cache__[moduleId]; if (cachedModule !== undefined) { return cachedModule.exports; } // Create a new module (and put it into the cache) var module = (__webpack_module_cache__[moduleId] = { id: moduleId, loaded: false, exports: {} }); // Execute the module function __webpack_modules__[moduleId](module, module.exports, __webpack_require__); // Flag the module as loaded module.loaded = true; // Return the exports of the module return module.exports; } /************************************************************************/ // webpack/runtime/define_property_getters (() => { __webpack_require__.d = (exports, definition) => { for(var key in definition) { if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); } } }; })(); // webpack/runtime/esm_module_decorator (() => { __webpack_require__.hmd = (module) => { module = Object.create(module); if (!module.children) module.children = []; Object.defineProperty(module, 'exports', { enumerable: true, set: () => { throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id); } }); return module; }; })(); // webpack/runtime/global (() => { __webpack_require__.g = (() => { if (typeof globalThis === 'object') return globalThis; try { return this || new Function('return this')(); } catch (e) { if (typeof window === 'object') return window; } })(); })(); // webpack/runtime/has_own_property (() => { __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) })(); // webpack/runtime/make_namespace_object (() => { // define __esModule on exports __webpack_require__.r = (exports) => { if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); } Object.defineProperty(exports, '__esModule', { value: true }); }; })(); // webpack/runtime/node_module_decorator (() => { __webpack_require__.nmd = (module) => { module.paths = []; if (!module.children) module.children = []; return module; }; })(); // webpack/runtime/rspack_version (() => { __webpack_require__.rv = () => ("1.3.9") })(); // webpack/runtime/rspack_unique_id (() => { __webpack_require__.ruid = "bundler=rspack@1.3.9"; })(); /************************************************************************/ var __webpack_exports__ = {}; // This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. (() => { __webpack_require__(9461);__webpack_require__(7624);__webpack_require__(286);__webpack_require__(8334);__webpack_require__(2338);__webpack_require__(3695);__webpack_require__(941);__webpack_require__(5134);__webpack_require__(3220); })(); })() ;