{"version":3,"file":"uikit.js","mappings":"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","sources":["webpack://acenden/./node_modules/uikit/dist/js/uikit-icons.js","webpack://acenden/./node_modules/uikit/dist/js/uikit.js","webpack://acenden/webpack/bootstrap","webpack://acenden/webpack/runtime/compat get default export","webpack://acenden/webpack/runtime/define property getters","webpack://acenden/webpack/runtime/hasOwnProperty shorthand","webpack://acenden/./assets/src/project/js/uikit.js"],"sourcesContent":["/*! UIkit 3.16.14 | https://www.getuikit.com | (c) 2014 - 2023 YOOtheme | MIT License */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('uikiticons', factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.UIkitIcons = factory());\n})(this, (function () { 'use strict';\n\n function plugin(UIkit) {\n if (plugin.installed) {\n return;\n }\n UIkit.icon.add({\n \"youtube\": '',\n \"yootheme\": '',\n \"yelp\": '',\n \"xing\": '',\n \"world\": '',\n \"wordpress\": '',\n \"whatsapp\": '',\n \"warning\": '',\n \"vimeo\": '',\n \"video-camera\": '',\n \"users\": '',\n \"user\": '',\n \"upload\": '',\n \"unlock\": '',\n \"uikit\": '',\n \"twitter\": '',\n \"twitch\": '',\n \"tv\": '',\n \"tumblr\": '',\n \"tripadvisor\": '',\n \"triangle-up\": '',\n \"triangle-right\": '',\n \"triangle-left\": '',\n \"triangle-down\": '',\n \"trash\": '',\n \"tiktok\": '',\n \"thumbnails\": '',\n \"tag\": '',\n \"tablet\": '',\n \"tablet-landscape\": '',\n \"table\": '',\n \"strikethrough\": '',\n \"star\": '',\n \"soundcloud\": '',\n \"social\": '',\n \"sign-out\": '',\n \"sign-in\": '',\n \"shrink\": '',\n \"settings\": '',\n \"server\": '',\n \"search\": '',\n \"rss\": '',\n \"reply\": '',\n \"refresh\": '',\n \"reddit\": '',\n \"receiver\": '',\n \"quote-right\": '',\n \"question\": '',\n \"push\": '',\n \"pull\": '',\n \"print\": '',\n \"plus\": '',\n \"plus-circle\": '',\n \"play\": '',\n \"play-circle\": '',\n \"pinterest\": '',\n \"phone\": '',\n \"phone-landscape\": '',\n \"pencil\": '',\n \"paint-bucket\": '',\n \"pagekit\": '',\n \"nut\": '',\n \"move\": '',\n \"more\": '',\n \"more-vertical\": '',\n \"minus\": '',\n \"minus-circle\": '',\n \"microsoft\": '',\n \"microphone\": '',\n \"menu\": '',\n \"mastodon\": '',\n \"mail\": '',\n \"lock\": '',\n \"location\": '',\n \"list\": '',\n \"linkedin\": '',\n \"link\": '',\n \"lifesaver\": '',\n \"laptop\": '',\n \"joomla\": '',\n \"italic\": '',\n \"instagram\": '',\n \"info\": '',\n \"image\": '',\n \"home\": '',\n \"history\": '',\n \"heart\": '',\n \"hashtag\": '',\n \"happy\": '',\n \"grid\": '',\n \"google\": '',\n \"gitter\": '',\n \"github\": '',\n \"github-alt\": '',\n \"git-fork\": '',\n \"git-branch\": '',\n \"future\": '',\n \"foursquare\": '',\n \"forward\": '',\n \"folder\": '',\n \"flickr\": '',\n \"file\": '',\n \"file-text\": '',\n \"file-pdf\": '',\n \"file-edit\": '',\n \"facebook\": '',\n \"eye\": '',\n \"eye-slash\": '',\n \"expand\": '',\n \"etsy\": '',\n \"dribbble\": '',\n \"download\": '',\n \"discord\": '',\n \"desktop\": '',\n \"database\": '',\n \"crosshairs\": '',\n \"credit-card\": '',\n \"copy\": '',\n \"comments\": '',\n \"commenting\": '',\n \"comment\": '',\n \"cog\": '',\n \"code\": '',\n \"cloud-upload\": '',\n \"cloud-download\": '',\n \"close\": '',\n \"clock\": '',\n \"chevron-up\": '',\n \"chevron-right\": '',\n \"chevron-left\": '',\n \"chevron-down\": '',\n \"chevron-double-right\": '',\n \"chevron-double-left\": '',\n \"check\": '',\n \"cart\": '',\n \"camera\": '',\n \"calendar\": '',\n \"bookmark\": '',\n \"bolt\": '',\n \"bold\": '',\n \"bell\": '',\n \"behance\": '',\n \"ban\": '',\n \"bag\": '',\n \"arrow-up\": '',\n \"arrow-right\": '',\n \"arrow-left\": '',\n \"arrow-down\": '',\n \"apple\": '',\n \"android\": '',\n \"android-robot\": '',\n \"album\": '',\n \"500px\": ''\n });\n }\n if (typeof window !== \"undefined\" && window.UIkit) {\n window.UIkit.use(plugin);\n }\n\n return plugin;\n\n}));\n","/*! UIkit 3.16.13 | https://www.getuikit.com | (c) 2014 - 2023 YOOtheme | MIT License */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('uikit', factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.UIkit = factory());\n})(this, (function () { 'use strict';\n\n const { hasOwnProperty, toString } = Object.prototype;\n function hasOwn(obj, key) {\n return hasOwnProperty.call(obj, key);\n }\n const hyphenateRe = /\\B([A-Z])/g;\n const hyphenate = memoize((str) => str.replace(hyphenateRe, \"-$1\").toLowerCase());\n const camelizeRe = /-(\\w)/g;\n const camelize = memoize(\n (str) => (str.charAt(0).toLowerCase() + str.slice(1)).replace(camelizeRe, (_, c) => c.toUpperCase())\n );\n const ucfirst = memoize((str) => str.charAt(0).toUpperCase() + str.slice(1));\n function startsWith(str, search) {\n var _a;\n return (_a = str == null ? void 0 : str.startsWith) == null ? void 0 : _a.call(str, search);\n }\n function endsWith(str, search) {\n var _a;\n return (_a = str == null ? void 0 : str.endsWith) == null ? void 0 : _a.call(str, search);\n }\n function includes(obj, search) {\n var _a;\n return (_a = obj == null ? void 0 : obj.includes) == null ? void 0 : _a.call(obj, search);\n }\n function findIndex(array, predicate) {\n var _a;\n return (_a = array == null ? void 0 : array.findIndex) == null ? void 0 : _a.call(array, predicate);\n }\n const { isArray, from: toArray } = Array;\n const { assign } = Object;\n function isFunction(obj) {\n return typeof obj === \"function\";\n }\n function isObject(obj) {\n return obj !== null && typeof obj === \"object\";\n }\n function isPlainObject(obj) {\n return toString.call(obj) === \"[object Object]\";\n }\n function isWindow(obj) {\n return isObject(obj) && obj === obj.window;\n }\n function isDocument(obj) {\n return nodeType(obj) === 9;\n }\n function isNode(obj) {\n return nodeType(obj) >= 1;\n }\n function isElement(obj) {\n return nodeType(obj) === 1;\n }\n function nodeType(obj) {\n return !isWindow(obj) && isObject(obj) && obj.nodeType;\n }\n function isBoolean(value) {\n return typeof value === \"boolean\";\n }\n function isString(value) {\n return typeof value === \"string\";\n }\n function isNumber(value) {\n return typeof value === \"number\";\n }\n function isNumeric(value) {\n return isNumber(value) || isString(value) && !isNaN(value - parseFloat(value));\n }\n function isEmpty(obj) {\n return !(isArray(obj) ? obj.length : isObject(obj) ? Object.keys(obj).length : false);\n }\n function isUndefined(value) {\n return value === void 0;\n }\n function toBoolean(value) {\n return isBoolean(value) ? value : value === \"true\" || value === \"1\" || value === \"\" ? true : value === \"false\" || value === \"0\" ? false : value;\n }\n function toNumber(value) {\n const number = Number(value);\n return isNaN(number) ? false : number;\n }\n function toFloat(value) {\n return parseFloat(value) || 0;\n }\n function toNode(element) {\n return toNodes(element)[0];\n }\n function toNodes(element) {\n return isNode(element) ? [element] : Array.from(element || []).filter(isNode);\n }\n function toWindow(element) {\n if (isWindow(element)) {\n return element;\n }\n element = toNode(element);\n const document = isDocument(element) ? element : element == null ? void 0 : element.ownerDocument;\n return (document == null ? void 0 : document.defaultView) || window;\n }\n function isEqual(value, other) {\n return value === other || isObject(value) && isObject(other) && Object.keys(value).length === Object.keys(other).length && each(value, (val, key) => val === other[key]);\n }\n function swap(value, a, b) {\n return value.replace(new RegExp(`${a}|${b}`, \"g\"), (match) => match === a ? b : a);\n }\n function last(array) {\n return array[array.length - 1];\n }\n function each(obj, cb) {\n for (const key in obj) {\n if (false === cb(obj[key], key)) {\n return false;\n }\n }\n return true;\n }\n function sortBy$1(array, prop) {\n return array.slice().sort(\n ({ [prop]: propA = 0 }, { [prop]: propB = 0 }) => propA > propB ? 1 : propB > propA ? -1 : 0\n );\n }\n function sumBy(array, iteratee) {\n return array.reduce(\n (sum, item) => sum + toFloat(isFunction(iteratee) ? iteratee(item) : item[iteratee]),\n 0\n );\n }\n function uniqueBy(array, prop) {\n const seen = /* @__PURE__ */ new Set();\n return array.filter(({ [prop]: check }) => seen.has(check) ? false : seen.add(check));\n }\n function pick(obj, props) {\n return props.reduce((res, prop) => ({ ...res, [prop]: obj[prop] }), {});\n }\n function clamp(number, min = 0, max = 1) {\n return Math.min(Math.max(toNumber(number) || 0, min), max);\n }\n function noop() {\n }\n function intersectRect(...rects) {\n return [\n [\"bottom\", \"top\"],\n [\"right\", \"left\"]\n ].every(\n ([minProp, maxProp]) => Math.min(...rects.map(({ [minProp]: min }) => min)) - Math.max(...rects.map(({ [maxProp]: max }) => max)) > 0\n );\n }\n function pointInRect(point, rect) {\n return point.x <= rect.right && point.x >= rect.left && point.y <= rect.bottom && point.y >= rect.top;\n }\n function ratio(dimensions, prop, value) {\n const aProp = prop === \"width\" ? \"height\" : \"width\";\n return {\n [aProp]: dimensions[prop] ? Math.round(value * dimensions[aProp] / dimensions[prop]) : dimensions[aProp],\n [prop]: value\n };\n }\n function contain(dimensions, maxDimensions) {\n dimensions = { ...dimensions };\n for (const prop in dimensions) {\n dimensions = dimensions[prop] > maxDimensions[prop] ? ratio(dimensions, prop, maxDimensions[prop]) : dimensions;\n }\n return dimensions;\n }\n function cover$1(dimensions, maxDimensions) {\n dimensions = contain(dimensions, maxDimensions);\n for (const prop in dimensions) {\n dimensions = dimensions[prop] < maxDimensions[prop] ? ratio(dimensions, prop, maxDimensions[prop]) : dimensions;\n }\n return dimensions;\n }\n const Dimensions = { ratio, contain, cover: cover$1 };\n function getIndex(i, elements, current = 0, finite = false) {\n elements = toNodes(elements);\n const { length } = elements;\n if (!length) {\n return -1;\n }\n i = isNumeric(i) ? toNumber(i) : i === \"next\" ? current + 1 : i === \"previous\" ? current - 1 : i === \"last\" ? length - 1 : elements.indexOf(toNode(i));\n if (finite) {\n return clamp(i, 0, length - 1);\n }\n i %= length;\n return i < 0 ? i + length : i;\n }\n function memoize(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (key) => cache[key] || (cache[key] = fn(key));\n }\n class Deferred {\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.reject = reject;\n this.resolve = resolve;\n });\n }\n }\n\n function attr(element, name, value) {\n var _a;\n if (isObject(name)) {\n for (const key in name) {\n attr(element, key, name[key]);\n }\n return;\n }\n if (isUndefined(value)) {\n return (_a = toNode(element)) == null ? void 0 : _a.getAttribute(name);\n } else {\n for (const el of toNodes(element)) {\n if (isFunction(value)) {\n value = value.call(el, attr(el, name));\n }\n if (value === null) {\n removeAttr(el, name);\n } else {\n el.setAttribute(name, value);\n }\n }\n }\n }\n function hasAttr(element, name) {\n return toNodes(element).some((element2) => element2.hasAttribute(name));\n }\n function removeAttr(element, name) {\n toNodes(element).forEach((element2) => element2.removeAttribute(name));\n }\n function data(element, attribute) {\n for (const name of [attribute, `data-${attribute}`]) {\n if (hasAttr(element, name)) {\n return attr(element, name);\n }\n }\n }\n\n const voidElements = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true\n };\n function isVoidElement(element) {\n return toNodes(element).some((element2) => voidElements[element2.tagName.toLowerCase()]);\n }\n function isVisible(element) {\n return toNodes(element).some(\n (element2) => element2.offsetWidth || element2.offsetHeight || element2.getClientRects().length\n );\n }\n const selInput = \"input,select,textarea,button\";\n function isInput(element) {\n return toNodes(element).some((element2) => matches(element2, selInput));\n }\n const selFocusable = `${selInput},a[href],[tabindex]`;\n function isFocusable(element) {\n return matches(element, selFocusable);\n }\n function parent(element) {\n var _a;\n return (_a = toNode(element)) == null ? void 0 : _a.parentElement;\n }\n function filter$1(element, selector) {\n return toNodes(element).filter((element2) => matches(element2, selector));\n }\n function matches(element, selector) {\n return toNodes(element).some((element2) => element2.matches(selector));\n }\n function closest(element, selector) {\n return isElement(element) ? element.closest(startsWith(selector, \">\") ? selector.slice(1) : selector) : toNodes(element).map((element2) => closest(element2, selector)).filter(Boolean);\n }\n function within(element, selector) {\n return isString(selector) ? !!closest(element, selector) : toNode(selector).contains(toNode(element));\n }\n function parents(element, selector) {\n const elements = [];\n while (element = parent(element)) {\n if (!selector || matches(element, selector)) {\n elements.push(element);\n }\n }\n return elements;\n }\n function children(element, selector) {\n element = toNode(element);\n const children2 = element ? toArray(element.children) : [];\n return selector ? filter$1(children2, selector) : children2;\n }\n function index(element, ref) {\n return ref ? toNodes(element).indexOf(toNode(ref)) : children(parent(element)).indexOf(element);\n }\n function isSameSiteAnchor(el) {\n el = toNode(el);\n return el && [\"origin\", \"pathname\", \"search\"].every((part) => el[part] === location[part]);\n }\n function getTargetedElement(el) {\n if (isSameSiteAnchor(el)) {\n el = toNode(el);\n const id = decodeURIComponent(el.hash).substring(1);\n return document.getElementById(id) || document.getElementsByName(id)[0];\n }\n }\n\n function query(selector, context) {\n return find(selector, getContext(selector, context));\n }\n function queryAll(selector, context) {\n return findAll(selector, getContext(selector, context));\n }\n function find(selector, context) {\n return toNode(_query(selector, toNode(context), \"querySelector\"));\n }\n function findAll(selector, context) {\n return toNodes(_query(selector, toNode(context), \"querySelectorAll\"));\n }\n const contextSelectorRe = /(^|[^\\\\],)\\s*[!>+~-]/;\n const isContextSelector = memoize((selector) => selector.match(contextSelectorRe));\n function getContext(selector, context = document) {\n return isString(selector) && isContextSelector(selector) || isDocument(context) ? context : context.ownerDocument;\n }\n const contextSanitizeRe = /([!>+~-])(?=\\s+[!>+~-]|\\s*$)/g;\n const sanatize = memoize((selector) => selector.replace(contextSanitizeRe, \"$1 *\"));\n function _query(selector, context = document, queryFn) {\n if (!selector || !isString(selector)) {\n return selector;\n }\n selector = sanatize(selector);\n if (isContextSelector(selector)) {\n const split = splitSelector(selector);\n selector = \"\";\n for (let sel of split) {\n let ctx = context;\n if (sel[0] === \"!\") {\n const selectors = sel.substr(1).trim().split(\" \");\n ctx = closest(parent(context), selectors[0]);\n sel = selectors.slice(1).join(\" \").trim();\n if (!sel.length && split.length === 1) {\n return ctx;\n }\n }\n if (sel[0] === \"-\") {\n const selectors = sel.substr(1).trim().split(\" \");\n const prev = (ctx || context).previousElementSibling;\n ctx = matches(prev, sel.substr(1)) ? prev : null;\n sel = selectors.slice(1).join(\" \");\n }\n if (ctx) {\n selector += `${selector ? \",\" : \"\"}${domPath(ctx)} ${sel}`;\n }\n }\n context = document;\n }\n try {\n return context[queryFn](selector);\n } catch (e) {\n return null;\n }\n }\n const selectorRe = /.*?[^\\\\](?:,|$)/g;\n const splitSelector = memoize(\n (selector) => selector.match(selectorRe).map((selector2) => selector2.replace(/,$/, \"\").trim())\n );\n function domPath(element) {\n const names = [];\n while (element.parentNode) {\n const id = attr(element, \"id\");\n if (id) {\n names.unshift(`#${escape(id)}`);\n break;\n } else {\n let { tagName } = element;\n if (tagName !== \"HTML\") {\n tagName += `:nth-child(${index(element) + 1})`;\n }\n names.unshift(tagName);\n element = element.parentNode;\n }\n }\n return names.join(\" > \");\n }\n function escape(css) {\n return isString(css) ? CSS.escape(css) : \"\";\n }\n\n function on(...args) {\n let [targets, types, selector, listener, useCapture = false] = getArgs(args);\n if (listener.length > 1) {\n listener = detail(listener);\n }\n if (useCapture == null ? void 0 : useCapture.self) {\n listener = selfFilter(listener);\n }\n if (selector) {\n listener = delegate(selector, listener);\n }\n for (const type of types) {\n for (const target of targets) {\n target.addEventListener(type, listener, useCapture);\n }\n }\n return () => off(targets, types, listener, useCapture);\n }\n function off(...args) {\n let [targets, types, , listener, useCapture = false] = getArgs(args);\n for (const type of types) {\n for (const target of targets) {\n target.removeEventListener(type, listener, useCapture);\n }\n }\n }\n function once(...args) {\n const [element, types, selector, listener, useCapture = false, condition] = getArgs(args);\n const off2 = on(\n element,\n types,\n selector,\n (e) => {\n const result = !condition || condition(e);\n if (result) {\n off2();\n listener(e, result);\n }\n },\n useCapture\n );\n return off2;\n }\n function trigger(targets, event, detail2) {\n return toEventTargets(targets).every(\n (target) => target.dispatchEvent(createEvent(event, true, true, detail2))\n );\n }\n function createEvent(e, bubbles = true, cancelable = false, detail2) {\n if (isString(e)) {\n e = new CustomEvent(e, { bubbles, cancelable, detail: detail2 });\n }\n return e;\n }\n function getArgs(args) {\n args[0] = toEventTargets(args[0]);\n if (isString(args[1])) {\n args[1] = args[1].split(\" \");\n }\n if (isFunction(args[2])) {\n args.splice(2, 0, false);\n }\n return args;\n }\n function delegate(selector, listener) {\n return (e) => {\n const current = selector[0] === \">\" ? findAll(selector, e.currentTarget).reverse().filter((element) => within(e.target, element))[0] : closest(e.target, selector);\n if (current) {\n e.current = current;\n listener.call(this, e);\n delete e.current;\n }\n };\n }\n function detail(listener) {\n return (e) => isArray(e.detail) ? listener(e, ...e.detail) : listener(e);\n }\n function selfFilter(listener) {\n return function(e) {\n if (e.target === e.currentTarget || e.target === e.current) {\n return listener.call(null, e);\n }\n };\n }\n function isEventTarget(target) {\n return target && \"addEventListener\" in target;\n }\n function toEventTarget(target) {\n return isEventTarget(target) ? target : toNode(target);\n }\n function toEventTargets(target) {\n return isArray(target) ? target.map(toEventTarget).filter(Boolean) : isString(target) ? findAll(target) : isEventTarget(target) ? [target] : toNodes(target);\n }\n function isTouch(e) {\n return e.pointerType === \"touch\" || !!e.touches;\n }\n function getEventPos(e) {\n var _a, _b;\n const { clientX: x, clientY: y } = ((_a = e.touches) == null ? void 0 : _a[0]) || ((_b = e.changedTouches) == null ? void 0 : _b[0]) || e;\n return { x, y };\n }\n\n const cssNumber = {\n \"animation-iteration-count\": true,\n \"column-count\": true,\n \"fill-opacity\": true,\n \"flex-grow\": true,\n \"flex-shrink\": true,\n \"font-weight\": true,\n \"line-height\": true,\n opacity: true,\n order: true,\n orphans: true,\n \"stroke-dasharray\": true,\n \"stroke-dashoffset\": true,\n widows: true,\n \"z-index\": true,\n zoom: true\n };\n function css(element, property, value, priority) {\n const elements = toNodes(element);\n for (const element2 of elements) {\n if (isString(property)) {\n property = propName(property);\n if (isUndefined(value)) {\n return getComputedStyle(element2).getPropertyValue(property);\n } else {\n element2.style.setProperty(\n property,\n isNumeric(value) && !cssNumber[property] ? `${value}px` : value || isNumber(value) ? value : \"\",\n priority\n );\n }\n } else if (isArray(property)) {\n const props = {};\n for (const prop of property) {\n props[prop] = css(element2, prop);\n }\n return props;\n } else if (isObject(property)) {\n priority = value;\n each(property, (value2, property2) => css(element2, property2, value2, priority));\n }\n }\n return elements[0];\n }\n const propName = memoize((name) => vendorPropName(name));\n function vendorPropName(name) {\n if (startsWith(name, \"--\")) {\n return name;\n }\n name = hyphenate(name);\n const { style } = document.documentElement;\n if (name in style) {\n return name;\n }\n for (const prefix of [\"webkit\", \"moz\"]) {\n const prefixedName = `-${prefix}-${name}`;\n if (prefixedName in style) {\n return prefixedName;\n }\n }\n }\n\n function addClass(element, ...args) {\n apply$1(element, args, \"add\");\n }\n function removeClass(element, ...args) {\n apply$1(element, args, \"remove\");\n }\n function removeClasses(element, cls) {\n attr(\n element,\n \"class\",\n (value) => (value || \"\").replace(new RegExp(`\\\\b${cls}\\\\b\\\\s?`, \"g\"), \"\")\n );\n }\n function replaceClass(element, ...args) {\n args[0] && removeClass(element, args[0]);\n args[1] && addClass(element, args[1]);\n }\n function hasClass(element, cls) {\n [cls] = getClasses(cls);\n return !!cls && toNodes(element).some((node) => node.classList.contains(cls));\n }\n function toggleClass(element, cls, force) {\n const classes = getClasses(cls);\n if (!isUndefined(force)) {\n force = !!force;\n }\n for (const node of toNodes(element)) {\n for (const cls2 of classes) {\n node.classList.toggle(cls2, force);\n }\n }\n }\n function apply$1(element, args, fn) {\n args = args.reduce((args2, arg) => args2.concat(getClasses(arg)), []);\n for (const node of toNodes(element)) {\n node.classList[fn](...args);\n }\n }\n function getClasses(str) {\n return String(str).split(/[ ,]/).filter(Boolean);\n }\n\n function transition$1(element, props, duration = 400, timing = \"linear\") {\n duration = Math.round(duration);\n return Promise.all(\n toNodes(element).map(\n (element2) => new Promise((resolve, reject) => {\n for (const name in props) {\n const value = css(element2, name);\n if (value === \"\") {\n css(element2, name, value);\n }\n }\n const timer = setTimeout(() => trigger(element2, \"transitionend\"), duration);\n once(\n element2,\n \"transitionend transitioncanceled\",\n ({ type }) => {\n clearTimeout(timer);\n removeClass(element2, \"uk-transition\");\n css(element2, {\n transitionProperty: \"\",\n transitionDuration: \"\",\n transitionTimingFunction: \"\"\n });\n type === \"transitioncanceled\" ? reject() : resolve(element2);\n },\n { self: true }\n );\n addClass(element2, \"uk-transition\");\n css(element2, {\n transitionProperty: Object.keys(props).map(propName).join(\",\"),\n transitionDuration: `${duration}ms`,\n transitionTimingFunction: timing,\n ...props\n });\n })\n )\n );\n }\n const Transition = {\n start: transition$1,\n async stop(element) {\n trigger(element, \"transitionend\");\n await Promise.resolve();\n },\n async cancel(element) {\n trigger(element, \"transitioncanceled\");\n await Promise.resolve();\n },\n inProgress(element) {\n return hasClass(element, \"uk-transition\");\n }\n };\n const animationPrefix = \"uk-animation-\";\n function animate$2(element, animation, duration = 200, origin, out) {\n return Promise.all(\n toNodes(element).map(\n (element2) => new Promise((resolve, reject) => {\n trigger(element2, \"animationcanceled\");\n const timer = setTimeout(() => trigger(element2, \"animationend\"), duration);\n once(\n element2,\n \"animationend animationcanceled\",\n ({ type }) => {\n clearTimeout(timer);\n type === \"animationcanceled\" ? reject() : resolve(element2);\n css(element2, \"animationDuration\", \"\");\n removeClasses(element2, `${animationPrefix}\\\\S*`);\n },\n { self: true }\n );\n css(element2, \"animationDuration\", `${duration}ms`);\n addClass(element2, animation, animationPrefix + (out ? \"leave\" : \"enter\"));\n if (startsWith(animation, animationPrefix)) {\n origin && addClass(element2, `uk-transform-origin-${origin}`);\n out && addClass(element2, `${animationPrefix}reverse`);\n }\n })\n )\n );\n }\n const inProgressRe = new RegExp(`${animationPrefix}(enter|leave)`);\n const Animation = {\n in: animate$2,\n out(element, animation, duration, origin) {\n return animate$2(element, animation, duration, origin, true);\n },\n inProgress(element) {\n return inProgressRe.test(attr(element, \"class\"));\n },\n cancel(element) {\n trigger(element, \"animationcanceled\");\n }\n };\n\n function ready(fn) {\n if (document.readyState !== \"loading\") {\n fn();\n return;\n }\n once(document, \"DOMContentLoaded\", fn);\n }\n function isTag(element, ...tagNames) {\n return tagNames.some((tagName) => {\n var _a;\n return ((_a = element == null ? void 0 : element.tagName) == null ? void 0 : _a.toLowerCase()) === tagName.toLowerCase();\n });\n }\n function empty(element) {\n element = $(element);\n element.innerHTML = \"\";\n return element;\n }\n function html(parent2, html2) {\n return isUndefined(html2) ? $(parent2).innerHTML : append(empty(parent2), html2);\n }\n const prepend = applyFn(\"prepend\");\n const append = applyFn(\"append\");\n const before = applyFn(\"before\");\n const after = applyFn(\"after\");\n function applyFn(fn) {\n return function(ref, element) {\n var _a;\n const nodes = toNodes(isString(element) ? fragment(element) : element);\n (_a = $(ref)) == null ? void 0 : _a[fn](...nodes);\n return unwrapSingle(nodes);\n };\n }\n function remove$1(element) {\n toNodes(element).forEach((element2) => element2.remove());\n }\n function wrapAll(element, structure) {\n structure = toNode(before(element, structure));\n while (structure.firstChild) {\n structure = structure.firstChild;\n }\n append(structure, element);\n return structure;\n }\n function wrapInner(element, structure) {\n return toNodes(\n toNodes(element).map(\n (element2) => element2.hasChildNodes() ? wrapAll(toArray(element2.childNodes), structure) : append(element2, structure)\n )\n );\n }\n function unwrap(element) {\n toNodes(element).map(parent).filter((value, index, self) => self.indexOf(value) === index).forEach((parent2) => parent2.replaceWith(...parent2.childNodes));\n }\n const fragmentRe = /^\\s*<(\\w+|!)[^>]*>/;\n const singleTagRe = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/;\n function fragment(html2) {\n const matches = singleTagRe.exec(html2);\n if (matches) {\n return document.createElement(matches[1]);\n }\n const container = document.createElement(\"div\");\n if (fragmentRe.test(html2)) {\n container.insertAdjacentHTML(\"beforeend\", html2.trim());\n } else {\n container.textContent = html2;\n }\n return unwrapSingle(container.childNodes);\n }\n function unwrapSingle(nodes) {\n return nodes.length > 1 ? nodes : nodes[0];\n }\n function apply(node, fn) {\n if (!isElement(node)) {\n return;\n }\n fn(node);\n node = node.firstElementChild;\n while (node) {\n const next = node.nextElementSibling;\n apply(node, fn);\n node = next;\n }\n }\n function $(selector, context) {\n return isHtml(selector) ? toNode(fragment(selector)) : find(selector, context);\n }\n function $$(selector, context) {\n return isHtml(selector) ? toNodes(fragment(selector)) : findAll(selector, context);\n }\n function isHtml(str) {\n return isString(str) && startsWith(str.trim(), \"<\");\n }\n\n const dirs$1 = {\n width: [\"left\", \"right\"],\n height: [\"top\", \"bottom\"]\n };\n function dimensions$1(element) {\n const rect = isElement(element) ? toNode(element).getBoundingClientRect() : { height: height(element), width: width(element), top: 0, left: 0 };\n return {\n height: rect.height,\n width: rect.width,\n top: rect.top,\n left: rect.left,\n bottom: rect.top + rect.height,\n right: rect.left + rect.width\n };\n }\n function offset(element, coordinates) {\n const currentOffset = dimensions$1(element);\n if (element) {\n const { scrollY, scrollX } = toWindow(element);\n const offsetBy = { height: scrollY, width: scrollX };\n for (const dir in dirs$1) {\n for (const prop of dirs$1[dir]) {\n currentOffset[prop] += offsetBy[dir];\n }\n }\n }\n if (!coordinates) {\n return currentOffset;\n }\n const pos = css(element, \"position\");\n each(\n css(element, [\"left\", \"top\"]),\n (value, prop) => css(\n element,\n prop,\n coordinates[prop] - currentOffset[prop] + toFloat(pos === \"absolute\" && value === \"auto\" ? position(element)[prop] : value)\n )\n );\n }\n function position(element) {\n let { top, left } = offset(element);\n const {\n ownerDocument: { body, documentElement },\n offsetParent\n } = toNode(element);\n let parent = offsetParent || documentElement;\n while (parent && (parent === body || parent === documentElement) && css(parent, \"position\") === \"static\") {\n parent = parent.parentNode;\n }\n if (isElement(parent)) {\n const parentOffset = offset(parent);\n top -= parentOffset.top + toFloat(css(parent, \"borderTopWidth\"));\n left -= parentOffset.left + toFloat(css(parent, \"borderLeftWidth\"));\n }\n return {\n top: top - toFloat(css(element, \"marginTop\")),\n left: left - toFloat(css(element, \"marginLeft\"))\n };\n }\n function offsetPosition(element) {\n element = toNode(element);\n const offset2 = [element.offsetTop, element.offsetLeft];\n while (element = element.offsetParent) {\n offset2[0] += element.offsetTop + toFloat(css(element, `borderTopWidth`));\n offset2[1] += element.offsetLeft + toFloat(css(element, `borderLeftWidth`));\n if (css(element, \"position\") === \"fixed\") {\n const win = toWindow(element);\n offset2[0] += win.scrollY;\n offset2[1] += win.scrollX;\n return offset2;\n }\n }\n return offset2;\n }\n const height = dimension(\"height\");\n const width = dimension(\"width\");\n function dimension(prop) {\n const propName = ucfirst(prop);\n return (element, value) => {\n if (isUndefined(value)) {\n if (isWindow(element)) {\n return element[`inner${propName}`];\n }\n if (isDocument(element)) {\n const doc = element.documentElement;\n return Math.max(doc[`offset${propName}`], doc[`scroll${propName}`]);\n }\n element = toNode(element);\n value = css(element, prop);\n value = value === \"auto\" ? element[`offset${propName}`] : toFloat(value) || 0;\n return value - boxModelAdjust(element, prop);\n } else {\n return css(\n element,\n prop,\n !value && value !== 0 ? \"\" : +value + boxModelAdjust(element, prop) + \"px\"\n );\n }\n };\n }\n function boxModelAdjust(element, prop, sizing = \"border-box\") {\n return css(element, \"boxSizing\") === sizing ? sumBy(\n dirs$1[prop].map(ucfirst),\n (prop2) => toFloat(css(element, `padding${prop2}`)) + toFloat(css(element, `border${prop2}Width`))\n ) : 0;\n }\n function flipPosition(pos) {\n for (const dir in dirs$1) {\n for (const i in dirs$1[dir]) {\n if (dirs$1[dir][i] === pos) {\n return dirs$1[dir][1 - i];\n }\n }\n }\n return pos;\n }\n function toPx(value, property = \"width\", element = window, offsetDim = false) {\n if (!isString(value)) {\n return toFloat(value);\n }\n return sumBy(parseCalc(value), (value2) => {\n const unit = parseUnit(value2);\n return unit ? percent(\n unit === \"vh\" ? getViewportHeight() : unit === \"vw\" ? width(toWindow(element)) : offsetDim ? element[`offset${ucfirst(property)}`] : dimensions$1(element)[property],\n value2\n ) : value2;\n });\n }\n const calcRe = /-?\\d+(?:\\.\\d+)?(?:v[wh]|%|px)?/g;\n const parseCalc = memoize((calc) => calc.toString().replace(/\\s/g, \"\").match(calcRe) || []);\n const unitRe$1 = /(?:v[hw]|%)$/;\n const parseUnit = memoize((str) => (str.match(unitRe$1) || [])[0]);\n function percent(base, value) {\n return base * toFloat(value) / 100;\n }\n let vh;\n let vhEl;\n function getViewportHeight() {\n if (vh) {\n return vh;\n }\n if (!vhEl) {\n vhEl = $(\"
\");\n css(vhEl, {\n height: \"100vh\",\n position: \"fixed\"\n });\n on(window, \"resize\", () => vh = null);\n }\n append(document.body, vhEl);\n vh = vhEl.clientHeight;\n remove$1(vhEl);\n return vh;\n }\n\n const inBrowser = typeof window !== \"undefined\";\n const isRtl = inBrowser && document.dir === \"rtl\";\n const hasTouch = inBrowser && \"ontouchstart\" in window;\n const hasPointerEvents = inBrowser && window.PointerEvent;\n const pointerDown$1 = hasPointerEvents ? \"pointerdown\" : hasTouch ? \"touchstart\" : \"mousedown\";\n const pointerMove$1 = hasPointerEvents ? \"pointermove\" : hasTouch ? \"touchmove\" : \"mousemove\";\n const pointerUp$1 = hasPointerEvents ? \"pointerup\" : hasTouch ? \"touchend\" : \"mouseup\";\n const pointerEnter = hasPointerEvents ? \"pointerenter\" : hasTouch ? \"\" : \"mouseenter\";\n const pointerLeave = hasPointerEvents ? \"pointerleave\" : hasTouch ? \"\" : \"mouseleave\";\n const pointerCancel = hasPointerEvents ? \"pointercancel\" : \"touchcancel\";\n\n const fastdom = {\n reads: [],\n writes: [],\n read(task) {\n this.reads.push(task);\n scheduleFlush();\n return task;\n },\n write(task) {\n this.writes.push(task);\n scheduleFlush();\n return task;\n },\n clear(task) {\n remove(this.reads, task);\n remove(this.writes, task);\n },\n flush\n };\n function flush(recursion) {\n runTasks(fastdom.reads);\n runTasks(fastdom.writes.splice(0));\n fastdom.scheduled = false;\n if (fastdom.reads.length || fastdom.writes.length) {\n scheduleFlush(recursion + 1);\n }\n }\n const RECURSION_LIMIT = 4;\n function scheduleFlush(recursion) {\n if (fastdom.scheduled) {\n return;\n }\n fastdom.scheduled = true;\n if (recursion && recursion < RECURSION_LIMIT) {\n Promise.resolve().then(() => flush(recursion));\n } else {\n requestAnimationFrame(() => flush(1));\n }\n }\n function runTasks(tasks) {\n let task;\n while (task = tasks.shift()) {\n try {\n task();\n } catch (e) {\n console.error(e);\n }\n }\n }\n function remove(array, item) {\n const index = array.indexOf(item);\n return ~index && array.splice(index, 1);\n }\n\n function MouseTracker() {\n }\n MouseTracker.prototype = {\n positions: [],\n init() {\n this.positions = [];\n let position;\n this.unbind = on(document, \"mousemove\", (e) => position = getEventPos(e));\n this.interval = setInterval(() => {\n if (!position) {\n return;\n }\n this.positions.push(position);\n if (this.positions.length > 5) {\n this.positions.shift();\n }\n }, 50);\n },\n cancel() {\n var _a;\n (_a = this.unbind) == null ? void 0 : _a.call(this);\n clearInterval(this.interval);\n },\n movesTo(target) {\n if (this.positions.length < 2) {\n return false;\n }\n const p = target.getBoundingClientRect();\n const { left, right, top, bottom } = p;\n const [prevPosition] = this.positions;\n const position = last(this.positions);\n const path = [prevPosition, position];\n if (pointInRect(position, p)) {\n return false;\n }\n const diagonals = [\n [\n { x: left, y: top },\n { x: right, y: bottom }\n ],\n [\n { x: left, y: bottom },\n { x: right, y: top }\n ]\n ];\n return diagonals.some((diagonal) => {\n const intersection = intersect(path, diagonal);\n return intersection && pointInRect(intersection, p);\n });\n }\n };\n function intersect([{ x: x1, y: y1 }, { x: x2, y: y2 }], [{ x: x3, y: y3 }, { x: x4, y: y4 }]) {\n const denominator = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);\n if (denominator === 0) {\n return false;\n }\n const ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;\n if (ua < 0) {\n return false;\n }\n return { x: x1 + ua * (x2 - x1), y: y1 + ua * (y2 - y1) };\n }\n\n function observeIntersection(targets, cb, options = {}, { intersecting = true } = {}) {\n const observer = new IntersectionObserver(\n intersecting ? (entries, observer2) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n cb(entries, observer2);\n }\n } : cb,\n options\n );\n for (const el of toNodes(targets)) {\n observer.observe(el);\n }\n return observer;\n }\n const hasResizeObserver = inBrowser && window.ResizeObserver;\n function observeResize(targets, cb, options = { box: \"border-box\" }) {\n if (hasResizeObserver) {\n return observe$1(ResizeObserver, targets, cb, options);\n }\n initResizeListener();\n listeners.add(cb);\n return {\n observe: noop,\n unobserve: noop,\n disconnect() {\n listeners.delete(cb);\n }\n };\n }\n let listeners;\n function initResizeListener() {\n if (listeners) {\n return;\n }\n listeners = /* @__PURE__ */ new Set();\n let pendingResize;\n const handleResize = () => {\n if (pendingResize) {\n return;\n }\n pendingResize = true;\n requestAnimationFrame(() => pendingResize = false);\n for (const listener of listeners) {\n listener();\n }\n };\n on(window, \"load resize\", handleResize);\n on(document, \"loadedmetadata load\", handleResize, true);\n }\n function observeMutation(targets, cb, options) {\n return observe$1(MutationObserver, targets, cb, options);\n }\n function observe$1(Observer, targets, cb, options) {\n const observer = new Observer(cb);\n for (const el of toNodes(targets)) {\n observer.observe(el, options);\n }\n return observer;\n }\n\n function play(el) {\n if (isIFrame(el)) {\n call(el, { func: \"playVideo\", method: \"play\" });\n }\n if (isHTML5(el)) {\n try {\n el.play().catch(noop);\n } catch (e) {\n }\n }\n }\n function pause(el) {\n if (isIFrame(el)) {\n call(el, { func: \"pauseVideo\", method: \"pause\" });\n }\n if (isHTML5(el)) {\n el.pause();\n }\n }\n function mute(el) {\n if (isIFrame(el)) {\n call(el, { func: \"mute\", method: \"setVolume\", value: 0 });\n }\n if (isHTML5(el)) {\n el.muted = true;\n }\n }\n function isVideo(el) {\n return isHTML5(el) || isIFrame(el);\n }\n function isHTML5(el) {\n return isTag(el, \"video\");\n }\n function isIFrame(el) {\n return isTag(el, \"iframe\") && (isYoutube(el) || isVimeo(el));\n }\n function isYoutube(el) {\n return !!el.src.match(\n /\\/\\/.*?youtube(-nocookie)?\\.[a-z]+\\/(watch\\?v=[^&\\s]+|embed)|youtu\\.be\\/.*/\n );\n }\n function isVimeo(el) {\n return !!el.src.match(/vimeo\\.com\\/video\\/.*/);\n }\n async function call(el, cmd) {\n await enableApi(el);\n post(el, cmd);\n }\n function post(el, cmd) {\n try {\n el.contentWindow.postMessage(JSON.stringify({ event: \"command\", ...cmd }), \"*\");\n } catch (e) {\n }\n }\n const stateKey = \"_ukPlayer\";\n let counter = 0;\n function enableApi(el) {\n if (el[stateKey]) {\n return el[stateKey];\n }\n const youtube = isYoutube(el);\n const vimeo = isVimeo(el);\n const id = ++counter;\n let poller;\n return el[stateKey] = new Promise((resolve) => {\n youtube && once(el, \"load\", () => {\n const listener = () => post(el, { event: \"listening\", id });\n poller = setInterval(listener, 100);\n listener();\n });\n once(window, \"message\", resolve, false, ({ data }) => {\n try {\n data = JSON.parse(data);\n return youtube && (data == null ? void 0 : data.id) === id && data.event === \"onReady\" || vimeo && Number(data == null ? void 0 : data.player_id) === id;\n } catch (e) {\n }\n });\n el.src = `${el.src}${includes(el.src, \"?\") ? \"&\" : \"?\"}${youtube ? \"enablejsapi=1\" : `api=1&player_id=${id}`}`;\n }).then(() => clearInterval(poller));\n }\n\n function isInView(element, offsetTop = 0, offsetLeft = 0) {\n if (!isVisible(element)) {\n return false;\n }\n return intersectRect(\n ...overflowParents(element).map((parent) => {\n const { top, left, bottom, right } = offsetViewport(parent);\n return {\n top: top - offsetTop,\n left: left - offsetLeft,\n bottom: bottom + offsetTop,\n right: right + offsetLeft\n };\n }).concat(offset(element))\n );\n }\n function scrollIntoView(element, { offset: offsetBy = 0 } = {}) {\n const parents2 = isVisible(element) ? scrollParents(element, false, [\"hidden\"]) : [];\n return parents2.reduce(\n (fn, scrollElement, i) => {\n const { scrollTop, scrollHeight, offsetHeight } = scrollElement;\n const viewport = offsetViewport(scrollElement);\n const maxScroll = scrollHeight - viewport.height;\n const { height: elHeight, top: elTop } = parents2[i - 1] ? offsetViewport(parents2[i - 1]) : offset(element);\n let top = Math.ceil(elTop - viewport.top - offsetBy + scrollTop);\n if (offsetBy > 0 && offsetHeight < elHeight + offsetBy) {\n top += offsetBy;\n } else {\n offsetBy = 0;\n }\n if (top > maxScroll) {\n offsetBy -= top - maxScroll;\n top = maxScroll;\n } else if (top < 0) {\n offsetBy -= top;\n top = 0;\n }\n return () => scrollTo(scrollElement, top - scrollTop).then(fn);\n },\n () => Promise.resolve()\n )();\n function scrollTo(element2, top) {\n return new Promise((resolve) => {\n const scroll = element2.scrollTop;\n const duration = getDuration(Math.abs(top));\n const start = Date.now();\n (function step() {\n const percent = ease(clamp((Date.now() - start) / duration));\n element2.scrollTop = scroll + top * percent;\n if (percent === 1) {\n resolve();\n } else {\n requestAnimationFrame(step);\n }\n })();\n });\n }\n function getDuration(dist) {\n return 40 * Math.pow(dist, 0.375);\n }\n function ease(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n }\n function scrolledOver(element, startOffset = 0, endOffset = 0) {\n if (!isVisible(element)) {\n return 0;\n }\n const [scrollElement] = scrollParents(element, true);\n const { scrollHeight, scrollTop } = scrollElement;\n const { height: viewportHeight } = offsetViewport(scrollElement);\n const maxScroll = scrollHeight - viewportHeight;\n const elementOffsetTop = offsetPosition(element)[0] - offsetPosition(scrollElement)[0];\n const start = Math.max(0, elementOffsetTop - viewportHeight + startOffset);\n const end = Math.min(maxScroll, elementOffsetTop + element.offsetHeight - endOffset);\n return clamp((scrollTop - start) / (end - start));\n }\n function scrollParents(element, scrollable = false, props = []) {\n const scrollEl = scrollingElement(element);\n let ancestors = parents(element).reverse();\n ancestors = ancestors.slice(ancestors.indexOf(scrollEl) + 1);\n const fixedIndex = findIndex(ancestors, (el) => css(el, \"position\") === \"fixed\");\n if (~fixedIndex) {\n ancestors = ancestors.slice(fixedIndex);\n }\n return [scrollEl].concat(\n ancestors.filter(\n (parent) => css(parent, \"overflow\").split(\" \").some((prop) => includes([\"auto\", \"scroll\", ...props], prop)) && (!scrollable || parent.scrollHeight > offsetViewport(parent).height)\n )\n ).reverse();\n }\n function overflowParents(element) {\n return scrollParents(element, false, [\"hidden\", \"clip\"]);\n }\n function offsetViewport(scrollElement) {\n const window = toWindow(scrollElement);\n const {\n visualViewport,\n document: { documentElement }\n } = window;\n let viewportElement = scrollElement === scrollingElement(scrollElement) ? window : scrollElement;\n if (isWindow(viewportElement) && visualViewport) {\n let { height, width, scale, pageTop: top, pageLeft: left } = visualViewport;\n height = Math.round(height * scale);\n width = Math.round(width * scale);\n return { height, width, top, left, bottom: top + height, right: left + width };\n }\n let rect = offset(viewportElement);\n if (css(viewportElement, \"display\") === \"inline\") {\n return rect;\n }\n for (let [prop, dir, start, end] of [\n [\"width\", \"x\", \"left\", \"right\"],\n [\"height\", \"y\", \"top\", \"bottom\"]\n ]) {\n if (isWindow(viewportElement)) {\n viewportElement = documentElement;\n } else {\n rect[start] += toFloat(css(viewportElement, `border-${start}-width`));\n }\n rect[prop] = rect[dir] = viewportElement[`client${ucfirst(prop)}`];\n rect[end] = rect[prop] + rect[start];\n }\n return rect;\n }\n function scrollingElement(element) {\n return toWindow(element).document.scrollingElement;\n }\n\n const dirs = [\n [\"width\", \"x\", \"left\", \"right\"],\n [\"height\", \"y\", \"top\", \"bottom\"]\n ];\n function positionAt(element, target, options) {\n options = {\n attach: {\n element: [\"left\", \"top\"],\n target: [\"left\", \"top\"],\n ...options.attach\n },\n offset: [0, 0],\n placement: [],\n ...options\n };\n if (!isArray(target)) {\n target = [target, target];\n }\n offset(element, getPosition(element, target, options));\n }\n function getPosition(element, target, options) {\n const position = attachTo(element, target, options);\n const { boundary, viewportOffset = 0, placement } = options;\n let offsetPosition = position;\n for (const [i, [prop, , start, end]] of Object.entries(dirs)) {\n const viewport = getViewport$2(element, target[i], viewportOffset, boundary, i);\n if (isWithin(position, viewport, i)) {\n continue;\n }\n let offsetBy = 0;\n if (placement[i] === \"flip\") {\n const attach = options.attach.target[i];\n if (attach === end && position[end] <= viewport[end] || attach === start && position[start] >= viewport[start]) {\n continue;\n }\n offsetBy = flip(element, target, options, i)[start] - position[start];\n const scrollArea = getScrollArea(element, target[i], viewportOffset, i);\n if (!isWithin(applyOffset(position, offsetBy, i), scrollArea, i)) {\n if (isWithin(position, scrollArea, i)) {\n continue;\n }\n if (options.recursion) {\n return false;\n }\n const newPos = flipAxis(element, target, options);\n if (newPos && isWithin(newPos, scrollArea, 1 - i)) {\n return newPos;\n }\n continue;\n }\n } else if (placement[i] === \"shift\") {\n const targetDim = offset(target[i]);\n const { offset: elOffset } = options;\n offsetBy = clamp(\n clamp(position[start], viewport[start], viewport[end] - position[prop]),\n targetDim[start] - position[prop] + elOffset[i],\n targetDim[end] - elOffset[i]\n ) - position[start];\n }\n offsetPosition = applyOffset(offsetPosition, offsetBy, i);\n }\n return offsetPosition;\n }\n function attachTo(element, target, options) {\n let { attach, offset: offsetBy } = {\n attach: {\n element: [\"left\", \"top\"],\n target: [\"left\", \"top\"],\n ...options.attach\n },\n offset: [0, 0],\n ...options\n };\n let elOffset = offset(element);\n for (const [i, [prop, , start, end]] of Object.entries(dirs)) {\n const targetOffset = attach.target[i] === attach.element[i] ? offsetViewport(target[i]) : offset(target[i]);\n elOffset = applyOffset(\n elOffset,\n targetOffset[start] - elOffset[start] + moveBy(attach.target[i], end, targetOffset[prop]) - moveBy(attach.element[i], end, elOffset[prop]) + +offsetBy[i],\n i\n );\n }\n return elOffset;\n }\n function applyOffset(position, offset2, i) {\n const [, dir, start, end] = dirs[i];\n const newPos = { ...position };\n newPos[start] = position[dir] = position[start] + offset2;\n newPos[end] += offset2;\n return newPos;\n }\n function moveBy(attach, end, dim) {\n return attach === \"center\" ? dim / 2 : attach === end ? dim : 0;\n }\n function getViewport$2(element, target, viewportOffset, boundary, i) {\n let viewport = getIntersectionArea(...commonScrollParents(element, target).map(offsetViewport));\n if (viewportOffset) {\n viewport[dirs[i][2]] += viewportOffset;\n viewport[dirs[i][3]] -= viewportOffset;\n }\n if (boundary) {\n viewport = getIntersectionArea(\n viewport,\n offset(isArray(boundary) ? boundary[i] : boundary)\n );\n }\n return viewport;\n }\n function getScrollArea(element, target, viewportOffset, i) {\n const [prop, axis, start, end] = dirs[i];\n const [scrollElement] = commonScrollParents(element, target);\n const viewport = offsetViewport(scrollElement);\n if ([\"auto\", \"scroll\"].includes(css(scrollElement, `overflow-${axis}`))) {\n viewport[start] -= scrollElement[`scroll${ucfirst(start)}`];\n viewport[end] = viewport[start] + scrollElement[`scroll${ucfirst(prop)}`];\n }\n viewport[start] += viewportOffset;\n viewport[end] -= viewportOffset;\n return viewport;\n }\n function commonScrollParents(element, target) {\n return overflowParents(target).filter((parent) => within(element, parent));\n }\n function getIntersectionArea(...rects) {\n let area = {};\n for (const rect of rects) {\n for (const [, , start, end] of dirs) {\n area[start] = Math.max(area[start] || 0, rect[start]);\n area[end] = Math.min(...[area[end], rect[end]].filter(Boolean));\n }\n }\n return area;\n }\n function isWithin(positionA, positionB, i) {\n const [, , start, end] = dirs[i];\n return positionA[start] >= positionB[start] && positionA[end] <= positionB[end];\n }\n function flip(element, target, { offset: offset2, attach }, i) {\n return attachTo(element, target, {\n attach: {\n element: flipAttach(attach.element, i),\n target: flipAttach(attach.target, i)\n },\n offset: flipOffset(offset2, i)\n });\n }\n function flipAxis(element, target, options) {\n return getPosition(element, target, {\n ...options,\n attach: {\n element: options.attach.element.map(flipAttachAxis).reverse(),\n target: options.attach.target.map(flipAttachAxis).reverse()\n },\n offset: options.offset.reverse(),\n placement: options.placement.reverse(),\n recursion: true\n });\n }\n function flipAttach(attach, i) {\n const newAttach = [...attach];\n const index = dirs[i].indexOf(attach[i]);\n if (~index) {\n newAttach[i] = dirs[i][1 - index % 2 + 2];\n }\n return newAttach;\n }\n function flipAttachAxis(prop) {\n for (let i = 0; i < dirs.length; i++) {\n const index = dirs[i].indexOf(prop);\n if (~index) {\n return dirs[1 - i][index % 2 + 2];\n }\n }\n }\n function flipOffset(offset2, i) {\n offset2 = [...offset2];\n offset2[i] *= -1;\n return offset2;\n }\n\n var util = /*#__PURE__*/Object.freeze({\n __proto__: null,\n $: $,\n $$: $$,\n Animation: Animation,\n Deferred: Deferred,\n Dimensions: Dimensions,\n MouseTracker: MouseTracker,\n Transition: Transition,\n addClass: addClass,\n after: after,\n append: append,\n apply: apply,\n assign: assign,\n attr: attr,\n before: before,\n boxModelAdjust: boxModelAdjust,\n camelize: camelize,\n children: children,\n clamp: clamp,\n closest: closest,\n createEvent: createEvent,\n css: css,\n data: data,\n dimensions: dimensions$1,\n each: each,\n empty: empty,\n endsWith: endsWith,\n escape: escape,\n fastdom: fastdom,\n filter: filter$1,\n find: find,\n findAll: findAll,\n findIndex: findIndex,\n flipPosition: flipPosition,\n fragment: fragment,\n getEventPos: getEventPos,\n getIndex: getIndex,\n getTargetedElement: getTargetedElement,\n hasAttr: hasAttr,\n hasClass: hasClass,\n hasOwn: hasOwn,\n hasTouch: hasTouch,\n height: height,\n html: html,\n hyphenate: hyphenate,\n inBrowser: inBrowser,\n includes: includes,\n index: index,\n intersectRect: intersectRect,\n isArray: isArray,\n isBoolean: isBoolean,\n isDocument: isDocument,\n isElement: isElement,\n isEmpty: isEmpty,\n isEqual: isEqual,\n isFocusable: isFocusable,\n isFunction: isFunction,\n isInView: isInView,\n isInput: isInput,\n isNode: isNode,\n isNumber: isNumber,\n isNumeric: isNumeric,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isRtl: isRtl,\n isSameSiteAnchor: isSameSiteAnchor,\n isString: isString,\n isTag: isTag,\n isTouch: isTouch,\n isUndefined: isUndefined,\n isVideo: isVideo,\n isVisible: isVisible,\n isVoidElement: isVoidElement,\n isWindow: isWindow,\n last: last,\n matches: matches,\n memoize: memoize,\n mute: mute,\n noop: noop,\n observeIntersection: observeIntersection,\n observeMutation: observeMutation,\n observeResize: observeResize,\n off: off,\n offset: offset,\n offsetPosition: offsetPosition,\n offsetViewport: offsetViewport,\n on: on,\n once: once,\n overflowParents: overflowParents,\n parent: parent,\n parents: parents,\n pause: pause,\n pick: pick,\n play: play,\n pointInRect: pointInRect,\n pointerCancel: pointerCancel,\n pointerDown: pointerDown$1,\n pointerEnter: pointerEnter,\n pointerLeave: pointerLeave,\n pointerMove: pointerMove$1,\n pointerUp: pointerUp$1,\n position: position,\n positionAt: positionAt,\n prepend: prepend,\n propName: propName,\n query: query,\n queryAll: queryAll,\n ready: ready,\n remove: remove$1,\n removeAttr: removeAttr,\n removeClass: removeClass,\n removeClasses: removeClasses,\n replaceClass: replaceClass,\n scrollIntoView: scrollIntoView,\n scrollParents: scrollParents,\n scrolledOver: scrolledOver,\n selFocusable: selFocusable,\n selInput: selInput,\n sortBy: sortBy$1,\n startsWith: startsWith,\n sumBy: sumBy,\n swap: swap,\n toArray: toArray,\n toBoolean: toBoolean,\n toEventTargets: toEventTargets,\n toFloat: toFloat,\n toNode: toNode,\n toNodes: toNodes,\n toNumber: toNumber,\n toPx: toPx,\n toWindow: toWindow,\n toggleClass: toggleClass,\n trigger: trigger,\n ucfirst: ucfirst,\n uniqueBy: uniqueBy,\n unwrap: unwrap,\n width: width,\n within: within,\n wrapAll: wrapAll,\n wrapInner: wrapInner\n });\n\n function initWatches(instance) {\n instance._watches = [];\n for (const watches of instance.$options.watch || []) {\n for (const [name, watch] of Object.entries(watches)) {\n registerWatch(instance, watch, name);\n }\n }\n instance._initial = true;\n }\n function registerWatch(instance, watch, name) {\n instance._watches.push({\n name,\n ...isPlainObject(watch) ? watch : { handler: watch }\n });\n }\n function runWatches(instance, values) {\n for (const { name, handler, immediate = true } of instance._watches) {\n if (instance._initial && immediate || hasOwn(values, name) && !isEqual(values[name], instance[name])) {\n handler.call(instance, instance[name], values[name]);\n }\n }\n instance._initial = false;\n }\n\n function initUpdates(instance) {\n instance._data = {};\n instance._updates = [...instance.$options.update || []];\n }\n function prependUpdate(instance, update) {\n instance._updates.unshift(update);\n }\n function clearUpdateData(instance) {\n delete instance._data;\n }\n function callUpdate(instance, e = \"update\") {\n if (!instance._connected) {\n return;\n }\n if (!instance._updates.length) {\n return;\n }\n if (!instance._queued) {\n instance._queued = /* @__PURE__ */ new Set();\n fastdom.read(() => {\n if (instance._connected) {\n runUpdates(instance, instance._queued);\n }\n delete instance._queued;\n });\n }\n instance._queued.add(e.type || e);\n }\n function runUpdates(instance, types) {\n for (const { read, write, events = [] } of instance._updates) {\n if (!types.has(\"update\") && !events.some((type) => types.has(type))) {\n continue;\n }\n let result;\n if (read) {\n result = read.call(instance, instance._data, types);\n if (result && isPlainObject(result)) {\n assign(instance._data, result);\n }\n }\n if (write && result !== false) {\n fastdom.write(() => {\n if (instance._connected) {\n write.call(instance, instance._data, types);\n }\n });\n }\n }\n }\n\n function initComputed(instance) {\n const { computed } = instance.$options;\n instance._computed = {};\n if (computed) {\n for (const key in computed) {\n registerComputed(instance, key, computed[key]);\n }\n }\n }\n function registerComputed(instance, key, cb) {\n instance._hasComputed = true;\n Object.defineProperty(instance, key, {\n enumerable: true,\n get() {\n const { _computed, $props, $el } = instance;\n if (!hasOwn(_computed, key)) {\n _computed[key] = (cb.get || cb).call(instance, $props, $el);\n }\n return _computed[key];\n },\n set(value) {\n const { _computed } = instance;\n _computed[key] = cb.set ? cb.set.call(instance, value) : value;\n if (isUndefined(_computed[key])) {\n delete _computed[key];\n }\n }\n });\n }\n function initComputedUpdates(instance) {\n if (!instance._hasComputed) {\n return;\n }\n prependUpdate(instance, {\n read: () => runWatches(instance, resetComputed(instance)),\n events: [\"resize\", \"computed\"]\n });\n registerComputedObserver();\n instances$1.add(instance);\n }\n function disconnectComputedUpdates(instance) {\n instances$1 == null ? void 0 : instances$1.delete(instance);\n resetComputed(instance);\n }\n function resetComputed(instance) {\n const values = { ...instance._computed };\n instance._computed = {};\n return values;\n }\n let observer;\n let instances$1;\n function registerComputedObserver() {\n if (observer) {\n return;\n }\n instances$1 = /* @__PURE__ */ new Set();\n observer = new MutationObserver(() => {\n for (const instance of instances$1) {\n callUpdate(instance, \"computed\");\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n }\n\n function initEvents(instance) {\n instance._events = [];\n for (const event of instance.$options.events || []) {\n if (hasOwn(event, \"handler\")) {\n registerEvent(instance, event);\n } else {\n for (const key in event) {\n registerEvent(instance, event[key], key);\n }\n }\n }\n }\n function unbindEvents(instance) {\n instance._events.forEach((unbind) => unbind());\n delete instance._events;\n }\n function registerEvent(instance, event, key) {\n let { name, el, handler, capture, passive, delegate, filter, self } = isPlainObject(event) ? event : { name: key, handler: event };\n el = isFunction(el) ? el.call(instance, instance) : el || instance.$el;\n if (isArray(el)) {\n el.forEach((el2) => registerEvent(instance, { ...event, el: el2 }, key));\n return;\n }\n if (!el || filter && !filter.call(instance)) {\n return;\n }\n instance._events.push(\n on(\n el,\n name,\n delegate ? isString(delegate) ? delegate : delegate.call(instance, instance) : null,\n isString(handler) ? instance[handler] : handler.bind(instance),\n { passive, capture, self }\n )\n );\n }\n\n function initObservers(instance) {\n instance._observers = [];\n for (const observer of instance.$options.observe || []) {\n if (hasOwn(observer, \"handler\")) {\n registerObservable(instance, observer);\n } else {\n for (const observable of observer) {\n registerObservable(instance, observable);\n }\n }\n }\n }\n function registerObserver(instance, ...observer) {\n instance._observers.push(...observer);\n }\n function disconnectObservers(instance) {\n for (const observer of instance._observers) {\n observer.disconnect();\n }\n }\n function registerObservable(instance, observable) {\n let { observe, target = instance.$el, handler, options, filter, args } = observable;\n if (filter && !filter.call(instance, instance)) {\n return;\n }\n const key = `_observe${instance._observers.length}`;\n if (isFunction(target) && !hasOwn(instance, key)) {\n registerComputed(instance, key, () => target.call(instance, instance));\n }\n handler = isString(handler) ? instance[handler] : handler.bind(instance);\n if (isFunction(options)) {\n options = options.call(instance, instance);\n }\n const targets = hasOwn(instance, key) ? instance[key] : target;\n const observer = observe(targets, handler, options, args);\n if (isFunction(target) && isArray(instance[key]) && observer.unobserve) {\n registerWatch(instance, { handler: updateTargets(observer), immediate: false }, key);\n }\n registerObserver(instance, observer);\n }\n function updateTargets(observer) {\n return (targets, prev) => {\n for (const target of prev) {\n !includes(targets, target) && observer.unobserve(target);\n }\n for (const target of targets) {\n !includes(prev, target) && observer.observe(target);\n }\n };\n }\n\n const strats = {};\n strats.events = strats.watch = strats.observe = strats.created = strats.beforeConnect = strats.connected = strats.beforeDisconnect = strats.disconnected = strats.destroy = concatStrat;\n strats.args = function(parentVal, childVal) {\n return childVal !== false && concatStrat(childVal || parentVal);\n };\n strats.update = function(parentVal, childVal) {\n return sortBy$1(\n concatStrat(parentVal, isFunction(childVal) ? { read: childVal } : childVal),\n \"order\"\n );\n };\n strats.props = function(parentVal, childVal) {\n if (isArray(childVal)) {\n const value = {};\n for (const key of childVal) {\n value[key] = String;\n }\n childVal = value;\n }\n return strats.methods(parentVal, childVal);\n };\n strats.computed = strats.methods = function(parentVal, childVal) {\n return childVal ? parentVal ? { ...parentVal, ...childVal } : childVal : parentVal;\n };\n strats.i18n = strats.data = function(parentVal, childVal, vm) {\n if (!vm) {\n if (!childVal) {\n return parentVal;\n }\n if (!parentVal) {\n return childVal;\n }\n return function(vm2) {\n return mergeFnData(parentVal, childVal, vm2);\n };\n }\n return mergeFnData(parentVal, childVal, vm);\n };\n function mergeFnData(parentVal, childVal, vm) {\n return strats.computed(\n isFunction(parentVal) ? parentVal.call(vm, vm) : parentVal,\n isFunction(childVal) ? childVal.call(vm, vm) : childVal\n );\n }\n function concatStrat(parentVal, childVal) {\n parentVal = parentVal && !isArray(parentVal) ? [parentVal] : parentVal;\n return childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [childVal] : parentVal;\n }\n function defaultStrat(parentVal, childVal) {\n return isUndefined(childVal) ? parentVal : childVal;\n }\n function mergeOptions(parent, child, vm) {\n const options = {};\n if (isFunction(child)) {\n child = child.options;\n }\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n if (child.mixins) {\n for (const mixin of child.mixins) {\n parent = mergeOptions(parent, mixin, vm);\n }\n }\n for (const key in parent) {\n mergeKey(key);\n }\n for (const key in child) {\n if (!hasOwn(parent, key)) {\n mergeKey(key);\n }\n }\n function mergeKey(key) {\n options[key] = (strats[key] || defaultStrat)(parent[key], child[key], vm);\n }\n return options;\n }\n function parseOptions(options, args = []) {\n try {\n return options ? startsWith(options, \"{\") ? JSON.parse(options) : args.length && !includes(options, \":\") ? { [args[0]]: options } : options.split(\";\").reduce((options2, option) => {\n const [key, value] = option.split(/:(.*)/);\n if (key && !isUndefined(value)) {\n options2[key.trim()] = value.trim();\n }\n return options2;\n }, {}) : {};\n } catch (e) {\n return {};\n }\n }\n function coerce$1(type, value) {\n if (type === Boolean) {\n return toBoolean(value);\n } else if (type === Number) {\n return toNumber(value);\n } else if (type === \"list\") {\n return toList(value);\n } else if (type === Object && isString(value)) {\n return parseOptions(value);\n }\n return type ? type(value) : value;\n }\n function toList(value) {\n return isArray(value) ? value : isString(value) ? value.split(/,(?![^(]*\\))/).map((value2) => isNumeric(value2) ? toNumber(value2) : toBoolean(value2.trim())) : [value];\n }\n\n function initProps(instance) {\n const props = getProps$1(instance.$options);\n for (let key in props) {\n if (!isUndefined(props[key])) {\n instance.$props[key] = props[key];\n }\n }\n const exclude = [instance.$options.computed, instance.$options.methods];\n for (let key in instance.$props) {\n if (key in props && notIn(exclude, key)) {\n instance[key] = instance.$props[key];\n }\n }\n }\n function getProps$1(opts) {\n const data$1 = {};\n const { args = [], props = {}, el, id } = opts;\n if (!props) {\n return data$1;\n }\n for (const key in props) {\n const prop = hyphenate(key);\n let value = data(el, prop);\n if (isUndefined(value)) {\n continue;\n }\n value = props[key] === Boolean && value === \"\" ? true : coerce$1(props[key], value);\n if (prop === \"target\" && startsWith(value, \"_\")) {\n continue;\n }\n data$1[key] = value;\n }\n const options = parseOptions(data(el, id), args);\n for (const key in options) {\n const prop = camelize(key);\n if (!isUndefined(props[prop])) {\n data$1[prop] = coerce$1(props[prop], options[key]);\n }\n }\n return data$1;\n }\n function notIn(options, key) {\n return options.every((arr) => !arr || !hasOwn(arr, key));\n }\n function initPropsObserver(instance) {\n const { $options, $props } = instance;\n const { id, props, el } = $options;\n if (!props) {\n return;\n }\n const attributes = Object.keys(props);\n const filter = attributes.map((key) => hyphenate(key)).concat(id);\n const observer = new MutationObserver((records) => {\n const data = getProps$1($options);\n if (records.some(({ attributeName }) => {\n const prop = attributeName.replace(\"data-\", \"\");\n return (prop === id ? attributes : [camelize(prop), camelize(attributeName)]).some(\n (prop2) => !isUndefined(data[prop2]) && data[prop2] !== $props[prop2]\n );\n })) {\n instance.$reset();\n }\n });\n observer.observe(el, {\n attributes: true,\n attributeFilter: filter.concat(filter.map((key) => `data-${key}`))\n });\n registerObserver(instance, observer);\n }\n\n function callHook(instance, hook) {\n var _a;\n (_a = instance.$options[hook]) == null ? void 0 : _a.forEach((handler) => handler.call(instance));\n }\n function callConnected(instance) {\n if (instance._connected) {\n return;\n }\n initProps(instance);\n callHook(instance, \"beforeConnect\");\n instance._connected = true;\n initEvents(instance);\n initUpdates(instance);\n initWatches(instance);\n initObservers(instance);\n initPropsObserver(instance);\n initComputedUpdates(instance);\n callHook(instance, \"connected\");\n callUpdate(instance);\n }\n function callDisconnected(instance) {\n if (!instance._connected) {\n return;\n }\n callHook(instance, \"beforeDisconnect\");\n unbindEvents(instance);\n clearUpdateData(instance);\n disconnectObservers(instance);\n disconnectComputedUpdates(instance);\n callHook(instance, \"disconnected\");\n instance._connected = false;\n }\n\n let uid = 0;\n function init$1(instance, options = {}) {\n options.data = normalizeData(options, instance.constructor.options);\n instance.$options = mergeOptions(instance.constructor.options, options, instance);\n instance.$props = {};\n instance._uid = uid++;\n initData(instance);\n initMethods(instance);\n initComputed(instance);\n callHook(instance, \"created\");\n if (options.el) {\n instance.$mount(options.el);\n }\n }\n function initData(instance) {\n const { data = {} } = instance.$options;\n for (const key in data) {\n instance.$props[key] = instance[key] = data[key];\n }\n }\n function initMethods(instance) {\n const { methods } = instance.$options;\n if (methods) {\n for (const key in methods) {\n instance[key] = methods[key].bind(instance);\n }\n }\n }\n function normalizeData({ data = {} }, { args = [], props = {} }) {\n if (isArray(data)) {\n data = data.slice(0, args.length).reduce((data2, value, index) => {\n if (isPlainObject(value)) {\n assign(data2, value);\n } else {\n data2[args[index]] = value;\n }\n return data2;\n }, {});\n }\n for (const key in data) {\n if (isUndefined(data[key])) {\n delete data[key];\n } else if (props[key]) {\n data[key] = coerce$1(props[key], data[key]);\n }\n }\n return data;\n }\n\n const App = function(options) {\n init$1(this, options);\n };\n App.util = util;\n App.options = {};\n App.version = \"3.16.13\";\n\n const PREFIX = \"uk-\";\n const DATA = \"__uikit__\";\n const components$2 = {};\n function component(name, options) {\n var _a;\n const id = PREFIX + hyphenate(name);\n if (!options) {\n if (isPlainObject(components$2[id])) {\n components$2[id] = App.extend(components$2[id]);\n }\n return components$2[id];\n }\n name = camelize(name);\n App[name] = (element, data) => createComponent(name, element, data);\n const opt = isPlainObject(options) ? { ...options } : options.options;\n opt.id = id;\n opt.name = name;\n (_a = opt.install) == null ? void 0 : _a.call(opt, App, opt, name);\n if (App._initialized && !opt.functional) {\n requestAnimationFrame(() => createComponent(name, `[${id}],[data-${id}]`));\n }\n return components$2[id] = opt;\n }\n function createComponent(name, element, data, ...args) {\n const Component = component(name);\n return Component.options.functional ? new Component({ data: isPlainObject(element) ? element : [element, data, ...args] }) : element ? $$(element).map(init)[0] : init();\n function init(element2) {\n const instance = getComponent(element2, name);\n if (instance) {\n if (data) {\n instance.$destroy();\n } else {\n return instance;\n }\n }\n return new Component({ el: element2, data });\n }\n }\n function getComponents(element) {\n return (element == null ? void 0 : element[DATA]) || {};\n }\n function getComponent(element, name) {\n return getComponents(element)[name];\n }\n function attachToElement(element, instance) {\n if (!element[DATA]) {\n element[DATA] = {};\n }\n element[DATA][instance.$options.name] = instance;\n }\n function detachFromElement(element, instance) {\n var _a;\n (_a = element[DATA]) == null ? true : delete _a[instance.$options.name];\n if (!isEmpty(element[DATA])) {\n delete element[DATA];\n }\n }\n\n function globalApi(App) {\n App.component = component;\n App.getComponents = getComponents;\n App.getComponent = getComponent;\n App.update = update;\n App.use = function(plugin) {\n if (plugin.installed) {\n return;\n }\n plugin.call(null, this);\n plugin.installed = true;\n return this;\n };\n App.mixin = function(mixin, component2) {\n component2 = (isString(component2) ? this.component(component2) : component2) || this;\n component2.options = mergeOptions(component2.options, mixin);\n };\n App.extend = function(options) {\n options = options || {};\n const Super = this;\n const Sub = function UIkitComponent(options2) {\n init$1(this, options2);\n };\n Sub.prototype = Object.create(Super.prototype);\n Sub.prototype.constructor = Sub;\n Sub.options = mergeOptions(Super.options, options);\n Sub.super = Super;\n Sub.extend = Super.extend;\n return Sub;\n };\n let container;\n Object.defineProperty(App, \"container\", {\n get() {\n return container || document.body;\n },\n set(element) {\n container = $(element);\n }\n });\n }\n function update(element, e) {\n element = element ? toNode(element) : document.body;\n for (const parentEl of parents(element).reverse()) {\n updateElement(parentEl, e);\n }\n apply(element, (element2) => updateElement(element2, e));\n }\n function updateElement(element, e) {\n const components = getComponents(element);\n for (const name in components) {\n callUpdate(components[name], e);\n }\n }\n\n function instanceApi(App) {\n App.prototype.$mount = function(el) {\n const instance = this;\n attachToElement(el, instance);\n instance.$options.el = el;\n if (within(el, document)) {\n callConnected(instance);\n }\n };\n App.prototype.$destroy = function(removeEl = false) {\n const instance = this;\n const { el } = instance.$options;\n if (el) {\n callDisconnected(instance);\n }\n callHook(instance, \"destroy\");\n detachFromElement(el, instance);\n if (removeEl) {\n remove$1(instance.$el);\n }\n };\n App.prototype.$create = createComponent;\n App.prototype.$emit = function(e) {\n callUpdate(this, e);\n };\n App.prototype.$update = function(element = this.$el, e) {\n update(element, e);\n };\n App.prototype.$reset = function() {\n callDisconnected(this);\n callConnected(this);\n };\n App.prototype.$getComponent = getComponent;\n Object.defineProperties(App.prototype, {\n $el: {\n get() {\n return this.$options.el;\n }\n },\n $container: Object.getOwnPropertyDescriptor(App, \"container\")\n });\n }\n function generateId(instance, el = instance.$el, postfix = \"\") {\n if (el.id) {\n return el.id;\n }\n let id = `${instance.$options.id}-${instance._uid}${postfix}`;\n if ($(`#${id}`)) {\n id = generateId(instance, el, `${postfix}-2`);\n }\n return id;\n }\n\n globalApi(App);\n instanceApi(App);\n\n function boot(App) {\n if (inBrowser && window.MutationObserver) {\n if (document.body) {\n requestAnimationFrame(() => init(App));\n } else {\n new MutationObserver((records, observer) => {\n if (document.body) {\n init(App);\n observer.disconnect();\n }\n }).observe(document.documentElement, { childList: true });\n }\n }\n }\n function init(App) {\n trigger(document, \"uikit:init\", App);\n if (document.body) {\n apply(document.body, connect);\n }\n new MutationObserver((records) => records.forEach(applyChildListMutation)).observe(document, {\n childList: true,\n subtree: true\n });\n new MutationObserver((records) => records.forEach(applyAttributeMutation)).observe(document, {\n attributes: true,\n subtree: true\n });\n App._initialized = true;\n }\n function applyChildListMutation({ addedNodes, removedNodes }) {\n for (const node of addedNodes) {\n apply(node, connect);\n }\n for (const node of removedNodes) {\n apply(node, disconnect);\n }\n }\n function applyAttributeMutation({ target, attributeName }) {\n var _a;\n const name = getComponentName(attributeName);\n if (name) {\n if (hasAttr(target, attributeName)) {\n createComponent(name, target);\n return;\n }\n (_a = getComponent(target, name)) == null ? void 0 : _a.$destroy();\n }\n }\n function connect(node) {\n const components2 = getComponents(node);\n for (const name in getComponents(node)) {\n callConnected(components2[name]);\n }\n for (const attributeName of node.getAttributeNames()) {\n const name = getComponentName(attributeName);\n name && createComponent(name, node);\n }\n }\n function disconnect(node) {\n const components2 = getComponents(node);\n for (const name in getComponents(node)) {\n callDisconnected(components2[name]);\n }\n }\n function getComponentName(attribute) {\n if (startsWith(attribute, \"data-\")) {\n attribute = attribute.slice(5);\n }\n const cmp = components$2[attribute];\n return cmp && (isPlainObject(cmp) ? cmp : cmp.options).name;\n }\n\n var Class = {\n connected() {\n addClass(this.$el, this.$options.id);\n }\n };\n\n var Togglable = {\n props: {\n cls: Boolean,\n animation: \"list\",\n duration: Number,\n velocity: Number,\n origin: String,\n transition: String\n },\n data: {\n cls: false,\n animation: [false],\n duration: 200,\n velocity: 0.2,\n origin: false,\n transition: \"ease\",\n clsEnter: \"uk-togglabe-enter\",\n clsLeave: \"uk-togglabe-leave\"\n },\n computed: {\n hasAnimation({ animation }) {\n return !!animation[0];\n },\n hasTransition({ animation }) {\n return [\"slide\", \"reveal\"].some((transition) => startsWith(animation[0], transition));\n }\n },\n methods: {\n toggleElement(targets, toggle, animate) {\n return new Promise(\n (resolve) => Promise.all(\n toNodes(targets).map((el) => {\n const show = isBoolean(toggle) ? toggle : !this.isToggled(el);\n if (!trigger(el, `before${show ? \"show\" : \"hide\"}`, [this])) {\n return Promise.reject();\n }\n const promise = (isFunction(animate) ? animate : animate === false || !this.hasAnimation ? toggleInstant : this.hasTransition ? toggleTransition : toggleAnimation)(el, show, this);\n const cls = show ? this.clsEnter : this.clsLeave;\n addClass(el, cls);\n trigger(el, show ? \"show\" : \"hide\", [this]);\n const done = () => {\n removeClass(el, cls);\n trigger(el, show ? \"shown\" : \"hidden\", [this]);\n };\n return promise ? promise.then(done, () => {\n removeClass(el, cls);\n return Promise.reject();\n }) : done();\n })\n ).then(resolve, noop)\n );\n },\n isToggled(el = this.$el) {\n el = toNode(el);\n return hasClass(el, this.clsEnter) ? true : hasClass(el, this.clsLeave) ? false : this.cls ? hasClass(el, this.cls.split(\" \")[0]) : isVisible(el);\n },\n _toggle(el, toggled) {\n if (!el) {\n return;\n }\n toggled = Boolean(toggled);\n let changed;\n if (this.cls) {\n changed = includes(this.cls, \" \") || toggled !== hasClass(el, this.cls);\n changed && toggleClass(el, this.cls, includes(this.cls, \" \") ? void 0 : toggled);\n } else {\n changed = toggled === el.hidden;\n changed && (el.hidden = !toggled);\n }\n $$(\"[autofocus]\", el).some((el2) => isVisible(el2) ? el2.focus() || true : el2.blur());\n if (changed) {\n trigger(el, \"toggled\", [toggled, this]);\n }\n }\n }\n };\n function toggleInstant(el, show, { _toggle }) {\n Animation.cancel(el);\n Transition.cancel(el);\n return _toggle(el, show);\n }\n async function toggleTransition(el, show, { animation, duration, velocity, transition, _toggle }) {\n var _a;\n const [mode = \"reveal\", startProp = \"top\"] = ((_a = animation[0]) == null ? void 0 : _a.split(\"-\")) || [];\n const dirs = [\n [\"left\", \"right\"],\n [\"top\", \"bottom\"]\n ];\n const dir = dirs[includes(dirs[0], startProp) ? 0 : 1];\n const end = dir[1] === startProp;\n const props = [\"width\", \"height\"];\n const dimProp = props[dirs.indexOf(dir)];\n const marginProp = `margin-${dir[0]}`;\n const marginStartProp = `margin-${startProp}`;\n let currentDim = dimensions$1(el)[dimProp];\n const inProgress = Transition.inProgress(el);\n await Transition.cancel(el);\n if (show) {\n _toggle(el, true);\n }\n const prevProps = Object.fromEntries(\n [\n \"padding\",\n \"border\",\n \"width\",\n \"height\",\n \"minWidth\",\n \"minHeight\",\n \"overflowY\",\n \"overflowX\",\n marginProp,\n marginStartProp\n ].map((key) => [key, el.style[key]])\n );\n const dim = dimensions$1(el);\n const currentMargin = toFloat(css(el, marginProp));\n const marginStart = toFloat(css(el, marginStartProp));\n const endDim = dim[dimProp] + marginStart;\n if (!inProgress && !show) {\n currentDim += marginStart;\n }\n const [wrapper] = wrapInner(el, \"
\");\n css(wrapper, {\n boxSizing: \"border-box\",\n height: dim.height,\n width: dim.width,\n ...css(el, [\n \"overflow\",\n \"padding\",\n \"borderTop\",\n \"borderRight\",\n \"borderBottom\",\n \"borderLeft\",\n \"borderImage\",\n marginStartProp\n ])\n });\n css(el, {\n padding: 0,\n border: 0,\n minWidth: 0,\n minHeight: 0,\n [marginStartProp]: 0,\n width: dim.width,\n height: dim.height,\n overflow: \"hidden\",\n [dimProp]: currentDim\n });\n const percent = currentDim / endDim;\n duration = (velocity * endDim + duration) * (show ? 1 - percent : percent);\n const endProps = { [dimProp]: show ? endDim : 0 };\n if (end) {\n css(el, marginProp, endDim - currentDim + currentMargin);\n endProps[marginProp] = show ? currentMargin : endDim + currentMargin;\n }\n if (!end ^ mode === \"reveal\") {\n css(wrapper, marginProp, -endDim + currentDim);\n Transition.start(wrapper, { [marginProp]: show ? 0 : -endDim }, duration, transition);\n }\n try {\n await Transition.start(el, endProps, duration, transition);\n } finally {\n css(el, prevProps);\n unwrap(wrapper.firstChild);\n if (!show) {\n _toggle(el, false);\n }\n }\n }\n function toggleAnimation(el, show, cmp) {\n Animation.cancel(el);\n const { animation, duration, _toggle } = cmp;\n if (show) {\n _toggle(el, true);\n return Animation.in(el, animation[0], duration, cmp.origin);\n }\n return Animation.out(el, animation[1] || animation[0], duration, cmp.origin).then(\n () => _toggle(el, false)\n );\n }\n\n const keyMap = {\n TAB: 9,\n ESC: 27,\n SPACE: 32,\n END: 35,\n HOME: 36,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40\n };\n\n function resize(options) {\n return observe(observeResize, options, \"resize\");\n }\n function intersection(options) {\n return observe(observeIntersection, options);\n }\n function mutation(options) {\n return observe(observeMutation, options);\n }\n function lazyload(options = {}) {\n return intersection({\n handler: function(entries, observer) {\n const { targets = this.$el, preload = 5 } = options;\n for (const el of toNodes(isFunction(targets) ? targets(this) : targets)) {\n $$('[loading=\"lazy\"]', el).slice(0, preload - 1).forEach((el2) => removeAttr(el2, \"loading\"));\n }\n for (const el of entries.filter(({ isIntersecting }) => isIntersecting).map(({ target }) => target)) {\n observer.unobserve(el);\n }\n },\n ...options\n });\n }\n function scroll$1(options) {\n return observe(\n function(target, handler) {\n return {\n disconnect: on(target, \"scroll\", handler, {\n passive: true,\n capture: true\n })\n };\n },\n {\n target: () => window,\n ...options\n },\n \"scroll\"\n );\n }\n function swipe(options) {\n return {\n observe(target, handler) {\n return {\n observe: noop,\n unobserve: noop,\n disconnect: on(target, pointerDown$1, handler, { passive: true })\n };\n },\n handler(e) {\n if (!isTouch(e)) {\n return;\n }\n const pos = getEventPos(e);\n const target = \"tagName\" in e.target ? e.target : parent(e.target);\n once(document, `${pointerUp$1} ${pointerCancel} scroll`, (e2) => {\n const { x, y } = getEventPos(e2);\n if (e2.type !== \"scroll\" && target && x && Math.abs(pos.x - x) > 100 || y && Math.abs(pos.y - y) > 100) {\n setTimeout(() => {\n trigger(target, \"swipe\");\n trigger(target, `swipe${swipeDirection(pos.x, pos.y, x, y)}`);\n });\n }\n });\n },\n ...options\n };\n }\n function observe(observe2, options, emit) {\n return {\n observe: observe2,\n handler() {\n this.$emit(emit);\n },\n ...options\n };\n }\n function swipeDirection(x1, y1, x2, y2) {\n return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? x1 - x2 > 0 ? \"Left\" : \"Right\" : y1 - y2 > 0 ? \"Up\" : \"Down\";\n }\n\n var Accordion = {\n mixins: [Class, Togglable],\n props: {\n animation: Boolean,\n targets: String,\n active: null,\n collapsible: Boolean,\n multiple: Boolean,\n toggle: String,\n content: String,\n offset: Number\n },\n data: {\n targets: \"> *\",\n active: false,\n animation: true,\n collapsible: true,\n multiple: false,\n clsOpen: \"uk-open\",\n toggle: \"> .uk-accordion-title\",\n content: \"> .uk-accordion-content\",\n offset: 0\n },\n computed: {\n items({ targets }, $el) {\n return $$(targets, $el);\n },\n toggles({ toggle }) {\n return this.items.map((item) => $(toggle, item));\n },\n contents({ content }) {\n return this.items.map((item) => {\n var _a;\n return ((_a = item._wrapper) == null ? void 0 : _a.firstElementChild) || $(content, item);\n });\n }\n },\n watch: {\n items(items, prev) {\n if (prev || hasClass(items, this.clsOpen)) {\n return;\n }\n const active = this.active !== false && items[Number(this.active)] || !this.collapsible && items[0];\n if (active) {\n this.toggle(active, false);\n }\n },\n toggles() {\n this.$emit();\n },\n contents(items) {\n for (const el of items) {\n const isOpen = hasClass(\n this.items.find((item) => within(el, item)),\n this.clsOpen\n );\n hide(el, !isOpen);\n }\n this.$emit();\n }\n },\n observe: lazyload(),\n events: [\n {\n name: \"click keydown\",\n delegate() {\n return `${this.targets} ${this.$props.toggle}`;\n },\n async handler(e) {\n var _a;\n if (e.type === \"keydown\" && e.keyCode !== keyMap.SPACE) {\n return;\n }\n e.preventDefault();\n (_a = this._off) == null ? void 0 : _a.call(this);\n this._off = keepScrollPosition(e.target);\n await this.toggle(index(this.toggles, e.current));\n this._off();\n }\n },\n {\n name: \"shown hidden\",\n self: true,\n delegate() {\n return this.targets;\n },\n handler() {\n this.$emit();\n }\n }\n ],\n update() {\n const activeItems = filter$1(this.items, `.${this.clsOpen}`);\n for (const index2 in this.items) {\n const toggle = this.toggles[index2];\n const content = this.contents[index2];\n if (!toggle || !content) {\n continue;\n }\n toggle.id = generateId(this, toggle, `-title-${index2}`);\n content.id = generateId(this, content, `-content-${index2}`);\n const active = includes(activeItems, this.items[index2]);\n attr(toggle, {\n role: isTag(toggle, \"a\") ? \"button\" : null,\n \"aria-controls\": content.id,\n \"aria-expanded\": active,\n \"aria-disabled\": !this.collapsible && activeItems.length < 2 && active\n });\n attr(content, { role: \"region\", \"aria-labelledby\": toggle.id });\n if (isTag(content, \"ul\")) {\n attr(children(content), \"role\", \"presentation\");\n }\n }\n },\n methods: {\n async toggle(item, animate) {\n item = this.items[getIndex(item, this.items)];\n let items = [item];\n const activeItems = filter$1(this.items, `.${this.clsOpen}`);\n if (!this.multiple && !includes(activeItems, items[0])) {\n items = items.concat(activeItems);\n }\n if (!this.collapsible && activeItems.length < 2 && includes(activeItems, item)) {\n return;\n }\n await Promise.all(\n items.map(\n (el) => this.toggleElement(el, !includes(activeItems, el), (el2, show) => {\n toggleClass(el2, this.clsOpen, show);\n if (animate === false || !this.animation) {\n hide($(this.content, el2), !show);\n return;\n }\n return transition(el2, show, this);\n })\n )\n );\n }\n }\n };\n function hide(el, hide2) {\n el && (el.hidden = hide2);\n }\n async function transition(el, show, { content, duration, velocity, transition: transition2 }) {\n var _a;\n content = ((_a = el._wrapper) == null ? void 0 : _a.firstElementChild) || $(content, el);\n if (!el._wrapper) {\n el._wrapper = wrapAll(content, \"
\");\n }\n const wrapper = el._wrapper;\n css(wrapper, \"overflow\", \"hidden\");\n const currentHeight = toFloat(css(wrapper, \"height\"));\n await Transition.cancel(wrapper);\n hide(content, false);\n const endHeight = sumBy([\"marginTop\", \"marginBottom\"], (prop) => css(content, prop)) + dimensions$1(content).height;\n const percent = currentHeight / endHeight;\n duration = (velocity * endHeight + duration) * (show ? 1 - percent : percent);\n css(wrapper, \"height\", currentHeight);\n await Transition.start(wrapper, { height: show ? endHeight : 0 }, duration, transition2);\n unwrap(content);\n delete el._wrapper;\n if (!show) {\n hide(content, true);\n }\n }\n function keepScrollPosition(el) {\n const [scrollParent] = scrollParents(el, true);\n let frame;\n (function scroll() {\n frame = requestAnimationFrame(() => {\n const { top } = el.getBoundingClientRect();\n if (top < 0) {\n scrollParent.scrollTop += top;\n }\n scroll();\n });\n })();\n return () => requestAnimationFrame(() => cancelAnimationFrame(frame));\n }\n\n var alert = {\n mixins: [Class, Togglable],\n args: \"animation\",\n props: {\n animation: Boolean,\n close: String\n },\n data: {\n animation: true,\n selClose: \".uk-alert-close\",\n duration: 150\n },\n events: {\n name: \"click\",\n delegate() {\n return this.selClose;\n },\n handler(e) {\n e.preventDefault();\n this.close();\n }\n },\n methods: {\n async close() {\n await this.toggleElement(this.$el, false, animate$1);\n this.$destroy(true);\n }\n }\n };\n function animate$1(el, show, { duration, transition, velocity }) {\n const height = toFloat(css(el, \"height\"));\n css(el, \"height\", height);\n return Transition.start(\n el,\n {\n height: 0,\n marginTop: 0,\n marginBottom: 0,\n paddingTop: 0,\n paddingBottom: 0,\n borderTop: 0,\n borderBottom: 0,\n opacity: 0\n },\n velocity * height + duration,\n transition\n );\n }\n\n var Video = {\n args: \"autoplay\",\n props: {\n automute: Boolean,\n autoplay: Boolean\n },\n data: {\n automute: false,\n autoplay: true\n },\n connected() {\n this.inView = this.autoplay === \"inview\";\n if (this.inView && !hasAttr(this.$el, \"preload\")) {\n this.$el.preload = \"none\";\n }\n if (isTag(this.$el, \"iframe\") && !hasAttr(this.$el, \"allow\")) {\n this.$el.allow = \"autoplay\";\n }\n if (this.automute) {\n mute(this.$el);\n }\n },\n observe: intersection({\n args: { intersecting: false }\n }),\n update: {\n read({ visible }) {\n if (!isVideo(this.$el)) {\n return false;\n }\n return {\n prev: visible,\n visible: isVisible(this.$el) && css(this.$el, \"visibility\") !== \"hidden\",\n inView: this.inView && isInView(this.$el)\n };\n },\n write({ prev, visible, inView }) {\n if (!visible || this.inView && !inView) {\n pause(this.$el);\n } else if (this.autoplay === true && !prev || this.inView && inView) {\n play(this.$el);\n }\n }\n }\n };\n\n var cover = {\n mixins: [Video],\n props: {\n width: Number,\n height: Number\n },\n data: {\n automute: true\n },\n events: {\n \"load loadedmetadata\"() {\n this.$emit(\"resize\");\n }\n },\n observe: resize({\n target: ({ $el }) => [$el, getPositionedParent($el) || parent($el)]\n }),\n update: {\n read() {\n const { ratio, cover } = Dimensions;\n const { $el, width, height } = this;\n let dim = { width, height };\n if (!width || !height) {\n const intrinsic = {\n width: $el.naturalWidth || $el.videoWidth || $el.clientWidth,\n height: $el.naturalHeight || $el.videoHeight || $el.clientHeight\n };\n if (width) {\n dim = ratio(intrinsic, \"width\", width);\n } else if (height) {\n dim = ratio(intrinsic, \"height\", height);\n } else {\n dim = intrinsic;\n }\n }\n const { offsetHeight: coverHeight, offsetWidth: coverWidth } = getPositionedParent($el) || parent($el);\n const coverDim = cover(dim, {\n width: coverWidth + (coverWidth % 2 ? 1 : 0),\n height: coverHeight + (coverHeight % 2 ? 1 : 0)\n });\n if (!coverDim.width || !coverDim.height) {\n return false;\n }\n return coverDim;\n },\n write({ height, width }) {\n css(this.$el, { height, width });\n },\n events: [\"resize\"]\n }\n };\n function getPositionedParent(el) {\n while (el = parent(el)) {\n if (css(el, \"position\") !== \"static\") {\n return el;\n }\n }\n }\n\n var Position = {\n props: {\n pos: String,\n offset: null,\n flip: Boolean,\n shift: Boolean,\n inset: Boolean\n },\n data: {\n pos: `bottom-${isRtl ? \"right\" : \"left\"}`,\n offset: false,\n flip: true,\n shift: true,\n inset: false\n },\n connected() {\n this.pos = this.$props.pos.split(\"-\").concat(\"center\").slice(0, 2);\n [this.dir, this.align] = this.pos;\n this.axis = includes([\"top\", \"bottom\"], this.dir) ? \"y\" : \"x\";\n },\n methods: {\n positionAt(element, target, boundary) {\n let offset = [this.getPositionOffset(element), this.getShiftOffset(element)];\n const placement = [this.flip && \"flip\", this.shift && \"shift\"];\n const attach = {\n element: [this.inset ? this.dir : flipPosition(this.dir), this.align],\n target: [this.dir, this.align]\n };\n if (this.axis === \"y\") {\n for (const prop in attach) {\n attach[prop].reverse();\n }\n offset.reverse();\n placement.reverse();\n }\n const restoreScrollPosition = storeScrollPosition(element);\n const elDim = dimensions$1(element);\n css(element, { top: -elDim.height, left: -elDim.width });\n positionAt(element, target, {\n attach,\n offset,\n boundary,\n placement,\n viewportOffset: this.getViewportOffset(element)\n });\n restoreScrollPosition();\n },\n getPositionOffset(element) {\n return toPx(\n this.offset === false ? css(element, \"--uk-position-offset\") : this.offset,\n this.axis === \"x\" ? \"width\" : \"height\",\n element\n ) * (includes([\"left\", \"top\"], this.dir) ? -1 : 1) * (this.inset ? -1 : 1);\n },\n getShiftOffset(element) {\n return this.align === \"center\" ? 0 : toPx(\n css(element, \"--uk-position-shift-offset\"),\n this.axis === \"y\" ? \"width\" : \"height\",\n element\n ) * (includes([\"left\", \"top\"], this.align) ? 1 : -1);\n },\n getViewportOffset(element) {\n return toPx(css(element, \"--uk-position-viewport-offset\"));\n }\n }\n };\n function storeScrollPosition(element) {\n const [scrollElement] = scrollParents(element);\n const { scrollTop } = scrollElement;\n return () => {\n if (scrollTop !== scrollElement.scrollTop) {\n scrollElement.scrollTop = scrollTop;\n }\n };\n }\n\n var Container = {\n props: {\n container: Boolean\n },\n data: {\n container: true\n },\n computed: {\n container({ container }) {\n return container === true && this.$container || container && $(container);\n }\n }\n };\n\n let prevented;\n function preventBackgroundScroll(el) {\n const off = on(\n el,\n \"touchmove\",\n (e) => {\n if (e.targetTouches.length !== 1 || matches(e.target, 'input[type=\"range\"')) {\n return;\n }\n let [{ scrollHeight, clientHeight }] = scrollParents(e.target);\n if (clientHeight >= scrollHeight && e.cancelable) {\n e.preventDefault();\n }\n },\n { passive: false }\n );\n if (prevented) {\n return off;\n }\n prevented = true;\n const { scrollingElement } = document;\n css(scrollingElement, {\n overflowY: CSS.supports(\"overflow\", \"clip\") ? \"clip\" : \"hidden\",\n touchAction: \"none\",\n paddingRight: width(window) - scrollingElement.clientWidth || \"\"\n });\n return () => {\n prevented = false;\n off();\n css(scrollingElement, { overflowY: \"\", touchAction: \"\", paddingRight: \"\" });\n };\n }\n\n let active$1;\n var drop = {\n mixins: [Container, Position, Togglable],\n args: \"pos\",\n props: {\n mode: \"list\",\n toggle: Boolean,\n boundary: Boolean,\n boundaryX: Boolean,\n boundaryY: Boolean,\n target: Boolean,\n targetX: Boolean,\n targetY: Boolean,\n stretch: Boolean,\n delayShow: Number,\n delayHide: Number,\n autoUpdate: Boolean,\n clsDrop: String,\n animateOut: Boolean,\n bgScroll: Boolean\n },\n data: {\n mode: [\"click\", \"hover\"],\n toggle: \"- *\",\n boundary: false,\n boundaryX: false,\n boundaryY: false,\n target: false,\n targetX: false,\n targetY: false,\n stretch: false,\n delayShow: 0,\n delayHide: 800,\n autoUpdate: true,\n clsDrop: false,\n animateOut: false,\n bgScroll: true,\n animation: [\"uk-animation-fade\"],\n cls: \"uk-open\",\n container: false\n },\n computed: {\n boundary({ boundary, boundaryX, boundaryY }, $el) {\n return [\n query(boundaryX || boundary, $el) || window,\n query(boundaryY || boundary, $el) || window\n ];\n },\n target({ target, targetX, targetY }, $el) {\n targetX = targetX || target || this.targetEl;\n targetY = targetY || target || this.targetEl;\n return [\n targetX === true ? window : query(targetX, $el),\n targetY === true ? window : query(targetY, $el)\n ];\n }\n },\n created() {\n this.tracker = new MouseTracker();\n },\n beforeConnect() {\n this.clsDrop = this.$props.clsDrop || `uk-${this.$options.name}`;\n },\n connected() {\n addClass(this.$el, \"uk-drop\", this.clsDrop);\n if (this.toggle && !this.targetEl) {\n this.targetEl = createToggleComponent(this);\n }\n this._style = pick(this.$el.style, [\"width\", \"height\"]);\n },\n disconnected() {\n if (this.isActive()) {\n this.hide(false);\n active$1 = null;\n }\n css(this.$el, this._style);\n },\n observe: lazyload({\n target: ({ toggle, $el }) => query(toggle, $el),\n targets: ({ $el }) => $el\n }),\n events: [\n {\n name: \"click\",\n delegate() {\n return \".uk-drop-close\";\n },\n handler(e) {\n e.preventDefault();\n this.hide(false);\n }\n },\n {\n name: \"click\",\n delegate() {\n return 'a[href*=\"#\"]';\n },\n handler({ defaultPrevented, current }) {\n const { hash } = current;\n if (!defaultPrevented && hash && isSameSiteAnchor(current) && !within(hash, this.$el)) {\n this.hide(false);\n }\n }\n },\n {\n name: \"beforescroll\",\n handler() {\n this.hide(false);\n }\n },\n {\n name: \"toggle\",\n self: true,\n handler(e, toggle) {\n e.preventDefault();\n if (this.isToggled()) {\n this.hide(false);\n } else {\n this.show(toggle == null ? void 0 : toggle.$el, false);\n }\n }\n },\n {\n name: \"toggleshow\",\n self: true,\n handler(e, toggle) {\n e.preventDefault();\n this.show(toggle == null ? void 0 : toggle.$el);\n }\n },\n {\n name: \"togglehide\",\n self: true,\n handler(e) {\n e.preventDefault();\n if (!matches(this.$el, \":focus,:hover\")) {\n this.hide();\n }\n }\n },\n {\n name: `${pointerEnter} focusin`,\n filter() {\n return includes(this.mode, \"hover\");\n },\n handler(e) {\n if (!isTouch(e)) {\n this.clearTimers();\n }\n }\n },\n {\n name: `${pointerLeave} focusout`,\n filter() {\n return includes(this.mode, \"hover\");\n },\n handler(e) {\n if (!isTouch(e) && e.relatedTarget) {\n this.hide();\n }\n }\n },\n {\n name: \"toggled\",\n self: true,\n handler(e, toggled) {\n attr(this.targetEl, \"aria-expanded\", toggled ? true : null);\n if (!toggled) {\n return;\n }\n this.clearTimers();\n this.position();\n }\n },\n {\n name: \"show\",\n self: true,\n handler() {\n active$1 = this;\n this.tracker.init();\n const handlers = [\n listenForResize(this),\n listenForEscClose$1(this),\n listenForBackgroundClose$1(this),\n this.autoUpdate && listenForScroll(this),\n !this.bgScroll && preventBackgroundScroll(this.$el)\n ];\n once(this.$el, \"hide\", () => handlers.forEach((handler) => handler && handler()), {\n self: true\n });\n }\n },\n {\n name: \"beforehide\",\n self: true,\n handler() {\n this.clearTimers();\n }\n },\n {\n name: \"hide\",\n handler({ target }) {\n if (this.$el !== target) {\n active$1 = active$1 === null && within(target, this.$el) && this.isToggled() ? this : active$1;\n return;\n }\n active$1 = this.isActive() ? null : active$1;\n this.tracker.cancel();\n }\n }\n ],\n update: {\n write() {\n if (this.isToggled() && !hasClass(this.$el, this.clsEnter)) {\n this.position();\n }\n }\n },\n methods: {\n show(target = this.targetEl, delay = true) {\n if (this.isToggled() && target && this.targetEl && target !== this.targetEl) {\n this.hide(false, false);\n }\n this.targetEl = target;\n this.clearTimers();\n if (this.isActive()) {\n return;\n }\n if (active$1) {\n if (delay && active$1.isDelaying) {\n this.showTimer = setTimeout(() => matches(target, \":hover\") && this.show(), 10);\n return;\n }\n let prev;\n while (active$1 && prev !== active$1 && !within(this.$el, active$1.$el)) {\n prev = active$1;\n active$1.hide(false, false);\n }\n }\n if (this.container && parent(this.$el) !== this.container) {\n append(this.container, this.$el);\n }\n this.showTimer = setTimeout(\n () => this.toggleElement(this.$el, true),\n delay && this.delayShow || 0\n );\n },\n hide(delay = true, animate = true) {\n const hide = () => this.toggleElement(this.$el, false, this.animateOut && animate);\n this.clearTimers();\n this.isDelaying = getPositionedElements(this.$el).some(\n (el) => this.tracker.movesTo(el)\n );\n if (delay && this.isDelaying) {\n this.hideTimer = setTimeout(this.hide, 50);\n } else if (delay && this.delayHide) {\n this.hideTimer = setTimeout(hide, this.delayHide);\n } else {\n hide();\n }\n },\n clearTimers() {\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.showTimer = null;\n this.hideTimer = null;\n this.isDelaying = false;\n },\n isActive() {\n return active$1 === this;\n },\n position() {\n removeClass(this.$el, \"uk-drop-stack\");\n css(this.$el, this._style);\n this.$el.hidden = true;\n const viewports = this.target.map((target) => getViewport$1(this.$el, target));\n const viewportOffset = this.getViewportOffset(this.$el);\n const dirs = [\n [0, [\"x\", \"width\", \"left\", \"right\"]],\n [1, [\"y\", \"height\", \"top\", \"bottom\"]]\n ];\n for (const [i, [axis, prop]] of dirs) {\n if (this.axis !== axis && includes([axis, true], this.stretch)) {\n css(this.$el, {\n [prop]: Math.min(\n offset(this.boundary[i])[prop],\n viewports[i][prop] - 2 * viewportOffset\n ),\n [`overflow-${axis}`]: \"auto\"\n });\n }\n }\n const maxWidth = viewports[0].width - 2 * viewportOffset;\n this.$el.hidden = false;\n css(this.$el, \"maxWidth\", \"\");\n if (this.$el.offsetWidth > maxWidth) {\n addClass(this.$el, \"uk-drop-stack\");\n }\n css(this.$el, \"maxWidth\", maxWidth);\n this.positionAt(this.$el, this.target, this.boundary);\n for (const [i, [axis, prop, start, end]] of dirs) {\n if (this.axis === axis && includes([axis, true], this.stretch)) {\n const positionOffset = Math.abs(this.getPositionOffset(this.$el));\n const targetOffset = offset(this.target[i]);\n const elOffset = offset(this.$el);\n css(this.$el, {\n [prop]: (targetOffset[start] > elOffset[start] ? targetOffset[start] - Math.max(\n offset(this.boundary[i])[start],\n viewports[i][start] + viewportOffset\n ) : Math.min(\n offset(this.boundary[i])[end],\n viewports[i][end] - viewportOffset\n ) - targetOffset[end]) - positionOffset,\n [`overflow-${axis}`]: \"auto\"\n });\n this.positionAt(this.$el, this.target, this.boundary);\n }\n }\n }\n }\n };\n function getPositionedElements(el) {\n const result = [];\n apply(el, (el2) => css(el2, \"position\") !== \"static\" && result.push(el2));\n return result;\n }\n function getViewport$1(el, target) {\n return offsetViewport(overflowParents(target).find((parent2) => within(el, parent2)));\n }\n function createToggleComponent(drop) {\n const { $el } = drop.$create(\"toggle\", query(drop.toggle, drop.$el), {\n target: drop.$el,\n mode: drop.mode\n });\n attr($el, \"aria-haspopup\", true);\n return $el;\n }\n function listenForResize(drop) {\n const update = () => drop.$emit();\n const off = on(window, \"resize\", update);\n const observer = observeResize(overflowParents(drop.$el).concat(drop.target), update);\n return () => {\n observer.disconnect();\n off();\n };\n }\n function listenForScroll(drop) {\n return on([document, ...overflowParents(drop.$el)], \"scroll\", () => drop.$emit(), {\n passive: true\n });\n }\n function listenForEscClose$1(drop) {\n return on(document, \"keydown\", (e) => {\n if (e.keyCode === keyMap.ESC) {\n drop.hide(false);\n }\n });\n }\n function listenForBackgroundClose$1(drop) {\n return on(document, pointerDown$1, ({ target }) => {\n if (!within(target, drop.$el)) {\n once(\n document,\n `${pointerUp$1} ${pointerCancel} scroll`,\n ({ defaultPrevented, type, target: newTarget }) => {\n if (!defaultPrevented && type === pointerUp$1 && target === newTarget && !(drop.targetEl && within(target, drop.targetEl))) {\n drop.hide(false);\n }\n },\n true\n );\n }\n });\n }\n\n var Dropnav = {\n mixins: [Class, Container],\n props: {\n align: String,\n clsDrop: String,\n boundary: Boolean,\n dropbar: Boolean,\n dropbarAnchor: Boolean,\n duration: Number,\n mode: Boolean,\n offset: Boolean,\n stretch: Boolean,\n delayShow: Boolean,\n delayHide: Boolean,\n target: Boolean,\n targetX: Boolean,\n targetY: Boolean,\n animation: Boolean,\n animateOut: Boolean\n },\n data: {\n align: isRtl ? \"right\" : \"left\",\n clsDrop: \"uk-dropdown\",\n clsDropbar: \"uk-dropnav-dropbar\",\n boundary: true,\n dropbar: false,\n dropbarAnchor: false,\n duration: 200,\n container: false,\n selNavItem: \"> li > a, > ul > li > a\"\n },\n computed: {\n dropbarAnchor({ dropbarAnchor }, $el) {\n return query(dropbarAnchor, $el) || $el;\n },\n dropbar({ dropbar }) {\n if (!dropbar) {\n return null;\n }\n dropbar = this._dropbar || query(dropbar, this.$el) || $(`+ .${this.clsDropbar}`, this.$el);\n return dropbar ? dropbar : this._dropbar = $(\"
\");\n },\n dropContainer(_, $el) {\n return this.container || $el;\n },\n dropdowns({ clsDrop }, $el) {\n var _a;\n const dropdowns = $$(`.${clsDrop}`, $el);\n if (this.dropContainer !== $el) {\n for (const el of $$(`.${clsDrop}`, this.dropContainer)) {\n const target = (_a = this.getDropdown(el)) == null ? void 0 : _a.targetEl;\n if (!includes(dropdowns, el) && target && within(target, this.$el)) {\n dropdowns.push(el);\n }\n }\n }\n return dropdowns;\n },\n items({ selNavItem }, $el) {\n return $$(selNavItem, $el);\n }\n },\n watch: {\n dropbar(dropbar) {\n addClass(\n dropbar,\n \"uk-dropbar\",\n \"uk-dropbar-top\",\n this.clsDropbar,\n `uk-${this.$options.name}-dropbar`\n );\n },\n dropdowns(dropdowns) {\n this.$create(\n \"drop\",\n dropdowns.filter((el) => !this.getDropdown(el)),\n {\n ...this.$props,\n flip: false,\n shift: true,\n pos: `bottom-${this.align}`,\n boundary: this.boundary === true ? this.$el : this.boundary\n }\n );\n }\n },\n disconnected() {\n remove$1(this._dropbar);\n delete this._dropbar;\n },\n events: [\n {\n name: \"mouseover focusin\",\n delegate() {\n return this.selNavItem;\n },\n handler({ current }) {\n const active2 = this.getActive();\n if (active2 && includes(active2.mode, \"hover\") && active2.targetEl && !within(active2.targetEl, current) && !active2.isDelaying) {\n active2.hide(false);\n }\n }\n },\n {\n name: \"keydown\",\n delegate() {\n return this.selNavItem;\n },\n handler(e) {\n const { current, keyCode } = e;\n const active2 = this.getActive();\n if (keyCode === keyMap.DOWN && hasAttr(current, \"aria-expanded\")) {\n e.preventDefault();\n if (!active2 || active2.targetEl !== current) {\n current.click();\n once(\n this.dropContainer,\n \"show\",\n ({ target }) => focusFirstFocusableElement(target)\n );\n } else {\n focusFirstFocusableElement(active2.$el);\n }\n }\n handleNavItemNavigation(e, this.items, active2);\n }\n },\n {\n name: \"keydown\",\n el() {\n return this.dropContainer;\n },\n delegate() {\n return `.${this.clsDrop}`;\n },\n handler(e) {\n var _a;\n const { current, keyCode } = e;\n if (!includes(this.dropdowns, current)) {\n return;\n }\n const active2 = this.getActive();\n let next = -1;\n if (keyCode === keyMap.HOME) {\n next = 0;\n } else if (keyCode === keyMap.END) {\n next = \"last\";\n } else if (keyCode === keyMap.UP) {\n next = \"previous\";\n } else if (keyCode === keyMap.DOWN) {\n next = \"next\";\n } else if (keyCode === keyMap.ESC) {\n (_a = active2.targetEl) == null ? void 0 : _a.focus();\n }\n if (~next) {\n e.preventDefault();\n const elements = $$(selFocusable, current);\n elements[getIndex(\n next,\n elements,\n findIndex(elements, (el) => matches(el, \":focus\"))\n )].focus();\n }\n handleNavItemNavigation(e, this.items, active2);\n }\n },\n {\n name: \"mouseleave\",\n el() {\n return this.dropbar;\n },\n filter() {\n return this.dropbar;\n },\n handler() {\n const active2 = this.getActive();\n if (active2 && includes(active2.mode, \"hover\") && !this.dropdowns.some((el) => matches(el, \":hover\"))) {\n active2.hide();\n }\n }\n },\n {\n name: \"beforeshow\",\n el() {\n return this.dropContainer;\n },\n filter() {\n return this.dropbar;\n },\n handler({ target }) {\n if (!this.isDropbarDrop(target)) {\n return;\n }\n if (this.dropbar.previousElementSibling !== this.dropbarAnchor) {\n after(this.dropbarAnchor, this.dropbar);\n }\n addClass(target, `${this.clsDrop}-dropbar`);\n }\n },\n {\n name: \"show\",\n el() {\n return this.dropContainer;\n },\n filter() {\n return this.dropbar;\n },\n handler({ target }) {\n if (!this.isDropbarDrop(target)) {\n return;\n }\n const drop = this.getDropdown(target);\n const adjustHeight = () => {\n const targetOffsets = parents(target, `.${this.clsDrop}`).concat(target).map((el) => offset(el));\n const minTop = Math.min(...targetOffsets.map(({ top }) => top));\n const maxBottom = Math.max(...targetOffsets.map(({ bottom }) => bottom));\n const dropbarOffset = offset(this.dropbar);\n css(this.dropbar, \"top\", this.dropbar.offsetTop - (dropbarOffset.top - minTop));\n this.transitionTo(\n maxBottom - minTop + toFloat(css(target, \"marginBottom\")),\n target\n );\n };\n this._observer = observeResize([drop.$el, ...drop.target], adjustHeight);\n adjustHeight();\n }\n },\n {\n name: \"beforehide\",\n el() {\n return this.dropContainer;\n },\n filter() {\n return this.dropbar;\n },\n handler(e) {\n const active2 = this.getActive();\n if (matches(this.dropbar, \":hover\") && active2.$el === e.target && !this.items.some((el) => active2.targetEl !== el && matches(el, \":focus\"))) {\n e.preventDefault();\n }\n }\n },\n {\n name: \"hide\",\n el() {\n return this.dropContainer;\n },\n filter() {\n return this.dropbar;\n },\n handler({ target }) {\n var _a;\n if (!this.isDropbarDrop(target)) {\n return;\n }\n (_a = this._observer) == null ? void 0 : _a.disconnect();\n const active2 = this.getActive();\n if (!active2 || active2.$el === target) {\n this.transitionTo(0);\n }\n }\n }\n ],\n methods: {\n getActive() {\n var _a;\n return includes(this.dropdowns, (_a = active$1) == null ? void 0 : _a.$el) && active$1;\n },\n async transitionTo(newHeight, el) {\n const { dropbar } = this;\n const oldHeight = height(dropbar);\n el = oldHeight < newHeight && el;\n await Transition.cancel([el, dropbar]);\n css(el, \"clipPath\", `polygon(0 0,100% 0,100% ${oldHeight}px,0 ${oldHeight}px)`);\n height(dropbar, oldHeight);\n await Promise.all([\n Transition.start(dropbar, { height: newHeight }, this.duration),\n Transition.start(\n el,\n {\n clipPath: `polygon(0 0,100% 0,100% ${newHeight}px,0 ${newHeight}px)`\n },\n this.duration\n ).finally(() => css(el, { clipPath: \"\" }))\n ]).catch(noop);\n },\n getDropdown(el) {\n return this.$getComponent(el, \"drop\") || this.$getComponent(el, \"dropdown\");\n },\n isDropbarDrop(el) {\n return this.getDropdown(el) && hasClass(el, this.clsDrop);\n }\n }\n };\n function handleNavItemNavigation(e, toggles, active2) {\n var _a, _b, _c;\n const { current, keyCode } = e;\n let next = -1;\n if (keyCode === keyMap.HOME) {\n next = 0;\n } else if (keyCode === keyMap.END) {\n next = \"last\";\n } else if (keyCode === keyMap.LEFT) {\n next = \"previous\";\n } else if (keyCode === keyMap.RIGHT) {\n next = \"next\";\n } else if (keyCode === keyMap.TAB) {\n (_a = active2.targetEl) == null ? void 0 : _a.focus();\n (_b = active2.hide) == null ? void 0 : _b.call(active2, false);\n }\n if (~next) {\n e.preventDefault();\n (_c = active2.hide) == null ? void 0 : _c.call(active2, false);\n toggles[getIndex(next, toggles, toggles.indexOf(active2.targetEl || current))].focus();\n }\n }\n function focusFirstFocusableElement(el) {\n var _a;\n if (!$(\":focus\", el)) {\n (_a = $(selFocusable, el)) == null ? void 0 : _a.focus();\n }\n }\n\n var formCustom = {\n mixins: [Class],\n args: \"target\",\n props: {\n target: Boolean\n },\n data: {\n target: false\n },\n computed: {\n input(_, $el) {\n return $(selInput, $el);\n },\n state() {\n return this.input.nextElementSibling;\n },\n target({ target }, $el) {\n return target && (target === true && parent(this.input) === $el && this.input.nextElementSibling || $(target, $el));\n }\n },\n update() {\n var _a;\n const { target, input } = this;\n if (!target) {\n return;\n }\n let option;\n const prop = isInput(target) ? \"value\" : \"textContent\";\n const prev = target[prop];\n const value = ((_a = input.files) == null ? void 0 : _a[0]) ? input.files[0].name : matches(input, \"select\") && (option = $$(\"option\", input).filter((el) => el.selected)[0]) ? option.textContent : input.value;\n if (prev !== value) {\n target[prop] = value;\n }\n },\n events: [\n {\n name: \"change\",\n handler() {\n this.$emit();\n }\n },\n {\n name: \"reset\",\n el() {\n return closest(this.$el, \"form\");\n },\n handler() {\n this.$emit();\n }\n }\n ]\n };\n\n var Margin = {\n props: {\n margin: String,\n firstColumn: Boolean\n },\n data: {\n margin: \"uk-margin-small-top\",\n firstColumn: \"uk-first-column\"\n },\n observe: [\n mutation({\n options: {\n childList: true,\n attributes: true,\n attributeFilter: [\"style\"]\n }\n }),\n resize({\n target: ({ $el }) => [$el, ...children($el)]\n })\n ],\n update: {\n read() {\n const rows = getRows(this.$el.children);\n return {\n rows,\n columns: getColumns(rows)\n };\n },\n write({ columns, rows }) {\n for (const row of rows) {\n for (const column of row) {\n toggleClass(column, this.margin, rows[0] !== row);\n toggleClass(column, this.firstColumn, columns[0].includes(column));\n }\n }\n },\n events: [\"resize\"]\n }\n };\n function getRows(items) {\n return sortBy(items, \"top\", \"bottom\");\n }\n function getColumns(rows) {\n const columns = [];\n for (const row of rows) {\n const sorted = sortBy(row, \"left\", \"right\");\n for (let j = 0; j < sorted.length; j++) {\n columns[j] = columns[j] ? columns[j].concat(sorted[j]) : sorted[j];\n }\n }\n return isRtl ? columns.reverse() : columns;\n }\n function sortBy(items, startProp, endProp) {\n const sorted = [[]];\n for (const el of items) {\n if (!isVisible(el)) {\n continue;\n }\n let dim = getOffset(el);\n for (let i = sorted.length - 1; i >= 0; i--) {\n const current = sorted[i];\n if (!current[0]) {\n current.push(el);\n break;\n }\n let startDim;\n if (current[0].offsetParent === el.offsetParent) {\n startDim = getOffset(current[0]);\n } else {\n dim = getOffset(el, true);\n startDim = getOffset(current[0], true);\n }\n if (dim[startProp] >= startDim[endProp] - 1 && dim[startProp] !== startDim[startProp]) {\n sorted.push([el]);\n break;\n }\n if (dim[endProp] - 1 > startDim[startProp] || dim[startProp] === startDim[startProp]) {\n current.push(el);\n break;\n }\n if (i === 0) {\n sorted.unshift([el]);\n break;\n }\n }\n }\n return sorted;\n }\n function getOffset(element, offset = false) {\n let { offsetTop, offsetLeft, offsetHeight, offsetWidth } = element;\n if (offset) {\n [offsetTop, offsetLeft] = offsetPosition(element);\n }\n return {\n top: offsetTop,\n left: offsetLeft,\n bottom: offsetTop + offsetHeight,\n right: offsetLeft + offsetWidth\n };\n }\n\n var grid = {\n extends: Margin,\n mixins: [Class],\n name: \"grid\",\n props: {\n masonry: Boolean,\n parallax: Number\n },\n data: {\n margin: \"uk-grid-margin\",\n clsStack: \"uk-grid-stack\",\n masonry: false,\n parallax: 0\n },\n connected() {\n this.masonry && addClass(this.$el, \"uk-flex-top uk-flex-wrap-top\");\n },\n observe: scroll$1({ filter: ({ parallax }) => parallax }),\n update: [\n {\n write({ columns }) {\n toggleClass(this.$el, this.clsStack, columns.length < 2);\n },\n events: [\"resize\"]\n },\n {\n read(data) {\n let { columns, rows } = data;\n if (!columns.length || !this.masonry && !this.parallax || positionedAbsolute(this.$el)) {\n data.translates = false;\n return false;\n }\n let translates = false;\n const nodes = children(this.$el);\n const columnHeights = columns.map((column) => sumBy(column, \"offsetHeight\"));\n const margin = getMarginTop(nodes, this.margin) * (rows.length - 1);\n const elHeight = Math.max(...columnHeights) + margin;\n if (this.masonry) {\n columns = columns.map((column) => sortBy$1(column, \"offsetTop\"));\n translates = getTranslates(rows, columns);\n }\n let padding = Math.abs(this.parallax);\n if (padding) {\n padding = columnHeights.reduce(\n (newPadding, hgt, i) => Math.max(\n newPadding,\n hgt + margin + (i % 2 ? padding : padding / 8) - elHeight\n ),\n 0\n );\n }\n return { padding, columns, translates, height: translates ? elHeight : \"\" };\n },\n write({ height, padding }) {\n css(this.$el, \"paddingBottom\", padding || \"\");\n height !== false && css(this.$el, \"height\", height);\n },\n events: [\"resize\"]\n },\n {\n read() {\n if (this.parallax && positionedAbsolute(this.$el)) {\n return false;\n }\n return {\n scrolled: this.parallax ? scrolledOver(this.$el) * Math.abs(this.parallax) : false\n };\n },\n write({ columns, scrolled, translates }) {\n if (scrolled === false && !translates) {\n return;\n }\n columns.forEach(\n (column, i) => column.forEach(\n (el, j) => css(\n el,\n \"transform\",\n !scrolled && !translates ? \"\" : `translateY(${(translates && -translates[i][j]) + (scrolled ? i % 2 ? scrolled : scrolled / 8 : 0)}px)`\n )\n )\n );\n },\n events: [\"scroll\", \"resize\"]\n }\n ]\n };\n function positionedAbsolute(el) {\n return children(el).some((el2) => css(el2, \"position\") === \"absolute\");\n }\n function getTranslates(rows, columns) {\n const rowHeights = rows.map((row) => Math.max(...row.map((el) => el.offsetHeight)));\n return columns.map((elements) => {\n let prev = 0;\n return elements.map(\n (element, row) => prev += row ? rowHeights[row - 1] - elements[row - 1].offsetHeight : 0\n );\n });\n }\n function getMarginTop(nodes, cls) {\n const [node] = nodes.filter((el) => hasClass(el, cls));\n return toFloat(node ? css(node, \"marginTop\") : css(nodes[0], \"paddingLeft\"));\n }\n\n var heightMatch = {\n args: \"target\",\n props: {\n target: String,\n row: Boolean\n },\n data: {\n target: \"> *\",\n row: true\n },\n computed: {\n elements({ target }, $el) {\n return $$(target, $el);\n }\n },\n observe: resize({\n target: ({ $el, elements }) => [$el, ...elements]\n }),\n update: {\n read() {\n return {\n rows: (this.row ? getRows(this.elements) : [this.elements]).map(match$1)\n };\n },\n write({ rows }) {\n for (const { heights, elements } of rows) {\n elements.forEach((el, i) => css(el, \"minHeight\", heights[i]));\n }\n },\n events: [\"resize\"]\n }\n };\n function match$1(elements) {\n if (elements.length < 2) {\n return { heights: [\"\"], elements };\n }\n let heights = elements.map(getHeight);\n const max = Math.max(...heights);\n return {\n heights: elements.map((el, i) => heights[i].toFixed(2) === max.toFixed(2) ? \"\" : max),\n elements\n };\n }\n function getHeight(element) {\n const style = pick(element.style, [\"display\", \"minHeight\"]);\n if (!isVisible(element)) {\n css(element, \"display\", \"block\", \"important\");\n }\n css(element, \"minHeight\", \"\");\n const height = dimensions$1(element).height - boxModelAdjust(element, \"height\", \"content-box\");\n css(element, style);\n return height;\n }\n\n var heightViewport = {\n props: {\n expand: Boolean,\n offsetTop: Boolean,\n offsetBottom: Boolean,\n minHeight: Number\n },\n data: {\n expand: false,\n offsetTop: false,\n offsetBottom: false,\n minHeight: 0\n },\n // check for offsetTop change\n observe: resize({\n target: ({ $el }) => [$el, ...scrollParents($el)]\n }),\n update: {\n read({ minHeight: prev }) {\n if (!isVisible(this.$el)) {\n return false;\n }\n let minHeight = \"\";\n const box = boxModelAdjust(this.$el, \"height\", \"content-box\");\n const { body, scrollingElement } = document;\n const [scrollElement] = scrollParents(this.$el);\n const { height: viewportHeight } = offsetViewport(\n scrollElement === body ? scrollingElement : scrollElement\n );\n if (this.expand) {\n minHeight = Math.max(\n viewportHeight - (dimensions$1(scrollElement).height - dimensions$1(this.$el).height) - box,\n 0\n );\n } else {\n const isScrollingElement = scrollingElement === scrollElement || body === scrollElement;\n minHeight = `calc(${isScrollingElement ? \"100vh\" : `${viewportHeight}px`}`;\n if (this.offsetTop) {\n if (isScrollingElement) {\n const top = offsetPosition(this.$el)[0] - offsetPosition(scrollElement)[0];\n minHeight += top > 0 && top < viewportHeight / 2 ? ` - ${top}px` : \"\";\n } else {\n minHeight += ` - ${css(scrollElement, \"paddingTop\")}`;\n }\n }\n if (this.offsetBottom === true) {\n minHeight += ` - ${dimensions$1(this.$el.nextElementSibling).height}px`;\n } else if (isNumeric(this.offsetBottom)) {\n minHeight += ` - ${this.offsetBottom}vh`;\n } else if (this.offsetBottom && endsWith(this.offsetBottom, \"px\")) {\n minHeight += ` - ${toFloat(this.offsetBottom)}px`;\n } else if (isString(this.offsetBottom)) {\n minHeight += ` - ${dimensions$1(query(this.offsetBottom, this.$el)).height}px`;\n }\n minHeight += `${box ? ` - ${box}px` : \"\"})`;\n }\n return { minHeight, prev };\n },\n write({ minHeight }) {\n css(this.$el, { minHeight });\n if (this.minHeight && toFloat(css(this.$el, \"minHeight\")) < this.minHeight) {\n css(this.$el, \"minHeight\", this.minHeight);\n }\n },\n events: [\"resize\"]\n }\n };\n\n var Svg = {\n args: \"src\",\n props: {\n width: Number,\n height: Number,\n ratio: Number\n },\n data: {\n ratio: 1\n },\n connected() {\n this.svg = this.getSvg().then((el) => {\n if (!this._connected) {\n return;\n }\n const svg = insertSVG(el, this.$el);\n if (this.svgEl && svg !== this.svgEl) {\n remove$1(this.svgEl);\n }\n applyWidthAndHeight.call(this, svg, el);\n return this.svgEl = svg;\n }, noop);\n },\n disconnected() {\n this.svg.then((svg) => {\n if (this._connected) {\n return;\n }\n if (isVoidElement(this.$el)) {\n this.$el.hidden = false;\n }\n remove$1(svg);\n this.svgEl = null;\n });\n this.svg = null;\n },\n methods: {\n async getSvg() {\n }\n }\n };\n function insertSVG(el, root) {\n if (isVoidElement(root) || isTag(root, \"canvas\")) {\n root.hidden = true;\n const next = root.nextElementSibling;\n return equals(el, next) ? next : after(root, el);\n }\n const last = root.lastElementChild;\n return equals(el, last) ? last : append(root, el);\n }\n function equals(el, other) {\n return isTag(el, \"svg\") && isTag(other, \"svg\") && el.innerHTML === other.innerHTML;\n }\n function applyWidthAndHeight(el, ref) {\n const props = [\"width\", \"height\"];\n let dimensions = props.map((prop) => this[prop]);\n if (!dimensions.some((val) => val)) {\n dimensions = props.map((prop) => attr(ref, prop));\n }\n const viewBox = attr(ref, \"viewBox\");\n if (viewBox && !dimensions.some((val) => val)) {\n dimensions = viewBox.split(\" \").slice(2);\n }\n dimensions.forEach((val, i) => attr(el, props[i], toFloat(val) * this.ratio || null));\n }\n\n var I18n = {\n props: {\n i18n: Object\n },\n data: {\n i18n: null\n },\n methods: {\n t(key, ...params) {\n var _a, _b, _c;\n let i = 0;\n return ((_c = ((_a = this.i18n) == null ? void 0 : _a[key]) || ((_b = this.$options.i18n) == null ? void 0 : _b[key])) == null ? void 0 : _c.replace(\n /%s/g,\n () => params[i++] || \"\"\n )) || \"\";\n }\n }\n };\n\n var closeIcon = \"\";\n\n var closeLarge = \"\";\n\n var dropParentIcon = \"\";\n\n var marker = \"\";\n\n var navParentIcon = \"\";\n\n var navParentIconLarge = \"\";\n\n var navbarParentIcon = \"\";\n\n var navbarToggleIcon = \"\";\n\n var overlayIcon = \"\";\n\n var paginationNext = \"\";\n\n var paginationPrevious = \"\";\n\n var searchIcon = \"\";\n\n var searchLarge = \"\";\n\n var searchNavbar = \"\";\n\n var slidenavNext = \"\";\n\n var slidenavNextLarge = \"\";\n\n var slidenavPrevious = \"\";\n\n var slidenavPreviousLarge = \"\";\n\n var spinner = \"\";\n\n var totop = \"\";\n\n const icons = {\n spinner,\n totop,\n marker,\n \"close-icon\": closeIcon,\n \"close-large\": closeLarge,\n \"drop-parent-icon\": dropParentIcon,\n \"nav-parent-icon\": navParentIcon,\n \"nav-parent-icon-large\": navParentIconLarge,\n \"navbar-parent-icon\": navbarParentIcon,\n \"navbar-toggle-icon\": navbarToggleIcon,\n \"overlay-icon\": overlayIcon,\n \"pagination-next\": paginationNext,\n \"pagination-previous\": paginationPrevious,\n \"search-icon\": searchIcon,\n \"search-large\": searchLarge,\n \"search-navbar\": searchNavbar,\n \"slidenav-next\": slidenavNext,\n \"slidenav-next-large\": slidenavNextLarge,\n \"slidenav-previous\": slidenavPrevious,\n \"slidenav-previous-large\": slidenavPreviousLarge\n };\n const Icon = {\n install: install$3,\n mixins: [Svg],\n args: \"icon\",\n props: { icon: String },\n isIcon: true,\n beforeConnect() {\n addClass(this.$el, \"uk-icon\");\n },\n methods: {\n async getSvg() {\n const icon = getIcon(this.icon);\n if (!icon) {\n throw \"Icon not found.\";\n }\n return icon;\n }\n }\n };\n const IconComponent = {\n args: false,\n extends: Icon,\n data: (vm) => ({\n icon: hyphenate(vm.constructor.options.name)\n }),\n beforeConnect() {\n addClass(this.$el, this.$options.id);\n }\n };\n const NavParentIcon = {\n extends: IconComponent,\n beforeConnect() {\n const icon = this.$props.icon;\n this.icon = closest(this.$el, \".uk-nav-primary\") ? `${icon}-large` : icon;\n }\n };\n const Search = {\n extends: IconComponent,\n beforeConnect() {\n this.icon = hasClass(this.$el, \"uk-search-icon\") && parents(this.$el, \".uk-search-large\").length ? \"search-large\" : parents(this.$el, \".uk-search-navbar\").length ? \"search-navbar\" : this.$props.icon;\n }\n };\n const Spinner = {\n extends: IconComponent,\n beforeConnect() {\n attr(this.$el, \"role\", \"status\");\n },\n methods: {\n async getSvg() {\n const icon = await Icon.methods.getSvg.call(this);\n if (this.ratio !== 1) {\n css($(\"circle\", icon), \"strokeWidth\", 1 / this.ratio);\n }\n return icon;\n }\n }\n };\n const ButtonComponent = {\n extends: IconComponent,\n mixins: [I18n],\n beforeConnect() {\n const button = closest(this.$el, \"a,button\");\n attr(button, \"role\", this.role !== null && isTag(button, \"a\") ? \"button\" : this.role);\n const label = this.t(\"label\");\n if (label && !hasAttr(button, \"aria-label\")) {\n attr(button, \"aria-label\", label);\n }\n }\n };\n const Slidenav = {\n extends: ButtonComponent,\n beforeConnect() {\n addClass(this.$el, \"uk-slidenav\");\n const icon = this.$props.icon;\n this.icon = hasClass(this.$el, \"uk-slidenav-large\") ? `${icon}-large` : icon;\n }\n };\n const NavbarToggleIcon = {\n extends: ButtonComponent,\n i18n: { label: \"Open menu\" }\n };\n const Close = {\n extends: ButtonComponent,\n i18n: { label: \"Close\" },\n beforeConnect() {\n this.icon = `close-${hasClass(this.$el, \"uk-close-large\") ? \"large\" : \"icon\"}`;\n }\n };\n const Marker = {\n extends: ButtonComponent,\n i18n: { label: \"Open\" }\n };\n const Totop = {\n extends: ButtonComponent,\n i18n: { label: \"Back to top\" }\n };\n const PaginationNext = {\n extends: ButtonComponent,\n i18n: { label: \"Next page\" },\n data: { role: null }\n };\n const PaginationPrevious = {\n extends: ButtonComponent,\n i18n: { label: \"Previous page\" },\n data: { role: null }\n };\n const parsed = {};\n function install$3(UIkit) {\n UIkit.icon.add = (name, svg) => {\n const added = isString(name) ? { [name]: svg } : name;\n each(added, (svg2, name2) => {\n icons[name2] = svg2;\n delete parsed[name2];\n });\n if (UIkit._initialized) {\n apply(\n document.body,\n (el) => each(UIkit.getComponents(el), (cmp) => {\n cmp.$options.isIcon && cmp.icon in added && cmp.$reset();\n })\n );\n }\n };\n }\n function getIcon(icon) {\n if (!icons[icon]) {\n return null;\n }\n if (!parsed[icon]) {\n parsed[icon] = $((icons[applyRtl(icon)] || icons[icon]).trim());\n }\n return parsed[icon].cloneNode(true);\n }\n function applyRtl(icon) {\n return isRtl ? swap(swap(icon, \"left\", \"right\"), \"previous\", \"next\") : icon;\n }\n\n const nativeLazyLoad = inBrowser && \"loading\" in HTMLImageElement.prototype;\n var img = {\n args: \"dataSrc\",\n props: {\n dataSrc: String,\n sources: String,\n margin: String,\n target: String,\n loading: String\n },\n data: {\n dataSrc: \"\",\n sources: false,\n margin: \"50%\",\n target: false,\n loading: \"lazy\"\n },\n connected() {\n if (this.loading !== \"lazy\") {\n this.load();\n return;\n }\n if (nativeLazyLoad && isImg(this.$el)) {\n this.$el.loading = \"lazy\";\n setSrcAttrs(this.$el);\n }\n ensureSrcAttribute(this.$el);\n },\n disconnected() {\n if (this.img) {\n this.img.onload = \"\";\n }\n delete this.img;\n },\n observe: intersection({\n target: ({ $el, $props }) => [$el, ...queryAll($props.target, $el)],\n handler(entries, observer) {\n this.load();\n observer.disconnect();\n },\n options: ({ margin }) => ({ rootMargin: margin }),\n filter: ({ loading }) => loading === \"lazy\"\n }),\n methods: {\n load() {\n if (this.img) {\n return this.img;\n }\n const image = isImg(this.$el) ? this.$el : getImageFromElement(this.$el, this.dataSrc, this.sources);\n removeAttr(image, \"loading\");\n setSrcAttrs(this.$el, image.currentSrc);\n return this.img = image;\n }\n }\n };\n function setSrcAttrs(el, src) {\n if (isImg(el)) {\n const parentNode = parent(el);\n const elements = isTag(parentNode, \"picture\") ? children(parentNode) : [el];\n elements.forEach((el2) => setSourceProps(el2, el2));\n } else if (src) {\n const change = !includes(el.style.backgroundImage, src);\n if (change) {\n css(el, \"backgroundImage\", `url(${escape(src)})`);\n trigger(el, createEvent(\"load\", false));\n }\n }\n }\n const srcProps = [\"data-src\", \"data-srcset\", \"sizes\"];\n function setSourceProps(sourceEl, targetEl) {\n srcProps.forEach((prop) => {\n const value = data(sourceEl, prop);\n if (value) {\n attr(targetEl, prop.replace(/^(data-)+/, \"\"), value);\n }\n });\n }\n function getImageFromElement(el, src, sources) {\n const img = new Image();\n wrapInPicture(img, sources);\n setSourceProps(el, img);\n img.onload = () => {\n setSrcAttrs(el, img.currentSrc);\n };\n attr(img, \"src\", src);\n return img;\n }\n function wrapInPicture(img, sources) {\n sources = parseSources(sources);\n if (sources.length) {\n const picture = fragment(\"\");\n for (const attrs of sources) {\n const source = fragment(\"\");\n attr(source, attrs);\n append(picture, source);\n }\n append(picture, img);\n }\n }\n function parseSources(sources) {\n if (!sources) {\n return [];\n }\n if (startsWith(sources, \"[\")) {\n try {\n sources = JSON.parse(sources);\n } catch (e) {\n sources = [];\n }\n } else {\n sources = parseOptions(sources);\n }\n if (!isArray(sources)) {\n sources = [sources];\n }\n return sources.filter((source) => !isEmpty(source));\n }\n function ensureSrcAttribute(el) {\n if (isImg(el) && !hasAttr(el, \"src\")) {\n attr(el, \"src\", 'data:image/svg+xml;utf8,');\n }\n }\n function isImg(el) {\n return isTag(el, \"img\");\n }\n\n var Media = {\n props: {\n media: Boolean\n },\n data: {\n media: false\n },\n connected() {\n const media = toMedia(this.media, this.$el);\n this.matchMedia = true;\n if (media) {\n this.mediaObj = window.matchMedia(media);\n const handler = () => {\n this.matchMedia = this.mediaObj.matches;\n trigger(this.$el, createEvent(\"mediachange\", false, true, [this.mediaObj]));\n };\n this.offMediaObj = on(this.mediaObj, \"change\", () => {\n handler();\n this.$emit(\"resize\");\n });\n handler();\n }\n },\n disconnected() {\n var _a;\n (_a = this.offMediaObj) == null ? void 0 : _a.call(this);\n }\n };\n function toMedia(value, element) {\n if (isString(value)) {\n if (startsWith(value, \"@\")) {\n value = toFloat(css(element, `--uk-breakpoint-${value.substr(1)}`));\n } else if (isNaN(value)) {\n return value;\n }\n }\n return value && isNumeric(value) ? `(min-width: ${value}px)` : \"\";\n }\n\n var leader = {\n mixins: [Class, Media],\n props: {\n fill: String\n },\n data: {\n fill: \"\",\n clsWrapper: \"uk-leader-fill\",\n clsHide: \"uk-leader-hide\",\n attrFill: \"data-fill\"\n },\n computed: {\n fill({ fill }) {\n return fill || css(this.$el, \"--uk-leader-fill-content\");\n }\n },\n connected() {\n [this.wrapper] = wrapInner(this.$el, ``);\n },\n disconnected() {\n unwrap(this.wrapper.childNodes);\n },\n observe: resize(),\n update: {\n read() {\n const width = Math.trunc(this.$el.offsetWidth / 2);\n return {\n width,\n fill: this.fill,\n hide: !this.matchMedia\n };\n },\n write({ width, fill, hide }) {\n toggleClass(this.wrapper, this.clsHide, hide);\n attr(this.wrapper, this.attrFill, new Array(width).join(fill));\n },\n events: [\"resize\"]\n }\n };\n\n const active = [];\n var Modal = {\n mixins: [Class, Container, Togglable],\n props: {\n selPanel: String,\n selClose: String,\n escClose: Boolean,\n bgClose: Boolean,\n stack: Boolean,\n role: String\n },\n data: {\n cls: \"uk-open\",\n escClose: true,\n bgClose: true,\n overlay: true,\n stack: false,\n role: \"dialog\"\n },\n computed: {\n panel({ selPanel }, $el) {\n return $(selPanel, $el);\n },\n transitionElement() {\n return this.panel;\n },\n bgClose({ bgClose }) {\n return bgClose && this.panel;\n }\n },\n connected() {\n attr(this.panel || this.$el, \"role\", this.role);\n if (this.overlay) {\n attr(this.panel || this.$el, \"aria-modal\", true);\n }\n },\n beforeDisconnect() {\n if (includes(active, this)) {\n this.toggleElement(this.$el, false, false);\n }\n },\n events: [\n {\n name: \"click\",\n delegate() {\n return `${this.selClose},a[href*=\"#\"]`;\n },\n handler(e) {\n const { current, defaultPrevented } = e;\n const { hash } = current;\n if (!defaultPrevented && hash && isSameSiteAnchor(current) && !within(hash, this.$el) && $(hash, document.body)) {\n this.hide();\n } else if (matches(current, this.selClose)) {\n e.preventDefault();\n this.hide();\n }\n }\n },\n {\n name: \"toggle\",\n self: true,\n handler(e) {\n if (e.defaultPrevented) {\n return;\n }\n e.preventDefault();\n if (this.isToggled() === includes(active, this)) {\n this.toggle();\n }\n }\n },\n {\n name: \"beforeshow\",\n self: true,\n handler(e) {\n if (includes(active, this)) {\n return false;\n }\n if (!this.stack && active.length) {\n Promise.all(active.map((modal) => modal.hide())).then(this.show);\n e.preventDefault();\n } else {\n active.push(this);\n }\n }\n },\n {\n name: \"show\",\n self: true,\n handler() {\n if (this.stack) {\n css(this.$el, \"zIndex\", toFloat(css(this.$el, \"zIndex\")) + active.length);\n }\n const handlers = [\n this.overlay && preventBackgroundFocus(this),\n this.overlay && preventBackgroundScroll(this.$el),\n this.bgClose && listenForBackgroundClose(this),\n this.escClose && listenForEscClose(this)\n ];\n once(\n this.$el,\n \"hidden\",\n () => handlers.forEach((handler) => handler && handler()),\n { self: true }\n );\n addClass(document.documentElement, this.clsPage);\n }\n },\n {\n name: \"shown\",\n self: true,\n handler() {\n if (!isFocusable(this.$el)) {\n attr(this.$el, \"tabindex\", \"-1\");\n }\n if (!matches(this.$el, \":focus-within\")) {\n this.$el.focus();\n }\n }\n },\n {\n name: \"hidden\",\n self: true,\n handler() {\n if (includes(active, this)) {\n active.splice(active.indexOf(this), 1);\n }\n css(this.$el, \"zIndex\", \"\");\n if (!active.some((modal) => modal.clsPage === this.clsPage)) {\n removeClass(document.documentElement, this.clsPage);\n }\n }\n }\n ],\n methods: {\n toggle() {\n return this.isToggled() ? this.hide() : this.show();\n },\n show() {\n if (this.container && parent(this.$el) !== this.container) {\n append(this.container, this.$el);\n return new Promise(\n (resolve) => requestAnimationFrame(() => this.show().then(resolve))\n );\n }\n return this.toggleElement(this.$el, true, animate);\n },\n hide() {\n return this.toggleElement(this.$el, false, animate);\n }\n }\n };\n function animate(el, show, { transitionElement, _toggle }) {\n return new Promise(\n (resolve, reject) => once(el, \"show hide\", () => {\n var _a;\n (_a = el._reject) == null ? void 0 : _a.call(el);\n el._reject = reject;\n _toggle(el, show);\n const off = once(\n transitionElement,\n \"transitionstart\",\n () => {\n once(transitionElement, \"transitionend transitioncancel\", resolve, {\n self: true\n });\n clearTimeout(timer);\n },\n { self: true }\n );\n const timer = setTimeout(() => {\n off();\n resolve();\n }, toMs(css(transitionElement, \"transitionDuration\")));\n })\n ).then(() => delete el._reject);\n }\n function toMs(time) {\n return time ? endsWith(time, \"ms\") ? toFloat(time) : toFloat(time) * 1e3 : 0;\n }\n function preventBackgroundFocus(modal) {\n return on(document, \"focusin\", (e) => {\n if (last(active) === modal && !within(e.target, modal.$el)) {\n modal.$el.focus();\n }\n });\n }\n function listenForBackgroundClose(modal) {\n return on(document, pointerDown$1, ({ target }) => {\n if (last(active) !== modal || modal.overlay && !within(target, modal.$el) || within(target, modal.panel)) {\n return;\n }\n once(\n document,\n `${pointerUp$1} ${pointerCancel} scroll`,\n ({ defaultPrevented, type, target: newTarget }) => {\n if (!defaultPrevented && type === pointerUp$1 && target === newTarget) {\n modal.hide();\n }\n },\n true\n );\n });\n }\n function listenForEscClose(modal) {\n return on(document, \"keydown\", (e) => {\n if (e.keyCode === 27 && last(active) === modal) {\n modal.hide();\n }\n });\n }\n\n var modal = {\n install: install$2,\n mixins: [Modal],\n data: {\n clsPage: \"uk-modal-page\",\n selPanel: \".uk-modal-dialog\",\n selClose: \".uk-modal-close, .uk-modal-close-default, .uk-modal-close-outside, .uk-modal-close-full\"\n },\n events: [\n {\n name: \"show\",\n self: true,\n handler() {\n if (hasClass(this.panel, \"uk-margin-auto-vertical\")) {\n addClass(this.$el, \"uk-flex\");\n } else {\n css(this.$el, \"display\", \"block\");\n }\n height(this.$el);\n }\n },\n {\n name: \"hidden\",\n self: true,\n handler() {\n css(this.$el, \"display\", \"\");\n removeClass(this.$el, \"uk-flex\");\n }\n }\n ]\n };\n function install$2({ modal }) {\n modal.dialog = function(content, options) {\n const dialog = modal(\n `
\n
${content}
\n
`,\n options\n );\n dialog.show();\n on(\n dialog.$el,\n \"hidden\",\n async () => {\n await Promise.resolve();\n dialog.$destroy(true);\n },\n { self: true }\n );\n return dialog;\n };\n modal.alert = function(message, options) {\n return openDialog(\n ({ i18n }) => `
${isString(message) ? message : html(message)}
\n `,\n options,\n (deferred) => deferred.resolve()\n );\n };\n modal.confirm = function(message, options) {\n return openDialog(\n ({ i18n }) => `
\n
${isString(message) ? message : html(message)}
\n \n
`,\n options,\n (deferred) => deferred.reject()\n );\n };\n modal.prompt = function(message, value, options) {\n return openDialog(\n ({ i18n }) => `
\n
\n \n \n
\n \n
`,\n options,\n (deferred) => deferred.resolve(null),\n (dialog) => $(\"input\", dialog.$el).value\n );\n };\n modal.i18n = {\n ok: \"Ok\",\n cancel: \"Cancel\"\n };\n function openDialog(tmpl, options, hideFn, submitFn) {\n options = {\n bgClose: false,\n escClose: true,\n role: \"alertdialog\",\n ...options,\n i18n: { ...modal.i18n, ...options == null ? void 0 : options.i18n }\n };\n const dialog = modal.dialog(tmpl(options), options);\n const deferred = new Deferred();\n let resolved = false;\n on(dialog.$el, \"submit\", \"form\", (e) => {\n e.preventDefault();\n deferred.resolve(submitFn == null ? void 0 : submitFn(dialog));\n resolved = true;\n dialog.hide();\n });\n on(dialog.$el, \"hide\", () => !resolved && hideFn(deferred));\n deferred.promise.dialog = dialog;\n return deferred.promise;\n }\n }\n\n var nav = {\n extends: Accordion,\n data: {\n targets: \"> .uk-parent\",\n toggle: \"> a\",\n content: \"> ul\"\n }\n };\n\n var navbar = {\n extends: Dropnav,\n data: {\n clsDrop: \"uk-navbar-dropdown\",\n selNavItem: \".uk-navbar-nav > li > a,a.uk-navbar-item,button.uk-navbar-item,.uk-navbar-item a,.uk-navbar-item button,.uk-navbar-toggle\"\n // Simplify with :where() selector once browser target is Safari 14+\n },\n watch: {\n items() {\n const justify = hasClass(this.$el, \"uk-navbar-justify\");\n for (const container of $$(\n \".uk-navbar-nav, .uk-navbar-left, .uk-navbar-right\",\n this.$el\n )) {\n css(\n container,\n \"flexGrow\",\n justify ? $$(\n \".uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle\",\n container\n ).length : \"\"\n );\n }\n }\n }\n };\n\n var offcanvas = {\n mixins: [Modal],\n args: \"mode\",\n props: {\n mode: String,\n flip: Boolean,\n overlay: Boolean,\n swiping: Boolean\n },\n data: {\n mode: \"slide\",\n flip: false,\n overlay: false,\n clsPage: \"uk-offcanvas-page\",\n clsContainer: \"uk-offcanvas-container\",\n selPanel: \".uk-offcanvas-bar\",\n clsFlip: \"uk-offcanvas-flip\",\n clsContainerAnimation: \"uk-offcanvas-container-animation\",\n clsSidebarAnimation: \"uk-offcanvas-bar-animation\",\n clsMode: \"uk-offcanvas\",\n clsOverlay: \"uk-offcanvas-overlay\",\n selClose: \".uk-offcanvas-close\",\n container: false,\n swiping: true\n },\n computed: {\n clsFlip({ flip, clsFlip }) {\n return flip ? clsFlip : \"\";\n },\n clsOverlay({ overlay, clsOverlay }) {\n return overlay ? clsOverlay : \"\";\n },\n clsMode({ mode, clsMode }) {\n return `${clsMode}-${mode}`;\n },\n clsSidebarAnimation({ mode, clsSidebarAnimation }) {\n return mode === \"none\" || mode === \"reveal\" ? \"\" : clsSidebarAnimation;\n },\n clsContainerAnimation({ mode, clsContainerAnimation }) {\n return mode !== \"push\" && mode !== \"reveal\" ? \"\" : clsContainerAnimation;\n },\n transitionElement({ mode }) {\n return mode === \"reveal\" ? parent(this.panel) : this.panel;\n }\n },\n observe: swipe({ filter: ({ swiping }) => swiping }),\n update: {\n read() {\n if (this.isToggled() && !isVisible(this.$el)) {\n this.hide();\n }\n },\n events: [\"resize\"]\n },\n events: [\n {\n name: \"touchmove\",\n self: true,\n passive: false,\n filter() {\n return this.overlay;\n },\n handler(e) {\n e.cancelable && e.preventDefault();\n }\n },\n {\n name: \"show\",\n self: true,\n handler() {\n if (this.mode === \"reveal\" && !hasClass(parent(this.panel), this.clsMode)) {\n wrapAll(this.panel, \"
\");\n addClass(parent(this.panel), this.clsMode);\n }\n const { body, scrollingElement } = document;\n addClass(body, this.clsContainer, this.clsFlip);\n css(body, \"touch-action\", \"pan-y pinch-zoom\");\n css(this.$el, \"display\", \"block\");\n css(this.panel, \"maxWidth\", scrollingElement.clientWidth);\n addClass(this.$el, this.clsOverlay);\n addClass(\n this.panel,\n this.clsSidebarAnimation,\n this.mode === \"reveal\" ? \"\" : this.clsMode\n );\n height(body);\n addClass(body, this.clsContainerAnimation);\n this.clsContainerAnimation && suppressUserScale();\n }\n },\n {\n name: \"hide\",\n self: true,\n handler() {\n removeClass(document.body, this.clsContainerAnimation);\n css(document.body, \"touch-action\", \"\");\n }\n },\n {\n name: \"hidden\",\n self: true,\n handler() {\n this.clsContainerAnimation && resumeUserScale();\n if (this.mode === \"reveal\") {\n unwrap(this.panel);\n }\n removeClass(this.panel, this.clsSidebarAnimation, this.clsMode);\n removeClass(this.$el, this.clsOverlay);\n css(this.$el, \"display\", \"\");\n css(this.panel, \"maxWidth\", \"\");\n removeClass(document.body, this.clsContainer, this.clsFlip);\n }\n },\n {\n name: \"swipeLeft swipeRight\",\n handler(e) {\n if (this.isToggled() && endsWith(e.type, \"Left\") ^ this.flip) {\n this.hide();\n }\n }\n }\n ]\n };\n function suppressUserScale() {\n getViewport().content += \",user-scalable=0\";\n }\n function resumeUserScale() {\n const viewport = getViewport();\n viewport.content = viewport.content.replace(/,user-scalable=0$/, \"\");\n }\n function getViewport() {\n return $('meta[name=\"viewport\"]', document.head) || append(document.head, '');\n }\n\n var overflowAuto = {\n mixins: [Class],\n props: {\n selContainer: String,\n selContent: String,\n minHeight: Number\n },\n data: {\n selContainer: \".uk-modal\",\n selContent: \".uk-modal-dialog\",\n minHeight: 150\n },\n computed: {\n container({ selContainer }, $el) {\n return closest($el, selContainer);\n },\n content({ selContent }, $el) {\n return closest($el, selContent);\n }\n },\n observe: resize({\n target: ({ container, content }) => [container, content]\n }),\n update: {\n read() {\n if (!this.content || !this.container || !isVisible(this.$el)) {\n return false;\n }\n return {\n max: Math.max(\n this.minHeight,\n height(this.container) - (dimensions$1(this.content).height - height(this.$el))\n )\n };\n },\n write({ max }) {\n css(this.$el, { minHeight: this.minHeight, maxHeight: max });\n },\n events: [\"resize\"]\n }\n };\n\n var responsive = {\n props: [\"width\", \"height\"],\n connected() {\n addClass(this.$el, \"uk-responsive-width\");\n },\n observe: resize({\n target: ({ $el }) => [$el, parent($el)]\n }),\n update: {\n read() {\n return isVisible(this.$el) && this.width && this.height ? { width: width(parent(this.$el)), height: this.height } : false;\n },\n write(dim) {\n height(\n this.$el,\n Dimensions.contain(\n {\n height: this.height,\n width: this.width\n },\n dim\n ).height\n );\n },\n events: [\"resize\"]\n }\n };\n\n var scroll = {\n props: {\n offset: Number\n },\n data: {\n offset: 0\n },\n connected() {\n registerClick(this);\n },\n disconnected() {\n unregisterClick(this);\n },\n methods: {\n async scrollTo(el) {\n el = el && $(el) || document.body;\n if (trigger(this.$el, \"beforescroll\", [this, el])) {\n await scrollIntoView(el, { offset: this.offset });\n trigger(this.$el, \"scrolled\", [this, el]);\n }\n }\n }\n };\n const instances = /* @__PURE__ */ new Set();\n function registerClick(cmp) {\n if (!instances.size) {\n on(document, \"click\", clickHandler);\n }\n instances.add(cmp);\n }\n function unregisterClick(cmp) {\n instances.delete(cmp);\n if (!instances.size) {\n off(document, \"click\", clickHandler);\n }\n }\n function clickHandler(e) {\n if (e.defaultPrevented) {\n return;\n }\n for (const instance of instances) {\n if (within(e.target, instance.$el) && isSameSiteAnchor(instance.$el)) {\n e.preventDefault();\n if (window.location.href !== instance.$el.href) {\n window.history.pushState({}, \"\", instance.$el.href);\n }\n instance.scrollTo(getTargetedElement(instance.$el));\n }\n }\n }\n\n var scrollspy = {\n args: \"cls\",\n props: {\n cls: String,\n target: String,\n hidden: Boolean,\n margin: String,\n repeat: Boolean,\n delay: Number\n },\n data: () => ({\n cls: \"\",\n target: false,\n hidden: true,\n margin: \"-1px\",\n repeat: false,\n delay: 0,\n inViewClass: \"uk-scrollspy-inview\"\n }),\n computed: {\n elements({ target }, $el) {\n return target ? $$(target, $el) : [$el];\n }\n },\n watch: {\n elements(elements) {\n if (this.hidden) {\n css(filter$1(elements, `:not(.${this.inViewClass})`), \"opacity\", 0);\n }\n }\n },\n connected() {\n this.elementData = /* @__PURE__ */ new Map();\n },\n disconnected() {\n for (const [el, state] of this.elementData.entries()) {\n removeClass(el, this.inViewClass, (state == null ? void 0 : state.cls) || \"\");\n }\n delete this.elementData;\n },\n observe: intersection({\n target: ({ elements }) => elements,\n handler(records) {\n const elements = this.elementData;\n for (const { target: el, isIntersecting } of records) {\n if (!elements.has(el)) {\n elements.set(el, {\n cls: data(el, \"uk-scrollspy-class\") || this.cls\n });\n }\n const state = elements.get(el);\n if (!this.repeat && state.show) {\n continue;\n }\n state.show = isIntersecting;\n }\n this.$emit();\n },\n options: (instance) => ({ rootMargin: instance.margin }),\n args: { intersecting: false }\n }),\n update: [\n {\n write(data) {\n for (const [el, state] of this.elementData.entries()) {\n if (state.show && !state.inview && !state.queued) {\n state.queued = true;\n data.promise = (data.promise || Promise.resolve()).then(() => new Promise((resolve) => setTimeout(resolve, this.delay))).then(() => {\n this.toggle(el, true);\n setTimeout(() => {\n state.queued = false;\n this.$emit();\n }, 300);\n });\n } else if (!state.show && state.inview && !state.queued && this.repeat) {\n this.toggle(el, false);\n }\n }\n }\n }\n ],\n methods: {\n toggle(el, inview) {\n var _a;\n const state = this.elementData.get(el);\n if (!state) {\n return;\n }\n (_a = state.off) == null ? void 0 : _a.call(state);\n css(el, \"opacity\", !inview && this.hidden ? 0 : \"\");\n toggleClass(el, this.inViewClass, inview);\n toggleClass(el, state.cls);\n if (/\\buk-animation-/.test(state.cls)) {\n const removeAnimationClasses = () => removeClasses(el, \"uk-animation-[\\\\w-]+\");\n if (inview) {\n state.off = once(el, \"animationcancel animationend\", removeAnimationClasses);\n } else {\n removeAnimationClasses();\n }\n }\n trigger(el, inview ? \"inview\" : \"outview\");\n state.inview = inview;\n this.$update(el);\n }\n }\n };\n\n var scrollspyNav = {\n props: {\n cls: String,\n closest: String,\n scroll: Boolean,\n overflow: Boolean,\n offset: Number\n },\n data: {\n cls: \"uk-active\",\n closest: false,\n scroll: false,\n overflow: true,\n offset: 0\n },\n computed: {\n links(_, $el) {\n return $$('a[href*=\"#\"]', $el).filter((el) => el.hash && isSameSiteAnchor(el));\n },\n elements({ closest: selector }) {\n return closest(this.links, selector || \"*\");\n }\n },\n watch: {\n links(links) {\n if (this.scroll) {\n this.$create(\"scroll\", links, { offset: this.offset || 0 });\n }\n }\n },\n observe: [intersection(), scroll$1()],\n update: [\n {\n read() {\n const targets = this.links.map(getTargetedElement).filter(Boolean);\n const { length } = targets;\n if (!length || !isVisible(this.$el)) {\n return false;\n }\n const [scrollElement] = scrollParents(targets, true);\n const { scrollTop, scrollHeight } = scrollElement;\n const viewport = offsetViewport(scrollElement);\n const max = scrollHeight - viewport.height;\n let active = false;\n if (scrollTop === max) {\n active = length - 1;\n } else {\n for (let i = 0; i < targets.length; i++) {\n if (offset(targets[i]).top - viewport.top - this.offset > 0) {\n break;\n }\n active = +i;\n }\n if (active === false && this.overflow) {\n active = 0;\n }\n }\n return { active };\n },\n write({ active }) {\n const changed = active !== false && !hasClass(this.elements[active], this.cls);\n this.links.forEach((el) => el.blur());\n for (let i = 0; i < this.elements.length; i++) {\n toggleClass(this.elements[i], this.cls, +i === active);\n }\n if (changed) {\n trigger(this.$el, \"active\", [active, this.elements[active]]);\n }\n },\n events: [\"scroll\", \"resize\"]\n }\n ]\n };\n\n var sticky = {\n mixins: [Class, Media],\n props: {\n position: String,\n top: null,\n bottom: null,\n start: null,\n end: null,\n offset: String,\n overflowFlip: Boolean,\n animation: String,\n clsActive: String,\n clsInactive: String,\n clsFixed: String,\n clsBelow: String,\n selTarget: String,\n showOnUp: Boolean,\n targetOffset: Number\n },\n data: {\n position: \"top\",\n top: false,\n bottom: false,\n start: false,\n end: false,\n offset: 0,\n overflowFlip: false,\n animation: \"\",\n clsActive: \"uk-active\",\n clsInactive: \"\",\n clsFixed: \"uk-sticky-fixed\",\n clsBelow: \"uk-sticky-below\",\n selTarget: \"\",\n showOnUp: false,\n targetOffset: false\n },\n computed: {\n selTarget({ selTarget }, $el) {\n return selTarget && $(selTarget, $el) || $el;\n }\n },\n connected() {\n this.start = coerce(this.start || this.top);\n this.end = coerce(this.end || this.bottom);\n this.placeholder = $(\"+ .uk-sticky-placeholder\", this.$el) || $('
');\n this.isFixed = false;\n this.setActive(false);\n },\n disconnected() {\n if (this.isFixed) {\n this.hide();\n removeClass(this.selTarget, this.clsInactive);\n }\n reset(this.$el);\n remove$1(this.placeholder);\n this.placeholder = null;\n },\n observe: [\n resize({\n handler() {\n !this.isFixed && this.$emit(\"resize\");\n }\n }),\n resize({ target: () => [document.documentElement] }),\n scroll$1()\n ],\n events: [\n {\n name: \"resize\",\n el() {\n return [window, window.visualViewport];\n },\n handler() {\n this.$emit(\"resizeViewport\");\n }\n },\n {\n name: \"load hashchange popstate\",\n el() {\n return window;\n },\n filter() {\n return this.targetOffset !== false;\n },\n handler() {\n const { scrollingElement } = document;\n if (!location.hash || scrollingElement.scrollTop === 0) {\n return;\n }\n setTimeout(() => {\n const targetOffset = offset($(location.hash));\n const elOffset = offset(this.$el);\n if (this.isFixed && intersectRect(targetOffset, elOffset)) {\n scrollingElement.scrollTop = targetOffset.top - elOffset.height - toPx(this.targetOffset, \"height\", this.placeholder) - toPx(this.offset, \"height\", this.placeholder);\n }\n });\n }\n }\n ],\n update: [\n {\n read({ height: height$1, width, margin, sticky }, types) {\n this.inactive = !this.matchMedia || !isVisible(this.$el);\n if (this.inactive) {\n return;\n }\n const hide = this.isFixed && types.has(\"resize\") && !sticky;\n if (hide) {\n preventTransition(this.selTarget);\n this.hide();\n }\n if (!this.active) {\n ({ height: height$1, width } = offset(this.$el));\n margin = css(this.$el, \"margin\");\n }\n if (hide) {\n this.show();\n }\n const viewport = toPx(\"100vh\", \"height\");\n const dynamicViewport = height(window);\n const maxScrollHeight = document.scrollingElement.scrollHeight - viewport;\n let position = this.position;\n if (this.overflowFlip && height$1 > viewport) {\n position = position === \"top\" ? \"bottom\" : \"top\";\n }\n const referenceElement = this.isFixed ? this.placeholder : this.$el;\n let offset$1 = toPx(this.offset, \"height\", sticky ? this.$el : referenceElement);\n if (position === \"bottom\" && (height$1 < dynamicViewport || this.overflowFlip)) {\n offset$1 += dynamicViewport - height$1;\n }\n const overflow = this.overflowFlip ? 0 : Math.max(0, height$1 + offset$1 - viewport);\n const topOffset = offset(referenceElement).top;\n const elHeight = offset(this.$el).height;\n const start = (this.start === false ? topOffset : parseProp(this.start, this.$el, topOffset)) - offset$1;\n const end = this.end === false ? maxScrollHeight : Math.min(\n maxScrollHeight,\n parseProp(this.end, this.$el, topOffset + height$1, true) - elHeight - offset$1 + overflow\n );\n sticky = maxScrollHeight && !this.showOnUp && start + offset$1 === topOffset && end === Math.min(\n maxScrollHeight,\n parseProp(\"!*\", this.$el, 0, true) - elHeight - offset$1 + overflow\n ) && css(parent(this.$el), \"overflowY\") === \"visible\";\n return {\n start,\n end,\n offset: offset$1,\n overflow,\n topOffset,\n height: height$1,\n elHeight,\n width,\n margin,\n top: offsetPosition(referenceElement)[0],\n sticky\n };\n },\n write({ height, width, margin, offset, sticky }) {\n if (this.inactive || sticky || !this.isFixed) {\n reset(this.$el);\n }\n if (this.inactive) {\n return;\n }\n if (sticky) {\n height = width = margin = 0;\n css(this.$el, { position: \"sticky\", top: offset });\n }\n const { placeholder } = this;\n css(placeholder, { height, width, margin });\n if (!within(placeholder, document)) {\n placeholder.hidden = true;\n }\n (sticky ? before : after)(this.$el, placeholder);\n },\n events: [\"resize\", \"resizeViewport\"]\n },\n {\n read({\n scroll: prevScroll = 0,\n dir: prevDir = \"down\",\n overflow,\n overflowScroll = 0,\n start,\n end\n }) {\n const scroll2 = document.scrollingElement.scrollTop;\n const dir = prevScroll <= scroll2 ? \"down\" : \"up\";\n return {\n dir,\n prevDir,\n scroll: scroll2,\n prevScroll,\n offsetParentTop: offset(\n (this.isFixed ? this.placeholder : this.$el).offsetParent\n ).top,\n overflowScroll: clamp(\n overflowScroll + clamp(scroll2, start, end) - clamp(prevScroll, start, end),\n 0,\n overflow\n )\n };\n },\n write(data, types) {\n const isScrollUpdate = types.has(\"scroll\");\n const {\n initTimestamp = 0,\n dir,\n prevDir,\n scroll: scroll2,\n prevScroll = 0,\n top,\n start,\n topOffset,\n height\n } = data;\n if (scroll2 < 0 || scroll2 === prevScroll && isScrollUpdate || this.showOnUp && !isScrollUpdate && !this.isFixed) {\n return;\n }\n const now = Date.now();\n if (now - initTimestamp > 300 || dir !== prevDir) {\n data.initScroll = scroll2;\n data.initTimestamp = now;\n }\n if (this.showOnUp && !this.isFixed && Math.abs(data.initScroll - scroll2) <= 30 && Math.abs(prevScroll - scroll2) <= 10) {\n return;\n }\n if (this.inactive || scroll2 < start || this.showOnUp && (scroll2 <= start || dir === \"down\" && isScrollUpdate || dir === \"up\" && !this.isFixed && scroll2 <= topOffset + height)) {\n if (!this.isFixed) {\n if (Animation.inProgress(this.$el) && top > scroll2) {\n Animation.cancel(this.$el);\n this.hide();\n }\n return;\n }\n if (this.animation && scroll2 > topOffset) {\n Animation.cancel(this.$el);\n Animation.out(this.$el, this.animation).then(() => this.hide(), noop);\n } else {\n this.hide();\n }\n } else if (this.isFixed) {\n this.update();\n } else if (this.animation && scroll2 > topOffset) {\n Animation.cancel(this.$el);\n this.show();\n Animation.in(this.$el, this.animation).catch(noop);\n } else {\n preventTransition(this.selTarget);\n this.show();\n }\n },\n events: [\"resize\", \"resizeViewport\", \"scroll\"]\n }\n ],\n methods: {\n show() {\n this.isFixed = true;\n this.update();\n this.placeholder.hidden = false;\n },\n hide() {\n const { offset, sticky } = this._data;\n this.setActive(false);\n removeClass(this.$el, this.clsFixed, this.clsBelow);\n if (sticky) {\n css(this.$el, \"top\", offset);\n } else {\n css(this.$el, {\n position: \"\",\n top: \"\",\n width: \"\",\n marginTop: \"\"\n });\n }\n this.placeholder.hidden = true;\n this.isFixed = false;\n },\n update() {\n let {\n width,\n scroll: scroll2 = 0,\n overflow,\n overflowScroll = 0,\n start,\n end,\n offset,\n topOffset,\n height,\n elHeight,\n offsetParentTop,\n sticky\n } = this._data;\n const active = start !== 0 || scroll2 > start;\n if (!sticky) {\n let position = \"fixed\";\n if (scroll2 > end) {\n offset += end - offsetParentTop;\n position = \"absolute\";\n }\n css(this.$el, { position, width });\n css(this.$el, \"marginTop\", 0, \"important\");\n }\n if (overflow) {\n offset -= overflowScroll;\n }\n css(this.$el, \"top\", offset);\n this.setActive(active);\n toggleClass(\n this.$el,\n this.clsBelow,\n scroll2 > topOffset + (sticky ? Math.min(height, elHeight) : height)\n );\n addClass(this.$el, this.clsFixed);\n },\n setActive(active) {\n const prev = this.active;\n this.active = active;\n if (active) {\n replaceClass(this.selTarget, this.clsInactive, this.clsActive);\n prev !== active && trigger(this.$el, \"active\");\n } else {\n replaceClass(this.selTarget, this.clsActive, this.clsInactive);\n prev !== active && trigger(this.$el, \"inactive\");\n }\n }\n }\n };\n function parseProp(value, el, propOffset, padding) {\n if (!value) {\n return 0;\n }\n if (isNumeric(value) || isString(value) && value.match(/^-?\\d/)) {\n return propOffset + toPx(value, \"height\", el, true);\n } else {\n const refElement = value === true ? parent(el) : query(value, el);\n return offset(refElement).bottom - (padding && refElement && within(el, refElement) ? toFloat(css(refElement, \"paddingBottom\")) : 0);\n }\n }\n function coerce(value) {\n if (value === \"true\") {\n return true;\n } else if (value === \"false\") {\n return false;\n }\n return value;\n }\n function reset(el) {\n css(el, { position: \"\", top: \"\", marginTop: \"\", width: \"\" });\n }\n function preventTransition(el) {\n css(el, \"transition\", \"0s\");\n requestAnimationFrame(() => css(el, \"transition\", \"\"));\n }\n\n function getMaxPathLength(el) {\n return Math.ceil(\n Math.max(\n 0,\n ...$$(\"[stroke]\", el).map((stroke) => {\n try {\n return stroke.getTotalLength();\n } catch (e) {\n return 0;\n }\n })\n )\n );\n }\n\n var svg = {\n mixins: [Svg],\n args: \"src\",\n props: {\n src: String,\n icon: String,\n attributes: \"list\",\n strokeAnimation: Boolean\n },\n data: {\n strokeAnimation: false\n },\n observe: [\n mutation({\n async handler() {\n const svg = await this.svg;\n if (svg) {\n applyAttributes.call(this, svg);\n }\n },\n options: {\n attributes: true,\n attributeFilter: [\"id\", \"class\", \"style\"]\n }\n })\n ],\n async connected() {\n if (includes(this.src, \"#\")) {\n [this.src, this.icon] = this.src.split(\"#\");\n }\n const svg = await this.svg;\n if (svg) {\n applyAttributes.call(this, svg);\n if (this.strokeAnimation) {\n applyAnimation(svg);\n }\n }\n },\n methods: {\n async getSvg() {\n if (isTag(this.$el, \"img\") && !this.$el.complete && this.$el.loading === \"lazy\") {\n return new Promise(\n (resolve) => once(this.$el, \"load\", () => resolve(this.getSvg()))\n );\n }\n return parseSVG(await loadSVG(this.src), this.icon) || Promise.reject(\"SVG not found.\");\n }\n }\n };\n function applyAttributes(el) {\n const { $el } = this;\n addClass(el, attr($el, \"class\"), \"uk-svg\");\n for (let i = 0; i < $el.style.length; i++) {\n const prop = $el.style[i];\n css(el, prop, css($el, prop));\n }\n for (const attribute in this.attributes) {\n const [prop, value] = this.attributes[attribute].split(\":\", 2);\n attr(el, prop, value);\n }\n if (!this.$el.id) {\n removeAttr(el, \"id\");\n }\n }\n const loadSVG = memoize(async (src) => {\n if (src) {\n if (startsWith(src, \"data:\")) {\n return decodeURIComponent(src.split(\",\")[1]);\n } else {\n return (await fetch(src)).text();\n }\n } else {\n return Promise.reject();\n }\n });\n function parseSVG(svg, icon) {\n if (icon && includes(svg, \"/g;\n const parseSymbols = memoize(function(svg) {\n const symbols = {};\n symbolRe.lastIndex = 0;\n let match;\n while (match = symbolRe.exec(svg)) {\n symbols[match[3]] = ``;\n }\n return symbols;\n });\n function applyAnimation(el) {\n const length = getMaxPathLength(el);\n if (length) {\n css(el, \"--uk-animation-stroke\", length);\n }\n }\n\n const selDisabled = \".uk-disabled *, .uk-disabled, [disabled]\";\n var Switcher = {\n mixins: [Togglable],\n args: \"connect\",\n props: {\n connect: String,\n toggle: String,\n itemNav: String,\n active: Number,\n followFocus: Boolean,\n swiping: Boolean\n },\n data: {\n connect: \"~.uk-switcher\",\n toggle: \"> * > :first-child\",\n itemNav: false,\n active: 0,\n cls: \"uk-active\",\n attrItem: \"uk-switcher-item\",\n selVertical: \".uk-nav\",\n followFocus: false,\n swiping: true\n },\n computed: {\n connects({ connect }, $el) {\n return queryAll(connect, $el);\n },\n connectChildren() {\n return this.connects.map((el) => children(el)).flat();\n },\n toggles({ toggle }, $el) {\n return $$(toggle, $el);\n },\n children() {\n return children(this.$el).filter(\n (child) => this.toggles.some((toggle) => within(toggle, child))\n );\n }\n },\n watch: {\n connects(connects) {\n if (this.swiping) {\n css(connects, \"touchAction\", \"pan-y pinch-zoom\");\n }\n this.$emit();\n },\n connectChildren() {\n const index = this.index();\n for (const el of this.connects) {\n children(el).forEach((child, i) => toggleClass(child, this.cls, i === index));\n }\n this.$emit();\n },\n toggles(toggles) {\n this.$emit();\n const active = this.index();\n this.show(~active ? active : toggles[this.active] || toggles[0]);\n }\n },\n connected() {\n attr(this.$el, \"role\", \"tablist\");\n },\n observe: [\n lazyload({ targets: ({ connectChildren }) => connectChildren }),\n swipe({ target: ({ connects }) => connects, filter: ({ swiping }) => swiping })\n ],\n events: [\n {\n name: \"click keydown\",\n delegate() {\n return this.toggle;\n },\n handler(e) {\n if (!matches(e.current, selDisabled) && (e.type === \"click\" || e.keyCode === keyMap.SPACE)) {\n e.preventDefault();\n this.show(e.current);\n }\n }\n },\n {\n name: \"keydown\",\n delegate() {\n return this.toggle;\n },\n handler(e) {\n const { current, keyCode } = e;\n const isVertical = matches(this.$el, this.selVertical);\n let i = keyCode === keyMap.HOME ? 0 : keyCode === keyMap.END ? \"last\" : keyCode === keyMap.LEFT && !isVertical || keyCode === keyMap.UP && isVertical ? \"previous\" : keyCode === keyMap.RIGHT && !isVertical || keyCode === keyMap.DOWN && isVertical ? \"next\" : -1;\n if (~i) {\n e.preventDefault();\n const toggles = this.toggles.filter((el) => !matches(el, selDisabled));\n const next = toggles[getIndex(i, toggles, toggles.indexOf(current))];\n next.focus();\n if (this.followFocus) {\n this.show(next);\n }\n }\n }\n },\n {\n name: \"click\",\n el() {\n return this.connects.concat(this.itemNav ? queryAll(this.itemNav, this.$el) : []);\n },\n delegate() {\n return `[${this.attrItem}],[data-${this.attrItem}]`;\n },\n handler(e) {\n if (closest(e.target, \"a,button\")) {\n e.preventDefault();\n this.show(data(e.current, this.attrItem));\n }\n }\n },\n {\n name: \"swipeRight swipeLeft\",\n filter() {\n return this.swiping;\n },\n el() {\n return this.connects;\n },\n handler({ type }) {\n this.show(endsWith(type, \"Left\") ? \"next\" : \"previous\");\n }\n }\n ],\n update() {\n var _a;\n attr(this.connects, \"role\", \"presentation\");\n attr(children(this.$el), \"role\", \"presentation\");\n for (const index in this.toggles) {\n const toggle = this.toggles[index];\n const item = (_a = this.connects[0]) == null ? void 0 : _a.children[index];\n attr(toggle, \"role\", \"tab\");\n if (!item) {\n continue;\n }\n toggle.id = generateId(this, toggle, `-tab-${index}`);\n item.id = generateId(this, item, `-tabpanel-${index}`);\n attr(toggle, \"aria-controls\", item.id);\n attr(item, { role: \"tabpanel\", \"aria-labelledby\": toggle.id });\n }\n attr(this.$el, \"aria-orientation\", matches(this.$el, this.selVertical) ? \"vertical\" : null);\n },\n methods: {\n index() {\n return findIndex(this.children, (el) => hasClass(el, this.cls));\n },\n show(item) {\n const toggles = this.toggles.filter((el) => !matches(el, selDisabled));\n const prev = this.index();\n const next = getIndex(\n !isNode(item) || includes(toggles, item) ? item : 0,\n toggles,\n getIndex(this.toggles[prev], toggles)\n );\n const active = getIndex(toggles[next], this.toggles);\n this.children.forEach((child, i) => {\n toggleClass(child, this.cls, active === i);\n attr(this.toggles[i], {\n \"aria-selected\": active === i,\n tabindex: active === i ? null : -1\n });\n });\n const animate = prev >= 0 && prev !== next;\n this.connects.forEach(async ({ children: children2 }) => {\n await this.toggleElement(\n toArray(children2).filter((child) => hasClass(child, this.cls)),\n false,\n animate\n );\n await this.toggleElement(children2[active], true, animate);\n });\n }\n }\n };\n\n var tab = {\n mixins: [Class],\n extends: Switcher,\n props: {\n media: Boolean\n },\n data: {\n media: 960,\n attrItem: \"uk-tab-item\",\n selVertical: \".uk-tab-left,.uk-tab-right\"\n },\n connected() {\n const cls = hasClass(this.$el, \"uk-tab-left\") ? \"uk-tab-left\" : hasClass(this.$el, \"uk-tab-right\") ? \"uk-tab-right\" : false;\n if (cls) {\n this.$create(\"toggle\", this.$el, { cls, mode: \"media\", media: this.media });\n }\n }\n };\n\n const KEY_SPACE = 32;\n var toggle = {\n mixins: [Media, Togglable],\n args: \"target\",\n props: {\n href: String,\n target: null,\n mode: \"list\",\n queued: Boolean\n },\n data: {\n href: false,\n target: false,\n mode: \"click\",\n queued: true\n },\n computed: {\n target({ href, target }, $el) {\n target = queryAll(target || href, $el);\n return target.length && target || [$el];\n }\n },\n connected() {\n if (!includes(this.mode, \"media\")) {\n if (!isFocusable(this.$el)) {\n attr(this.$el, \"tabindex\", \"0\");\n }\n if (!this.cls && isTag(this.$el, \"a\")) {\n attr(this.$el, \"role\", \"button\");\n }\n }\n },\n observe: lazyload({ target: ({ target }) => target }),\n events: [\n {\n name: pointerDown$1,\n filter() {\n return includes(this.mode, \"hover\");\n },\n handler(e) {\n this._preventClick = null;\n if (!isTouch(e) || this._showState || this.$el.disabled) {\n return;\n }\n trigger(this.$el, \"focus\");\n once(\n document,\n pointerDown$1,\n () => trigger(this.$el, \"blur\"),\n true,\n (e2) => !within(e2.target, this.$el)\n );\n if (includes(this.mode, \"click\")) {\n this._preventClick = true;\n }\n }\n },\n {\n name: `${pointerEnter} ${pointerLeave} focus blur`,\n filter() {\n return includes(this.mode, \"hover\");\n },\n handler(e) {\n if (isTouch(e) || this.$el.disabled) {\n return;\n }\n const show = includes([pointerEnter, \"focus\"], e.type);\n const expanded = this.isToggled(this.target);\n if (!show && (e.type === pointerLeave && matches(this.$el, \":focus\") || e.type === \"blur\" && matches(this.$el, \":hover\"))) {\n return;\n }\n if (this._showState && show && expanded !== this._showState) {\n if (!show) {\n this._showState = null;\n }\n return;\n }\n this._showState = show ? expanded : null;\n this.toggle(`toggle${show ? \"show\" : \"hide\"}`);\n }\n },\n {\n name: \"keydown\",\n filter() {\n return includes(this.mode, \"click\") && !isTag(this.$el, \"input\");\n },\n handler(e) {\n if (e.keyCode === KEY_SPACE) {\n e.preventDefault();\n this.$el.click();\n }\n }\n },\n {\n name: \"click\",\n filter() {\n return [\"click\", \"hover\"].some((mode) => includes(this.mode, mode));\n },\n handler(e) {\n let link;\n if (this._preventClick || closest(e.target, 'a[href=\"#\"], a[href=\"\"]') || (link = closest(e.target, \"a[href]\")) && (!this.isToggled(this.target) || link.hash && matches(this.target, link.hash))) {\n e.preventDefault();\n }\n if (!this._preventClick && includes(this.mode, \"click\")) {\n this.toggle();\n }\n }\n },\n {\n name: \"mediachange\",\n filter() {\n return includes(this.mode, \"media\");\n },\n el() {\n return this.target;\n },\n handler(e, mediaObj) {\n if (mediaObj.matches ^ this.isToggled(this.target)) {\n this.toggle();\n }\n }\n }\n ],\n methods: {\n async toggle(type) {\n if (!trigger(this.target, type || \"toggle\", [this])) {\n return;\n }\n if (hasAttr(this.$el, \"aria-expanded\")) {\n attr(this.$el, \"aria-expanded\", !this.isToggled(this.target));\n }\n if (!this.queued) {\n return this.toggleElement(this.target);\n }\n const leaving = this.target.filter((el) => hasClass(el, this.clsLeave));\n if (leaving.length) {\n for (const el of this.target) {\n const isLeaving = includes(leaving, el);\n this.toggleElement(el, isLeaving, isLeaving);\n }\n return;\n }\n const toggled = this.target.filter(this.isToggled);\n await this.toggleElement(toggled, false);\n await this.toggleElement(\n this.target.filter((el) => !includes(toggled, el)),\n true\n );\n }\n }\n };\n\n var components$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Accordion: Accordion,\n Alert: alert,\n Close: Close,\n Cover: cover,\n Drop: drop,\n DropParentIcon: IconComponent,\n Dropdown: drop,\n Dropnav: Dropnav,\n FormCustom: formCustom,\n Grid: grid,\n HeightMatch: heightMatch,\n HeightViewport: heightViewport,\n Icon: Icon,\n Img: img,\n Leader: leader,\n Margin: Margin,\n Marker: Marker,\n Modal: modal,\n Nav: nav,\n NavParentIcon: NavParentIcon,\n Navbar: navbar,\n NavbarParentIcon: IconComponent,\n NavbarToggleIcon: NavbarToggleIcon,\n Offcanvas: offcanvas,\n OverflowAuto: overflowAuto,\n OverlayIcon: IconComponent,\n PaginationNext: PaginationNext,\n PaginationPrevious: PaginationPrevious,\n Responsive: responsive,\n Scroll: scroll,\n Scrollspy: scrollspy,\n ScrollspyNav: scrollspyNav,\n SearchIcon: Search,\n SlidenavNext: Slidenav,\n SlidenavPrevious: Slidenav,\n Spinner: Spinner,\n Sticky: sticky,\n Svg: svg,\n Switcher: Switcher,\n Tab: tab,\n Toggle: toggle,\n Totop: Totop,\n Video: Video\n });\n\n each(components$1, (component, name) => App.component(name, component));\n boot(App);\n\n const units = [\"days\", \"hours\", \"minutes\", \"seconds\"];\n var countdown = {\n mixins: [Class],\n props: {\n date: String,\n clsWrapper: String,\n role: String\n },\n data: {\n date: \"\",\n clsWrapper: \".uk-countdown-%unit%\",\n role: \"timer\"\n },\n connected() {\n attr(this.$el, \"role\", this.role);\n this.date = toFloat(Date.parse(this.$props.date));\n this.end = false;\n this.start();\n },\n disconnected() {\n this.stop();\n },\n events: {\n name: \"visibilitychange\",\n el() {\n return document;\n },\n handler() {\n if (document.hidden) {\n this.stop();\n } else {\n this.start();\n }\n }\n },\n methods: {\n start() {\n this.stop();\n this.update();\n if (!this.timer) {\n trigger(this.$el, \"countdownstart\");\n this.timer = setInterval(this.update, 1e3);\n }\n },\n stop() {\n if (this.timer) {\n clearInterval(this.timer);\n trigger(this.$el, \"countdownstop\");\n this.timer = null;\n }\n },\n update() {\n const timespan = getTimeSpan(this.date);\n if (!timespan.total) {\n this.stop();\n if (!this.end) {\n trigger(this.$el, \"countdownend\");\n this.end = true;\n }\n }\n for (const unit of units) {\n const el = $(this.clsWrapper.replace(\"%unit%\", unit), this.$el);\n if (!el) {\n continue;\n }\n let digits = String(Math.trunc(timespan[unit]));\n digits = digits.length < 2 ? `0${digits}` : digits;\n if (el.textContent !== digits) {\n digits = digits.split(\"\");\n if (digits.length !== el.children.length) {\n html(el, digits.map(() => \"\").join(\"\"));\n }\n digits.forEach((digit, i) => el.children[i].textContent = digit);\n }\n }\n }\n }\n };\n function getTimeSpan(date) {\n const total = Math.max(0, date - Date.now()) / 1e3;\n return {\n total,\n seconds: total % 60,\n minutes: total / 60 % 60,\n hours: total / 60 / 60 % 24,\n days: total / 60 / 60 / 24\n };\n }\n\n const clsLeave = \"uk-transition-leave\";\n const clsEnter = \"uk-transition-enter\";\n function fade(action, target, duration, stagger = 0) {\n const index = transitionIndex(target, true);\n const propsIn = { opacity: 1 };\n const propsOut = { opacity: 0 };\n const wrapIndexFn = (fn) => () => index === transitionIndex(target) ? fn() : Promise.reject();\n const leaveFn = wrapIndexFn(async () => {\n addClass(target, clsLeave);\n await Promise.all(\n getTransitionNodes(target).map(\n (child, i) => new Promise(\n (resolve) => setTimeout(\n () => Transition.start(child, propsOut, duration / 2, \"ease\").then(\n resolve\n ),\n i * stagger\n )\n )\n )\n );\n removeClass(target, clsLeave);\n });\n const enterFn = wrapIndexFn(async () => {\n const oldHeight = height(target);\n addClass(target, clsEnter);\n action();\n css(children(target), { opacity: 0 });\n await awaitFrame$1();\n const nodes = children(target);\n const newHeight = height(target);\n css(target, \"alignContent\", \"flex-start\");\n height(target, oldHeight);\n const transitionNodes = getTransitionNodes(target);\n css(nodes, propsOut);\n const transitions = transitionNodes.map(async (child, i) => {\n await awaitTimeout(i * stagger);\n await Transition.start(child, propsIn, duration / 2, \"ease\");\n });\n if (oldHeight !== newHeight) {\n transitions.push(\n Transition.start(\n target,\n { height: newHeight },\n duration / 2 + transitionNodes.length * stagger,\n \"ease\"\n )\n );\n }\n await Promise.all(transitions).then(() => {\n removeClass(target, clsEnter);\n if (index === transitionIndex(target)) {\n css(target, { height: \"\", alignContent: \"\" });\n css(nodes, { opacity: \"\" });\n delete target.dataset.transition;\n }\n });\n });\n return hasClass(target, clsLeave) ? waitTransitionend(target).then(enterFn) : hasClass(target, clsEnter) ? waitTransitionend(target).then(leaveFn).then(enterFn) : leaveFn().then(enterFn);\n }\n function transitionIndex(target, next) {\n if (next) {\n target.dataset.transition = 1 + transitionIndex(target);\n }\n return toNumber(target.dataset.transition) || 0;\n }\n function waitTransitionend(target) {\n return Promise.all(\n children(target).filter(Transition.inProgress).map(\n (el) => new Promise((resolve) => once(el, \"transitionend transitioncanceled\", resolve))\n )\n );\n }\n function getTransitionNodes(target) {\n return getRows(children(target)).reduce(\n (nodes, row) => nodes.concat(\n sortBy$1(\n row.filter((el) => isInView(el)),\n \"offsetLeft\"\n )\n ),\n []\n );\n }\n function awaitFrame$1() {\n return new Promise((resolve) => requestAnimationFrame(resolve));\n }\n function awaitTimeout(timeout) {\n return new Promise((resolve) => setTimeout(resolve, timeout));\n }\n\n async function slide(action, target, duration) {\n await awaitFrame();\n let nodes = children(target);\n const currentProps = nodes.map((el) => getProps(el, true));\n const targetProps = { ...css(target, [\"height\", \"padding\"]), display: \"block\" };\n await Promise.all(nodes.concat(target).map(Transition.cancel));\n action();\n nodes = nodes.concat(children(target).filter((el) => !includes(nodes, el)));\n await Promise.resolve();\n fastdom.flush();\n const targetStyle = attr(target, \"style\");\n const targetPropsTo = css(target, [\"height\", \"padding\"]);\n const [propsTo, propsFrom] = getTransitionProps(target, nodes, currentProps);\n const attrsTo = nodes.map((el) => ({ style: attr(el, \"style\") }));\n nodes.forEach((el, i) => propsFrom[i] && css(el, propsFrom[i]));\n css(target, targetProps);\n trigger(target, \"scroll\");\n fastdom.flush();\n await awaitFrame();\n const transitions = nodes.map((el, i) => parent(el) === target && Transition.start(el, propsTo[i], duration, \"ease\")).concat(Transition.start(target, targetPropsTo, duration, \"ease\"));\n try {\n await Promise.all(transitions);\n nodes.forEach((el, i) => {\n attr(el, attrsTo[i]);\n if (parent(el) === target) {\n css(el, \"display\", propsTo[i].opacity === 0 ? \"none\" : \"\");\n }\n });\n attr(target, \"style\", targetStyle);\n } catch (e) {\n attr(nodes, \"style\", \"\");\n resetProps(target, targetProps);\n }\n }\n function getProps(el, opacity) {\n const zIndex = css(el, \"zIndex\");\n return isVisible(el) ? {\n display: \"\",\n opacity: opacity ? css(el, \"opacity\") : \"0\",\n pointerEvents: \"none\",\n position: \"absolute\",\n zIndex: zIndex === \"auto\" ? index(el) : zIndex,\n ...getPositionWithMargin(el)\n } : false;\n }\n function getTransitionProps(target, nodes, currentProps) {\n const propsTo = nodes.map(\n (el, i) => parent(el) && i in currentProps ? currentProps[i] ? isVisible(el) ? getPositionWithMargin(el) : { opacity: 0 } : { opacity: isVisible(el) ? 1 : 0 } : false\n );\n const propsFrom = propsTo.map((props, i) => {\n const from = parent(nodes[i]) === target && (currentProps[i] || getProps(nodes[i]));\n if (!from) {\n return false;\n }\n if (!props) {\n delete from.opacity;\n } else if (!(\"opacity\" in props)) {\n const { opacity } = from;\n if (opacity % 1) {\n props.opacity = 1;\n } else {\n delete from.opacity;\n }\n }\n return from;\n });\n return [propsTo, propsFrom];\n }\n function resetProps(el, props) {\n for (const prop in props) {\n css(el, prop, \"\");\n }\n }\n function getPositionWithMargin(el) {\n const { height, width } = offset(el);\n return {\n height,\n width,\n transform: \"\",\n ...position(el),\n ...css(el, [\"marginTop\", \"marginLeft\"])\n };\n }\n function awaitFrame() {\n return new Promise((resolve) => requestAnimationFrame(resolve));\n }\n\n var Animate = {\n props: {\n duration: Number,\n animation: Boolean\n },\n data: {\n duration: 150,\n animation: \"slide\"\n },\n methods: {\n animate(action, target = this.$el) {\n const name = this.animation;\n const animationFn = name === \"fade\" ? fade : name === \"delayed-fade\" ? (...args) => fade(...args, 40) : name ? slide : () => {\n action();\n return Promise.resolve();\n };\n return animationFn(action, target, this.duration).catch(noop);\n }\n }\n };\n\n var filter = {\n mixins: [Animate],\n args: \"target\",\n props: {\n target: Boolean,\n selActive: Boolean\n },\n data: {\n target: null,\n selActive: false,\n attrItem: \"uk-filter-control\",\n cls: \"uk-active\",\n duration: 250\n },\n computed: {\n toggles({ attrItem }, $el) {\n return $$(`[${attrItem}],[data-${attrItem}]`, $el);\n },\n children({ target }, $el) {\n return $$(`${target} > *`, $el);\n }\n },\n watch: {\n toggles(toggles) {\n this.updateState();\n const actives = $$(this.selActive, this.$el);\n for (const toggle of toggles) {\n if (this.selActive !== false) {\n toggleClass(toggle, this.cls, includes(actives, toggle));\n }\n const button = findButton(toggle);\n if (isTag(button, \"a\")) {\n attr(button, \"role\", \"button\");\n }\n }\n },\n children(list, prev) {\n if (prev) {\n this.updateState();\n }\n }\n },\n events: {\n name: \"click keydown\",\n delegate() {\n return `[${this.attrItem}],[data-${this.attrItem}]`;\n },\n handler(e) {\n if (e.type === \"keydown\" && e.keyCode !== keyMap.SPACE) {\n return;\n }\n if (closest(e.target, \"a,button\")) {\n e.preventDefault();\n this.apply(e.current);\n }\n }\n },\n methods: {\n apply(el) {\n const prevState = this.getState();\n const newState = mergeState(el, this.attrItem, this.getState());\n if (!isEqualState(prevState, newState)) {\n this.setState(newState);\n }\n },\n getState() {\n return this.toggles.filter((item) => hasClass(item, this.cls)).reduce((state, el) => mergeState(el, this.attrItem, state), {\n filter: { \"\": \"\" },\n sort: []\n });\n },\n async setState(state, animate = true) {\n state = { filter: { \"\": \"\" }, sort: [], ...state };\n trigger(this.$el, \"beforeFilter\", [this, state]);\n for (const toggle of this.toggles) {\n toggleClass(toggle, this.cls, matchFilter(toggle, this.attrItem, state));\n }\n await Promise.all(\n $$(this.target, this.$el).map((target) => {\n const filterFn = () => {\n applyState(state, target, children(target));\n this.$update(this.$el);\n };\n return animate ? this.animate(filterFn, target) : filterFn();\n })\n );\n trigger(this.$el, \"afterFilter\", [this]);\n },\n updateState() {\n fastdom.write(() => this.setState(this.getState(), false));\n }\n }\n };\n function getFilter(el, attr2) {\n return parseOptions(data(el, attr2), [\"filter\"]);\n }\n function isEqualState(stateA, stateB) {\n return [\"filter\", \"sort\"].every((prop) => isEqual(stateA[prop], stateB[prop]));\n }\n function applyState(state, target, children) {\n const selector = getSelector(state);\n children.forEach((el) => css(el, \"display\", selector && !matches(el, selector) ? \"none\" : \"\"));\n const [sort, order] = state.sort;\n if (sort) {\n const sorted = sortItems(children, sort, order);\n if (!isEqual(sorted, children)) {\n append(target, sorted);\n }\n }\n }\n function mergeState(el, attr2, state) {\n const { filter, group, sort, order = \"asc\" } = getFilter(el, attr2);\n if (filter || isUndefined(sort)) {\n if (group) {\n if (filter) {\n delete state.filter[\"\"];\n state.filter[group] = filter;\n } else {\n delete state.filter[group];\n if (isEmpty(state.filter) || \"\" in state.filter) {\n state.filter = { \"\": filter || \"\" };\n }\n }\n } else {\n state.filter = { \"\": filter || \"\" };\n }\n }\n if (!isUndefined(sort)) {\n state.sort = [sort, order];\n }\n return state;\n }\n function matchFilter(el, attr2, { filter: stateFilter = { \"\": \"\" }, sort: [stateSort, stateOrder] }) {\n const { filter = \"\", group = \"\", sort, order = \"asc\" } = getFilter(el, attr2);\n return isUndefined(sort) ? group in stateFilter && filter === stateFilter[group] || !filter && group && !(group in stateFilter) && !stateFilter[\"\"] : stateSort === sort && stateOrder === order;\n }\n function getSelector({ filter }) {\n let selector = \"\";\n each(filter, (value) => selector += value || \"\");\n return selector;\n }\n function sortItems(nodes, sort, order) {\n return [...nodes].sort(\n (a, b) => data(a, sort).localeCompare(data(b, sort), void 0, { numeric: true }) * (order === \"asc\" || -1)\n );\n }\n function findButton(el) {\n return $(\"a,button\", el) || el;\n }\n\n var Animations$2 = {\n slide: {\n show(dir) {\n return [{ transform: translate(dir * -100) }, { transform: translate() }];\n },\n percent(current) {\n return translated(current);\n },\n translate(percent, dir) {\n return [\n { transform: translate(dir * -100 * percent) },\n { transform: translate(dir * 100 * (1 - percent)) }\n ];\n }\n }\n };\n function translated(el) {\n return Math.abs(css(el, \"transform\").split(\",\")[4] / el.offsetWidth) || 0;\n }\n function translate(value = 0, unit = \"%\") {\n value += value ? unit : \"\";\n return `translate3d(${value}, 0, 0)`;\n }\n function scale3d(value) {\n return `scale3d(${value}, ${value}, 1)`;\n }\n\n var Animations$1 = {\n ...Animations$2,\n fade: {\n show() {\n return [{ opacity: 0 }, { opacity: 1 }];\n },\n percent(current) {\n return 1 - css(current, \"opacity\");\n },\n translate(percent) {\n return [{ opacity: 1 - percent }, { opacity: percent }];\n }\n },\n scale: {\n show() {\n return [\n { opacity: 0, transform: scale3d(1 - 0.2) },\n { opacity: 1, transform: scale3d(1) }\n ];\n },\n percent(current) {\n return 1 - css(current, \"opacity\");\n },\n translate(percent) {\n return [\n { opacity: 1 - percent, transform: scale3d(1 - 0.2 * percent) },\n { opacity: percent, transform: scale3d(1 - 0.2 + 0.2 * percent) }\n ];\n }\n }\n };\n\n function Transitioner$1(prev, next, dir, { animation, easing }) {\n const { percent, translate, show = noop } = animation;\n const props = show(dir);\n const deferred = new Deferred();\n return {\n dir,\n show(duration, percent2 = 0, linear) {\n const timing = linear ? \"linear\" : easing;\n duration -= Math.round(duration * clamp(percent2, -1, 1));\n this.translate(percent2);\n triggerUpdate$1(next, \"itemin\", { percent: percent2, duration, timing, dir });\n triggerUpdate$1(prev, \"itemout\", { percent: 1 - percent2, duration, timing, dir });\n Promise.all([\n Transition.start(next, props[1], duration, timing),\n Transition.start(prev, props[0], duration, timing)\n ]).then(() => {\n this.reset();\n deferred.resolve();\n }, noop);\n return deferred.promise;\n },\n cancel() {\n Transition.cancel([next, prev]);\n },\n reset() {\n for (const prop in props[0]) {\n css([next, prev], prop, \"\");\n }\n },\n forward(duration, percent2 = this.percent()) {\n Transition.cancel([next, prev]);\n return this.show(duration, percent2, true);\n },\n translate(percent2) {\n this.reset();\n const props2 = translate(percent2, dir);\n css(next, props2[1]);\n css(prev, props2[0]);\n triggerUpdate$1(next, \"itemtranslatein\", { percent: percent2, dir });\n triggerUpdate$1(prev, \"itemtranslateout\", { percent: 1 - percent2, dir });\n },\n percent() {\n return percent(prev || next, next, dir);\n },\n getDistance() {\n return prev == null ? void 0 : prev.offsetWidth;\n }\n };\n }\n function triggerUpdate$1(el, type, data) {\n trigger(el, createEvent(type, false, false, data));\n }\n\n var SliderNav = {\n i18n: {\n next: \"Next slide\",\n previous: \"Previous slide\",\n slideX: \"Slide %s\",\n slideLabel: \"%s of %s\",\n role: \"String\"\n },\n data: {\n selNav: false,\n role: \"region\"\n },\n computed: {\n nav({ selNav }, $el) {\n return $(selNav, $el);\n },\n navChildren() {\n return children(this.nav);\n },\n selNavItem({ attrItem }) {\n return `[${attrItem}],[data-${attrItem}]`;\n },\n navItems(_, $el) {\n return $$(this.selNavItem, $el);\n }\n },\n watch: {\n nav(nav, prev) {\n attr(nav, \"role\", \"tablist\");\n if (prev) {\n this.$emit();\n }\n },\n list(list) {\n attr(list, \"role\", \"presentation\");\n },\n navChildren(children2) {\n attr(children2, \"role\", \"presentation\");\n },\n navItems(items) {\n for (const el of items) {\n const cmd = data(el, this.attrItem);\n const button = $(\"a,button\", el) || el;\n let ariaLabel;\n let ariaControls = null;\n if (isNumeric(cmd)) {\n const item = toNumber(cmd);\n const slide = this.slides[item];\n if (slide) {\n if (!slide.id) {\n slide.id = generateId(this, slide, `-item-${cmd}`);\n }\n ariaControls = slide.id;\n }\n ariaLabel = this.t(\"slideX\", toFloat(cmd) + 1);\n attr(button, \"role\", \"tab\");\n } else {\n if (this.list) {\n if (!this.list.id) {\n this.list.id = generateId(this, this.list, \"-items\");\n }\n ariaControls = this.list.id;\n }\n ariaLabel = this.t(cmd);\n }\n attr(button, {\n \"aria-controls\": ariaControls,\n \"aria-label\": attr(button, \"aria-label\") || ariaLabel\n });\n }\n },\n slides(slides) {\n slides.forEach(\n (slide, i) => attr(slide, {\n role: this.nav ? \"tabpanel\" : \"group\",\n \"aria-label\": this.t(\"slideLabel\", i + 1, this.length),\n \"aria-roledescription\": this.nav ? null : \"slide\"\n })\n );\n },\n length(length) {\n const navLength = this.navChildren.length;\n if (this.nav && length !== navLength) {\n empty(this.nav);\n for (let i = 0; i < length; i++) {\n append(this.nav, `
  • `);\n }\n }\n }\n },\n connected() {\n attr(this.$el, {\n role: this.role,\n ariaRoleDescription: \"carousel\"\n });\n },\n update: [\n {\n write() {\n this.navItems.concat(this.nav).forEach((el) => el && (el.hidden = !this.maxIndex));\n this.updateNav();\n },\n events: [\"resize\"]\n }\n ],\n events: [\n {\n name: \"click keydown\",\n delegate() {\n return this.selNavItem;\n },\n handler(e) {\n if (closest(e.target, \"a,button\") && (e.type === \"click\" || e.keyCode === keyMap.SPACE)) {\n e.preventDefault();\n this.show(data(e.current, this.attrItem));\n }\n }\n },\n {\n name: \"itemshow\",\n handler: \"updateNav\"\n },\n {\n name: \"keydown\",\n delegate() {\n return this.selNavItem;\n },\n handler(e) {\n const { current, keyCode } = e;\n const cmd = data(current, this.attrItem);\n if (!isNumeric(cmd)) {\n return;\n }\n let i = keyCode === keyMap.HOME ? 0 : keyCode === keyMap.END ? \"last\" : keyCode === keyMap.LEFT ? \"previous\" : keyCode === keyMap.RIGHT ? \"next\" : -1;\n if (~i) {\n e.preventDefault();\n this.show(i);\n }\n }\n }\n ],\n methods: {\n updateNav() {\n const index = this.getValidIndex();\n let focus;\n let focusEl;\n for (const el of this.navItems) {\n const cmd = data(el, this.attrItem);\n const button = $(\"a,button\", el) || el;\n if (isNumeric(cmd)) {\n const item = toNumber(cmd);\n const active = item === index;\n toggleClass(el, this.clsActive, active);\n attr(button, {\n \"aria-selected\": active,\n tabindex: active ? null : -1\n });\n if (active) {\n focusEl = button;\n }\n focus = focus || matches(button, \":focus\");\n } else {\n toggleClass(\n el,\n \"uk-invisible\",\n this.finite && (cmd === \"previous\" && index === 0 || cmd === \"next\" && index >= this.maxIndex)\n );\n }\n if (focus && focusEl) {\n focusEl.focus();\n }\n }\n }\n }\n };\n\n const pointerOptions = { passive: false, capture: true };\n const pointerUpOptions = { passive: true, capture: true };\n const pointerDown = \"touchstart mousedown\";\n const pointerMove = \"touchmove mousemove\";\n const pointerUp = \"touchend touchcancel mouseup click input scroll\";\n var SliderDrag = {\n props: {\n draggable: Boolean\n },\n data: {\n draggable: true,\n threshold: 10\n },\n created() {\n for (const key of [\"start\", \"move\", \"end\"]) {\n const fn = this[key];\n this[key] = (e) => {\n const pos = getEventPos(e).x * (isRtl ? -1 : 1);\n this.prevPos = pos === this.pos ? this.prevPos : this.pos;\n this.pos = pos;\n fn(e);\n };\n }\n },\n events: [\n {\n name: pointerDown,\n passive: true,\n delegate() {\n return `${this.selList} > *`;\n },\n handler(e) {\n if (!this.draggable || !isTouch(e) && hasSelectableText(e.target) || closest(e.target, selInput) || e.button > 0 || this.length < 2) {\n return;\n }\n this.start(e);\n }\n },\n {\n name: \"dragstart\",\n handler(e) {\n e.preventDefault();\n }\n },\n {\n // iOS workaround for slider stopping if swiping fast\n name: pointerMove,\n el() {\n return this.list;\n },\n handler: noop,\n ...pointerOptions\n }\n ],\n methods: {\n start() {\n this.drag = this.pos;\n if (this._transitioner) {\n this.percent = this._transitioner.percent();\n this.drag += this._transitioner.getDistance() * this.percent * this.dir;\n this._transitioner.cancel();\n this._transitioner.translate(this.percent);\n this.dragging = true;\n this.stack = [];\n } else {\n this.prevIndex = this.index;\n }\n on(document, pointerMove, this.move, pointerOptions);\n on(document, pointerUp, this.end, pointerUpOptions);\n css(this.list, \"userSelect\", \"none\");\n },\n move(e) {\n const distance = this.pos - this.drag;\n if (distance === 0 || this.prevPos === this.pos || !this.dragging && Math.abs(distance) < this.threshold) {\n return;\n }\n css(this.list, \"pointerEvents\", \"none\");\n e.cancelable && e.preventDefault();\n this.dragging = true;\n this.dir = distance < 0 ? 1 : -1;\n const { slides } = this;\n let { prevIndex } = this;\n let dis = Math.abs(distance);\n let nextIndex = this.getIndex(prevIndex + this.dir, prevIndex);\n let width = this._getDistance(prevIndex, nextIndex) || slides[prevIndex].offsetWidth;\n while (nextIndex !== prevIndex && dis > width) {\n this.drag -= width * this.dir;\n prevIndex = nextIndex;\n dis -= width;\n nextIndex = this.getIndex(prevIndex + this.dir, prevIndex);\n width = this._getDistance(prevIndex, nextIndex) || slides[prevIndex].offsetWidth;\n }\n this.percent = dis / width;\n const prev = slides[prevIndex];\n const next = slides[nextIndex];\n const changed = this.index !== nextIndex;\n const edge = prevIndex === nextIndex;\n let itemShown;\n [this.index, this.prevIndex].filter((i) => !includes([nextIndex, prevIndex], i)).forEach((i) => {\n trigger(slides[i], \"itemhidden\", [this]);\n if (edge) {\n itemShown = true;\n this.prevIndex = prevIndex;\n }\n });\n if (this.index === prevIndex && this.prevIndex !== prevIndex || itemShown) {\n trigger(slides[this.index], \"itemshown\", [this]);\n }\n if (changed) {\n this.prevIndex = prevIndex;\n this.index = nextIndex;\n !edge && trigger(prev, \"beforeitemhide\", [this]);\n trigger(next, \"beforeitemshow\", [this]);\n }\n this._transitioner = this._translate(Math.abs(this.percent), prev, !edge && next);\n if (changed) {\n !edge && trigger(prev, \"itemhide\", [this]);\n trigger(next, \"itemshow\", [this]);\n }\n },\n end() {\n off(document, pointerMove, this.move, pointerOptions);\n off(document, pointerUp, this.end, pointerUpOptions);\n if (this.dragging) {\n this.dragging = null;\n if (this.index === this.prevIndex) {\n this.percent = 1 - this.percent;\n this.dir *= -1;\n this._show(false, this.index, true);\n this._transitioner = null;\n } else {\n const dirChange = (isRtl ? this.dir * (isRtl ? 1 : -1) : this.dir) < 0 === this.prevPos > this.pos;\n this.index = dirChange ? this.index : this.prevIndex;\n if (dirChange) {\n this.percent = 1 - this.percent;\n }\n this.show(\n this.dir > 0 && !dirChange || this.dir < 0 && dirChange ? \"next\" : \"previous\",\n true\n );\n }\n }\n css(this.list, { userSelect: \"\", pointerEvents: \"\" });\n this.drag = this.percent = null;\n }\n }\n };\n function hasSelectableText(el) {\n return css(el, \"userSelect\") !== \"none\" && toArray(el.childNodes).some((el2) => el2.nodeType === 3 && el2.textContent.trim());\n }\n\n var SliderAutoplay = {\n props: {\n autoplay: Boolean,\n autoplayInterval: Number,\n pauseOnHover: Boolean\n },\n data: {\n autoplay: false,\n autoplayInterval: 7e3,\n pauseOnHover: true\n },\n connected() {\n attr(this.list, \"aria-live\", this.autoplay ? \"off\" : \"polite\");\n this.autoplay && this.startAutoplay();\n },\n disconnected() {\n this.stopAutoplay();\n },\n update() {\n attr(this.slides, \"tabindex\", \"-1\");\n },\n events: [\n {\n name: \"visibilitychange\",\n el() {\n return document;\n },\n filter() {\n return this.autoplay;\n },\n handler() {\n if (document.hidden) {\n this.stopAutoplay();\n } else {\n this.startAutoplay();\n }\n }\n }\n ],\n methods: {\n startAutoplay() {\n this.stopAutoplay();\n this.interval = setInterval(() => {\n if (!(this.stack.length || this.draggable && matches(this.$el, \":focus-within\") || this.pauseOnHover && matches(this.$el, \":hover\"))) {\n this.show(\"next\");\n }\n }, this.autoplayInterval);\n },\n stopAutoplay() {\n clearInterval(this.interval);\n }\n }\n };\n\n var Slider = {\n mixins: [SliderAutoplay, SliderDrag, SliderNav, I18n],\n props: {\n clsActivated: Boolean,\n easing: String,\n index: Number,\n finite: Boolean,\n velocity: Number\n },\n data: () => ({\n easing: \"ease\",\n finite: false,\n velocity: 1,\n index: 0,\n prevIndex: -1,\n stack: [],\n percent: 0,\n clsActive: \"uk-active\",\n clsActivated: false,\n Transitioner: false,\n transitionOptions: {}\n }),\n connected() {\n this.prevIndex = -1;\n this.index = this.getValidIndex(this.$props.index);\n this.stack = [];\n },\n disconnected() {\n removeClass(this.slides, this.clsActive);\n },\n computed: {\n duration({ velocity }, $el) {\n return speedUp($el.offsetWidth / velocity);\n },\n list({ selList }, $el) {\n return $(selList, $el);\n },\n maxIndex() {\n return this.length - 1;\n },\n slides() {\n return children(this.list);\n },\n length() {\n return this.slides.length;\n }\n },\n watch: {\n slides(slides, prev) {\n if (prev) {\n this.$emit();\n }\n }\n },\n observe: resize(),\n methods: {\n show(index, force = false) {\n var _a;\n if (this.dragging || !this.length) {\n return;\n }\n const { stack } = this;\n const queueIndex = force ? 0 : stack.length;\n const reset = () => {\n stack.splice(queueIndex, 1);\n if (stack.length) {\n this.show(stack.shift(), true);\n }\n };\n stack[force ? \"unshift\" : \"push\"](index);\n if (!force && stack.length > 1) {\n if (stack.length === 2) {\n (_a = this._transitioner) == null ? void 0 : _a.forward(Math.min(this.duration, 200));\n }\n return;\n }\n const prevIndex = this.getIndex(this.index);\n const prev = hasClass(this.slides, this.clsActive) && this.slides[prevIndex];\n const nextIndex = this.getIndex(index, this.index);\n const next = this.slides[nextIndex];\n if (prev === next) {\n reset();\n return;\n }\n this.dir = getDirection(index, prevIndex);\n this.prevIndex = prevIndex;\n this.index = nextIndex;\n if (prev && !trigger(prev, \"beforeitemhide\", [this]) || !trigger(next, \"beforeitemshow\", [this, prev])) {\n this.index = this.prevIndex;\n reset();\n return;\n }\n const promise = this._show(prev, next, force).then(() => {\n prev && trigger(prev, \"itemhidden\", [this]);\n trigger(next, \"itemshown\", [this]);\n stack.shift();\n this._transitioner = null;\n requestAnimationFrame(() => stack.length && this.show(stack.shift(), true));\n });\n prev && trigger(prev, \"itemhide\", [this]);\n trigger(next, \"itemshow\", [this]);\n return promise;\n },\n getIndex(index = this.index, prev = this.index) {\n return clamp(\n getIndex(index, this.slides, prev, this.finite),\n 0,\n Math.max(0, this.maxIndex)\n );\n },\n getValidIndex(index = this.index, prevIndex = this.prevIndex) {\n return this.getIndex(index, prevIndex);\n },\n _show(prev, next, force) {\n this._transitioner = this._getTransitioner(prev, next, this.dir, {\n easing: force ? next.offsetWidth < 600 ? \"cubic-bezier(0.25, 0.46, 0.45, 0.94)\" : \"cubic-bezier(0.165, 0.84, 0.44, 1)\" : this.easing,\n ...this.transitionOptions\n });\n if (!force && !prev) {\n this._translate(1);\n return Promise.resolve();\n }\n const { length } = this.stack;\n return this._transitioner[length > 1 ? \"forward\" : \"show\"](\n length > 1 ? Math.min(this.duration, 75 + 75 / (length - 1)) : this.duration,\n this.percent\n );\n },\n _getDistance(prev, next) {\n return this._getTransitioner(prev, prev !== next && next).getDistance();\n },\n _translate(percent, prev = this.prevIndex, next = this.index) {\n const transitioner = this._getTransitioner(prev === next ? false : prev, next);\n transitioner.translate(percent);\n return transitioner;\n },\n _getTransitioner(prev = this.prevIndex, next = this.index, dir = this.dir || 1, options = this.transitionOptions) {\n return new this.Transitioner(\n isNumber(prev) ? this.slides[prev] : prev,\n isNumber(next) ? this.slides[next] : next,\n dir * (isRtl ? -1 : 1),\n options\n );\n }\n }\n };\n function getDirection(index, prevIndex) {\n return index === \"next\" ? 1 : index === \"previous\" ? -1 : index < prevIndex ? -1 : 1;\n }\n function speedUp(x) {\n return 0.5 * x + 300;\n }\n\n var Slideshow = {\n mixins: [Slider],\n props: {\n animation: String\n },\n data: {\n animation: \"slide\",\n clsActivated: \"uk-transition-active\",\n Animations: Animations$2,\n Transitioner: Transitioner$1\n },\n computed: {\n animation({ animation, Animations: Animations2 }) {\n return { ...Animations2[animation] || Animations2.slide, name: animation };\n },\n transitionOptions() {\n return { animation: this.animation };\n }\n },\n events: {\n beforeitemshow({ target }) {\n addClass(target, this.clsActive);\n },\n itemshown({ target }) {\n addClass(target, this.clsActivated);\n },\n itemhidden({ target }) {\n removeClass(target, this.clsActive, this.clsActivated);\n }\n }\n };\n\n var LightboxPanel = {\n mixins: [Modal, Slideshow],\n functional: true,\n props: {\n delayControls: Number,\n preload: Number,\n videoAutoplay: Boolean,\n template: String\n },\n data: () => ({\n preload: 1,\n videoAutoplay: false,\n delayControls: 3e3,\n items: [],\n cls: \"uk-open\",\n clsPage: \"uk-lightbox-page\",\n selList: \".uk-lightbox-items\",\n attrItem: \"uk-lightbox-item\",\n selClose: \".uk-close-large\",\n selCaption: \".uk-lightbox-caption\",\n pauseOnHover: false,\n velocity: 2,\n Animations: Animations$1,\n template: `
    \n
      \n
      \n \n
      \n \n \n
      \n
      `\n }),\n created() {\n const $el = $(this.template);\n const list = $(this.selList, $el);\n this.items.forEach(() => append(list, \"
    • \"));\n const close = $(\"[uk-close]\", $el);\n const closeLabel = this.t(\"close\");\n if (close && closeLabel) {\n close.dataset.i18n = JSON.stringify({ label: closeLabel });\n }\n this.$mount(append(this.container, $el));\n },\n computed: {\n caption({ selCaption }, $el) {\n return $(selCaption, $el);\n }\n },\n events: [\n {\n name: `${pointerMove$1} ${pointerDown$1} keydown`,\n handler: \"showControls\"\n },\n {\n name: \"click\",\n self: true,\n delegate() {\n return `${this.selList} > *`;\n },\n handler(e) {\n if (!e.defaultPrevented) {\n this.hide();\n }\n }\n },\n {\n name: \"shown\",\n self: true,\n handler() {\n this.showControls();\n }\n },\n {\n name: \"hide\",\n self: true,\n handler() {\n this.hideControls();\n removeClass(this.slides, this.clsActive);\n Transition.stop(this.slides);\n }\n },\n {\n name: \"hidden\",\n self: true,\n handler() {\n this.$destroy(true);\n }\n },\n {\n name: \"keyup\",\n el() {\n return document;\n },\n handler({ keyCode }) {\n if (!this.isToggled(this.$el) || !this.draggable) {\n return;\n }\n let i = -1;\n if (keyCode === keyMap.LEFT) {\n i = \"previous\";\n } else if (keyCode === keyMap.RIGHT) {\n i = \"next\";\n } else if (keyCode === keyMap.HOME) {\n i = 0;\n } else if (keyCode === keyMap.END) {\n i = \"last\";\n }\n if (~i) {\n this.show(i);\n }\n }\n },\n {\n name: \"beforeitemshow\",\n handler(e) {\n if (this.isToggled()) {\n return;\n }\n this.draggable = false;\n e.preventDefault();\n this.toggleElement(this.$el, true, false);\n this.animation = Animations$1[\"scale\"];\n removeClass(e.target, this.clsActive);\n this.stack.splice(1, 0, this.index);\n }\n },\n {\n name: \"itemshow\",\n handler() {\n html(this.caption, this.getItem().caption || \"\");\n for (let j = -this.preload; j <= this.preload; j++) {\n this.loadItem(this.index + j);\n }\n }\n },\n {\n name: \"itemshown\",\n handler() {\n this.draggable = this.$props.draggable;\n }\n },\n {\n name: \"itemload\",\n async handler(_, item) {\n const { source: src, type, alt = \"\", poster, attrs = {} } = item;\n this.setItem(item, \"\");\n if (!src) {\n return;\n }\n let matches;\n const iframeAttrs = {\n allowfullscreen: \"\",\n style: \"max-width: 100%; box-sizing: border-box;\",\n \"uk-responsive\": \"\",\n \"uk-video\": `${this.videoAutoplay}`\n };\n if (type === \"image\" || src.match(/\\.(avif|jpe?g|jfif|a?png|gif|svg|webp)($|\\?)/i)) {\n const img = createEl(\"img\", { src, alt, ...attrs });\n on(img, \"load\", () => this.setItem(item, img));\n on(img, \"error\", () => this.setError(item));\n } else if (type === \"video\" || src.match(/\\.(mp4|webm|ogv)($|\\?)/i)) {\n const video = createEl(\"video\", {\n src,\n poster,\n controls: \"\",\n playsinline: \"\",\n \"uk-video\": `${this.videoAutoplay}`,\n ...attrs\n });\n on(video, \"loadedmetadata\", () => this.setItem(item, video));\n on(video, \"error\", () => this.setError(item));\n } else if (type === \"iframe\" || src.match(/\\.(html|php)($|\\?)/i)) {\n this.setItem(\n item,\n createEl(\"iframe\", {\n src,\n allowfullscreen: \"\",\n class: \"uk-lightbox-iframe\",\n ...attrs\n })\n );\n } else if (matches = src.match(\n /\\/\\/(?:.*?youtube(-nocookie)?\\..*?(?:[?&]v=|\\/shorts\\/)|youtu\\.be\\/)([\\w-]{11})[&?]?(.*)?/\n )) {\n this.setItem(\n item,\n createEl(\"iframe\", {\n src: `https://www.youtube${matches[1] || \"\"}.com/embed/${matches[2]}${matches[3] ? `?${matches[3]}` : \"\"}`,\n width: 1920,\n height: 1080,\n ...iframeAttrs,\n ...attrs\n })\n );\n } else if (matches = src.match(/\\/\\/.*?vimeo\\.[a-z]+\\/(\\d+)[&?]?(.*)?/)) {\n try {\n const { height, width } = await (await fetch(\n `https://vimeo.com/api/oembed.json?maxwidth=1920&url=${encodeURI(\n src\n )}`,\n { credentials: \"omit\" }\n )).json();\n this.setItem(\n item,\n createEl(\"iframe\", {\n src: `https://player.vimeo.com/video/${matches[1]}${matches[2] ? `?${matches[2]}` : \"\"}`,\n width,\n height,\n ...iframeAttrs,\n ...attrs\n })\n );\n } catch (e) {\n this.setError(item);\n }\n }\n }\n }\n ],\n methods: {\n loadItem(index = this.index) {\n const item = this.getItem(index);\n if (!this.getSlide(item).childElementCount) {\n trigger(this.$el, \"itemload\", [item]);\n }\n },\n getItem(index = this.index) {\n return this.items[getIndex(index, this.slides)];\n },\n setItem(item, content) {\n trigger(this.$el, \"itemloaded\", [this, html(this.getSlide(item), content)]);\n },\n getSlide(item) {\n return this.slides[this.items.indexOf(item)];\n },\n setError(item) {\n this.setItem(item, '');\n },\n showControls() {\n clearTimeout(this.controlsTimer);\n this.controlsTimer = setTimeout(this.hideControls, this.delayControls);\n addClass(this.$el, \"uk-active\", \"uk-transition-active\");\n },\n hideControls() {\n removeClass(this.$el, \"uk-active\", \"uk-transition-active\");\n }\n }\n };\n function createEl(tag, attrs) {\n const el = fragment(`<${tag}>`);\n attr(el, attrs);\n return el;\n }\n\n var lightbox = {\n install: install$1,\n props: { toggle: String },\n data: { toggle: \"a\" },\n computed: {\n toggles({ toggle }, $el) {\n return $$(toggle, $el);\n }\n },\n watch: {\n toggles(toggles) {\n this.hide();\n for (const toggle of toggles) {\n if (isTag(toggle, \"a\")) {\n attr(toggle, \"role\", \"button\");\n }\n }\n }\n },\n disconnected() {\n this.hide();\n },\n events: {\n name: \"click\",\n delegate() {\n return `${this.toggle}:not(.uk-disabled)`;\n },\n handler(e) {\n e.preventDefault();\n this.show(e.current);\n }\n },\n methods: {\n show(index) {\n const items = uniqueBy(this.toggles.map(toItem), \"source\");\n if (isElement(index)) {\n const { source } = toItem(index);\n index = findIndex(items, ({ source: src }) => source === src);\n }\n this.panel = this.panel || this.$create(\"lightboxPanel\", { ...this.$props, items });\n on(this.panel.$el, \"hidden\", () => this.panel = null);\n return this.panel.show(index);\n },\n hide() {\n var _a;\n return (_a = this.panel) == null ? void 0 : _a.hide();\n }\n }\n };\n function install$1(UIkit, Lightbox) {\n if (!UIkit.lightboxPanel) {\n UIkit.component(\"lightboxPanel\", LightboxPanel);\n }\n assign(Lightbox.props, UIkit.component(\"lightboxPanel\").options.props);\n }\n function toItem(el) {\n const item = {};\n for (const attr2 of [\"href\", \"caption\", \"type\", \"poster\", \"alt\", \"attrs\"]) {\n item[attr2 === \"href\" ? \"source\" : attr2] = data(el, attr2);\n }\n item.attrs = parseOptions(item.attrs);\n return item;\n }\n\n var notification = {\n mixins: [Container],\n functional: true,\n args: [\"message\", \"status\"],\n data: {\n message: \"\",\n status: \"\",\n timeout: 5e3,\n group: null,\n pos: \"top-center\",\n clsContainer: \"uk-notification\",\n clsClose: \"uk-notification-close\",\n clsMsg: \"uk-notification-message\"\n },\n install,\n computed: {\n marginProp({ pos }) {\n return `margin${startsWith(pos, \"top\") ? \"Top\" : \"Bottom\"}`;\n },\n startProps() {\n return { opacity: 0, [this.marginProp]: -this.$el.offsetHeight };\n }\n },\n created() {\n const container = $(`.${this.clsContainer}-${this.pos}`, this.container) || append(\n this.container,\n `
      `\n );\n this.$mount(\n append(\n container,\n `
      \n \n
      ${this.message}
      \n
      `\n )\n );\n },\n async connected() {\n const margin = toFloat(css(this.$el, this.marginProp));\n await Transition.start(css(this.$el, this.startProps), {\n opacity: 1,\n [this.marginProp]: margin\n });\n if (this.timeout) {\n this.timer = setTimeout(this.close, this.timeout);\n }\n },\n events: {\n click(e) {\n if (closest(e.target, 'a[href=\"#\"],a[href=\"\"]')) {\n e.preventDefault();\n }\n this.close();\n },\n [pointerEnter]() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n },\n [pointerLeave]() {\n if (this.timeout) {\n this.timer = setTimeout(this.close, this.timeout);\n }\n }\n },\n methods: {\n async close(immediate) {\n const removeFn = (el) => {\n const container = parent(el);\n trigger(el, \"close\", [this]);\n remove$1(el);\n if (!(container == null ? void 0 : container.hasChildNodes())) {\n remove$1(container);\n }\n };\n if (this.timer) {\n clearTimeout(this.timer);\n }\n if (!immediate) {\n await Transition.start(this.$el, this.startProps);\n }\n removeFn(this.$el);\n }\n }\n };\n function install(UIkit) {\n UIkit.notification.closeAll = function(group, immediate) {\n apply(document.body, (el) => {\n const notification = UIkit.getComponent(el, \"notification\");\n if (notification && (!group || group === notification.group)) {\n notification.close(immediate);\n }\n });\n };\n }\n\n const props = {\n x: transformFn,\n y: transformFn,\n rotate: transformFn,\n scale: transformFn,\n color: colorFn,\n backgroundColor: colorFn,\n borderColor: colorFn,\n blur: filterFn,\n hue: filterFn,\n fopacity: filterFn,\n grayscale: filterFn,\n invert: filterFn,\n saturate: filterFn,\n sepia: filterFn,\n opacity: cssPropFn,\n stroke: strokeFn,\n bgx: backgroundFn,\n bgy: backgroundFn\n };\n const { keys } = Object;\n var Parallax = {\n mixins: [Media],\n props: fillObject(keys(props), \"list\"),\n data: fillObject(keys(props), void 0),\n computed: {\n props(properties, $el) {\n const stops = {};\n for (const prop in properties) {\n if (prop in props && !isUndefined(properties[prop])) {\n stops[prop] = properties[prop].slice();\n }\n }\n const result = {};\n for (const prop in stops) {\n result[prop] = props[prop](prop, $el, stops[prop], stops);\n }\n return result;\n }\n },\n events: {\n load() {\n this.$emit();\n }\n },\n methods: {\n reset() {\n for (const prop in this.getCss(0)) {\n css(this.$el, prop, \"\");\n }\n },\n getCss(percent) {\n const css2 = { transform: \"\", filter: \"\" };\n for (const prop in this.props) {\n this.props[prop](css2, percent);\n }\n css2.willChange = Object.keys(css2).filter((key) => css2[key] !== \"\").map(propName).join(\",\");\n return css2;\n }\n }\n };\n function transformFn(prop, el, stops) {\n let unit = getUnit(stops) || { x: \"px\", y: \"px\", rotate: \"deg\" }[prop] || \"\";\n let transformFn2;\n if (prop === \"x\" || prop === \"y\") {\n prop = `translate${ucfirst(prop)}`;\n transformFn2 = (stop) => toFloat(toFloat(stop).toFixed(unit === \"px\" ? 0 : 6));\n } else if (prop === \"scale\") {\n unit = \"\";\n transformFn2 = (stop) => getUnit([stop]) ? toPx(stop, \"width\", el, true) / el.offsetWidth : stop;\n }\n if (stops.length === 1) {\n stops.unshift(prop === \"scale\" ? 1 : 0);\n }\n stops = parseStops(stops, transformFn2);\n return (css2, percent) => {\n css2.transform += ` ${prop}(${getValue(stops, percent)}${unit})`;\n };\n }\n function colorFn(prop, el, stops) {\n if (stops.length === 1) {\n stops.unshift(getCssValue(el, prop, \"\"));\n }\n stops = parseStops(stops, (stop) => parseColor(el, stop));\n return (css2, percent) => {\n const [start, end, p] = getStop(stops, percent);\n const value = start.map((value2, i) => {\n value2 += p * (end[i] - value2);\n return i === 3 ? toFloat(value2) : parseInt(value2, 10);\n }).join(\",\");\n css2[prop] = `rgba(${value})`;\n };\n }\n function parseColor(el, color) {\n return getCssValue(el, \"color\", color).split(/[(),]/g).slice(1, -1).concat(1).slice(0, 4).map(toFloat);\n }\n function filterFn(prop, el, stops) {\n if (stops.length === 1) {\n stops.unshift(0);\n }\n const unit = getUnit(stops) || { blur: \"px\", hue: \"deg\" }[prop] || \"%\";\n prop = { fopacity: \"opacity\", hue: \"hue-rotate\" }[prop] || prop;\n stops = parseStops(stops);\n return (css2, percent) => {\n const value = getValue(stops, percent);\n css2.filter += ` ${prop}(${value + unit})`;\n };\n }\n function cssPropFn(prop, el, stops) {\n if (stops.length === 1) {\n stops.unshift(getCssValue(el, prop, \"\"));\n }\n stops = parseStops(stops);\n return (css2, percent) => {\n css2[prop] = getValue(stops, percent);\n };\n }\n function strokeFn(prop, el, stops) {\n if (stops.length === 1) {\n stops.unshift(0);\n }\n const unit = getUnit(stops);\n const length = getMaxPathLength(el);\n stops = parseStops(stops.reverse(), (stop) => {\n stop = toFloat(stop);\n return unit === \"%\" ? stop * length / 100 : stop;\n });\n if (!stops.some(([value]) => value)) {\n return noop;\n }\n css(el, \"strokeDasharray\", length);\n return (css2, percent) => {\n css2.strokeDashoffset = getValue(stops, percent);\n };\n }\n function backgroundFn(prop, el, stops, props2) {\n if (stops.length === 1) {\n stops.unshift(0);\n }\n const attr = prop === \"bgy\" ? \"height\" : \"width\";\n props2[prop] = parseStops(stops, (stop) => toPx(stop, attr, el));\n const bgProps = [\"bgx\", \"bgy\"].filter((prop2) => prop2 in props2);\n if (bgProps.length === 2 && prop === \"bgx\") {\n return noop;\n }\n if (getCssValue(el, \"backgroundSize\", \"\") === \"cover\") {\n return backgroundCoverFn(prop, el, stops, props2);\n }\n const positions = {};\n for (const prop2 of bgProps) {\n positions[prop2] = getBackgroundPos(el, prop2);\n }\n return setBackgroundPosFn(bgProps, positions, props2);\n }\n function backgroundCoverFn(prop, el, stops, props2) {\n const dimImage = getBackgroundImageDimensions(el);\n if (!dimImage.width) {\n return noop;\n }\n const dimEl = {\n width: el.offsetWidth,\n height: el.offsetHeight\n };\n const bgProps = [\"bgx\", \"bgy\"].filter((prop2) => prop2 in props2);\n const positions = {};\n for (const prop2 of bgProps) {\n const values = props2[prop2].map(([value]) => value);\n const min = Math.min(...values);\n const max = Math.max(...values);\n const down = values.indexOf(min) < values.indexOf(max);\n const diff = max - min;\n positions[prop2] = `${(down ? -diff : 0) - (down ? min : max)}px`;\n dimEl[prop2 === \"bgy\" ? \"height\" : \"width\"] += diff;\n }\n const dim = Dimensions.cover(dimImage, dimEl);\n for (const prop2 of bgProps) {\n const attr = prop2 === \"bgy\" ? \"height\" : \"width\";\n const overflow = dim[attr] - dimEl[attr];\n positions[prop2] = `max(${getBackgroundPos(el, prop2)},-${overflow}px) + ${positions[prop2]}`;\n }\n const fn = setBackgroundPosFn(bgProps, positions, props2);\n return (css2, percent) => {\n fn(css2, percent);\n css2.backgroundSize = `${dim.width}px ${dim.height}px`;\n css2.backgroundRepeat = \"no-repeat\";\n };\n }\n function getBackgroundPos(el, prop) {\n return getCssValue(el, `background-position-${prop.substr(-1)}`, \"\");\n }\n function setBackgroundPosFn(bgProps, positions, props2) {\n return function(css2, percent) {\n for (const prop of bgProps) {\n const value = getValue(props2[prop], percent);\n css2[`background-position-${prop.substr(-1)}`] = `calc(${positions[prop]} + ${value}px)`;\n }\n };\n }\n const dimensions = {};\n function getBackgroundImageDimensions(el) {\n const src = css(el, \"backgroundImage\").replace(/^none|url\\([\"']?(.+?)[\"']?\\)$/, \"$1\");\n if (dimensions[src]) {\n return dimensions[src];\n }\n const image = new Image();\n if (src) {\n image.src = src;\n if (!image.naturalWidth) {\n image.onload = () => {\n dimensions[src] = toDimensions(image);\n trigger(el, createEvent(\"load\", false));\n };\n return toDimensions(image);\n }\n }\n return dimensions[src] = toDimensions(image);\n }\n function toDimensions(image) {\n return {\n width: image.naturalWidth,\n height: image.naturalHeight\n };\n }\n function parseStops(stops, fn = toFloat) {\n const result = [];\n const { length } = stops;\n let nullIndex = 0;\n for (let i = 0; i < length; i++) {\n let [value, percent] = isString(stops[i]) ? stops[i].trim().split(/ (?![^(]*\\))/) : [stops[i]];\n value = fn(value);\n percent = percent ? toFloat(percent) / 100 : null;\n if (i === 0) {\n if (percent === null) {\n percent = 0;\n } else if (percent) {\n result.push([value, 0]);\n }\n } else if (i === length - 1) {\n if (percent === null) {\n percent = 1;\n } else if (percent !== 1) {\n result.push([value, percent]);\n percent = 1;\n }\n }\n result.push([value, percent]);\n if (percent === null) {\n nullIndex++;\n } else if (nullIndex) {\n const leftPercent = result[i - nullIndex - 1][1];\n const p = (percent - leftPercent) / (nullIndex + 1);\n for (let j = nullIndex; j > 0; j--) {\n result[i - j][1] = leftPercent + p * (nullIndex - j + 1);\n }\n nullIndex = 0;\n }\n }\n return result;\n }\n function getStop(stops, percent) {\n const index = findIndex(stops.slice(1), ([, targetPercent]) => percent <= targetPercent) + 1;\n return [\n stops[index - 1][0],\n stops[index][0],\n (percent - stops[index - 1][1]) / (stops[index][1] - stops[index - 1][1])\n ];\n }\n function getValue(stops, percent) {\n const [start, end, p] = getStop(stops, percent);\n return isNumber(start) ? start + Math.abs(start - end) * p * (start < end ? 1 : -1) : +end;\n }\n const unitRe = /^-?\\d+(\\S+)?/;\n function getUnit(stops, defaultUnit) {\n var _a;\n for (const stop of stops) {\n const match = (_a = stop.match) == null ? void 0 : _a.call(stop, unitRe);\n if (match) {\n return match[1];\n }\n }\n return defaultUnit;\n }\n function getCssValue(el, prop, value) {\n const prev = el.style[prop];\n const val = css(css(el, prop, value), prop);\n el.style[prop] = prev;\n return val;\n }\n function fillObject(keys2, value) {\n return keys2.reduce((data, prop) => {\n data[prop] = value;\n return data;\n }, {});\n }\n\n var parallax = {\n mixins: [Parallax],\n props: {\n target: String,\n viewport: Number,\n // Deprecated\n easing: Number,\n start: String,\n end: String\n },\n data: {\n target: false,\n viewport: 1,\n easing: 1,\n start: 0,\n end: 0\n },\n computed: {\n target({ target }, $el) {\n return getOffsetElement(target && query(target, $el) || $el);\n },\n start({ start }) {\n return toPx(start, \"height\", this.target, true);\n },\n end({ end, viewport }) {\n return toPx(\n end || (viewport = (1 - viewport) * 100) && `${viewport}vh+${viewport}%`,\n \"height\",\n this.target,\n true\n );\n }\n },\n observe: [\n resize({\n target: ({ $el, target }) => [$el, target]\n }),\n scroll$1()\n ],\n update: {\n read({ percent }, types) {\n if (!types.has(\"scroll\")) {\n percent = false;\n }\n if (!isVisible(this.$el)) {\n return false;\n }\n if (!this.matchMedia) {\n return;\n }\n const prev = percent;\n percent = ease(scrolledOver(this.target, this.start, this.end), this.easing);\n return {\n percent,\n style: prev === percent ? false : this.getCss(percent)\n };\n },\n write({ style }) {\n if (!this.matchMedia) {\n this.reset();\n return;\n }\n style && css(this.$el, style);\n },\n events: [\"scroll\", \"resize\"]\n }\n };\n function ease(percent, easing) {\n return easing >= 0 ? Math.pow(percent, easing + 1) : 1 - Math.pow(1 - percent, 1 - easing);\n }\n function getOffsetElement(el) {\n return el ? \"offsetTop\" in el ? el : getOffsetElement(parent(el)) : document.documentElement;\n }\n\n var SliderReactive = {\n update: {\n write() {\n if (this.stack.length || this.dragging) {\n return;\n }\n const index = this.getValidIndex(this.index);\n if (!~this.prevIndex || this.index !== index) {\n this.show(index);\n } else {\n this._translate(1, this.prevIndex, this.index);\n }\n },\n events: [\"resize\"]\n }\n };\n\n var SliderPreload = {\n observe: lazyload({\n target: ({ slides }) => slides,\n targets: (instance) => instance.getAdjacentSlides()\n })\n };\n\n function Transitioner(prev, next, dir, { center, easing, list }) {\n const deferred = new Deferred();\n const from = prev ? getLeft(prev, list, center) : getLeft(next, list, center) + dimensions$1(next).width * dir;\n const to = next ? getLeft(next, list, center) : from + dimensions$1(prev).width * dir * (isRtl ? -1 : 1);\n return {\n dir,\n show(duration, percent = 0, linear) {\n const timing = linear ? \"linear\" : easing;\n duration -= Math.round(duration * clamp(percent, -1, 1));\n this.translate(percent);\n percent = prev ? percent : clamp(percent, 0, 1);\n triggerUpdate(this.getItemIn(), \"itemin\", { percent, duration, timing, dir });\n prev && triggerUpdate(this.getItemIn(true), \"itemout\", {\n percent: 1 - percent,\n duration,\n timing,\n dir\n });\n Transition.start(\n list,\n { transform: translate(-to * (isRtl ? -1 : 1), \"px\") },\n duration,\n timing\n ).then(deferred.resolve, noop);\n return deferred.promise;\n },\n cancel() {\n Transition.cancel(list);\n },\n reset() {\n css(list, \"transform\", \"\");\n },\n forward(duration, percent = this.percent()) {\n Transition.cancel(list);\n return this.show(duration, percent, true);\n },\n translate(percent) {\n const distance = this.getDistance() * dir * (isRtl ? -1 : 1);\n css(\n list,\n \"transform\",\n translate(\n clamp(\n -to + (distance - distance * percent),\n -getWidth(list),\n dimensions$1(list).width\n ) * (isRtl ? -1 : 1),\n \"px\"\n )\n );\n const actives = this.getActives();\n const itemIn = this.getItemIn();\n const itemOut = this.getItemIn(true);\n percent = prev ? clamp(percent, -1, 1) : 0;\n for (const slide of children(list)) {\n const isActive = includes(actives, slide);\n const isIn = slide === itemIn;\n const isOut = slide === itemOut;\n const translateIn = isIn || !isOut && (isActive || dir * (isRtl ? -1 : 1) === -1 ^ getElLeft(slide, list) > getElLeft(prev || next));\n triggerUpdate(slide, `itemtranslate${translateIn ? \"in\" : \"out\"}`, {\n dir,\n percent: isOut ? 1 - percent : isIn ? percent : isActive ? 1 : 0\n });\n }\n },\n percent() {\n return Math.abs(\n (css(list, \"transform\").split(\",\")[4] * (isRtl ? -1 : 1) + from) / (to - from)\n );\n },\n getDistance() {\n return Math.abs(to - from);\n },\n getItemIn(out = false) {\n let actives = this.getActives();\n let nextActives = inView(list, getLeft(next || prev, list, center));\n if (out) {\n const temp = actives;\n actives = nextActives;\n nextActives = temp;\n }\n return nextActives[findIndex(nextActives, (el) => !includes(actives, el))];\n },\n getActives() {\n return inView(list, getLeft(prev || next, list, center));\n }\n };\n }\n function getLeft(el, list, center) {\n const left = getElLeft(el, list);\n return center ? left - centerEl(el, list) : Math.min(left, getMax(list));\n }\n function getMax(list) {\n return Math.max(0, getWidth(list) - dimensions$1(list).width);\n }\n function getWidth(list) {\n return sumBy(children(list), (el) => dimensions$1(el).width);\n }\n function centerEl(el, list) {\n return dimensions$1(list).width / 2 - dimensions$1(el).width / 2;\n }\n function getElLeft(el, list) {\n return el && (position(el).left + (isRtl ? dimensions$1(el).width - dimensions$1(list).width : 0)) * (isRtl ? -1 : 1) || 0;\n }\n function inView(list, listLeft) {\n listLeft -= 1;\n const listWidth = dimensions$1(list).width;\n const listRight = listLeft + listWidth + 2;\n return children(list).filter((slide) => {\n const slideLeft = getElLeft(slide, list);\n const slideRight = slideLeft + Math.min(dimensions$1(slide).width, listWidth);\n return slideLeft >= listLeft && slideRight <= listRight;\n });\n }\n function triggerUpdate(el, type, data) {\n trigger(el, createEvent(type, false, false, data));\n }\n\n var slider = {\n mixins: [Class, Slider, SliderReactive, SliderPreload],\n props: {\n center: Boolean,\n sets: Boolean\n },\n data: {\n center: false,\n sets: false,\n attrItem: \"uk-slider-item\",\n selList: \".uk-slider-items\",\n selNav: \".uk-slider-nav\",\n clsContainer: \"uk-slider-container\",\n Transitioner\n },\n computed: {\n avgWidth() {\n return getWidth(this.list) / this.length;\n },\n finite({ finite }) {\n return finite || isFinite(this.list, this.center);\n },\n maxIndex() {\n if (!this.finite || this.center && !this.sets) {\n return this.length - 1;\n }\n if (this.center) {\n return last(this.sets);\n }\n let lft = 0;\n const max = getMax(this.list);\n const index = findIndex(this.slides, (el) => {\n if (lft >= max) {\n return true;\n }\n lft += dimensions$1(el).width;\n });\n return ~index ? index : this.length - 1;\n },\n sets({ sets: enabled }) {\n if (!enabled) {\n return;\n }\n let left = 0;\n const sets = [];\n const width = dimensions$1(this.list).width;\n for (let i = 0; i < this.length; i++) {\n const slideWidth = dimensions$1(this.slides[i]).width;\n if (left + slideWidth > width) {\n left = 0;\n }\n if (this.center) {\n if (left < width / 2 && left + slideWidth + dimensions$1(this.slides[+i + 1]).width / 2 > width / 2) {\n sets.push(+i);\n left = width / 2 - slideWidth / 2;\n }\n } else if (left === 0) {\n sets.push(Math.min(+i, this.maxIndex));\n }\n left += slideWidth;\n }\n if (sets.length) {\n return sets;\n }\n },\n transitionOptions() {\n return {\n center: this.center,\n list: this.list\n };\n },\n slides() {\n return children(this.list).filter(isVisible);\n }\n },\n connected() {\n toggleClass(this.$el, this.clsContainer, !$(`.${this.clsContainer}`, this.$el));\n },\n observe: resize({\n target: ({ slides }) => slides\n }),\n update: {\n write() {\n for (const el of this.navItems) {\n const index = toNumber(data(el, this.attrItem));\n if (index !== false) {\n el.hidden = !this.maxIndex || index > this.maxIndex || this.sets && !includes(this.sets, index);\n }\n }\n if (this.length && !this.dragging && !this.stack.length) {\n this.reorder();\n this._translate(1);\n }\n this.updateActiveClasses();\n },\n events: [\"resize\"]\n },\n events: {\n beforeitemshow(e) {\n if (!this.dragging && this.sets && this.stack.length < 2 && !includes(this.sets, this.index)) {\n this.index = this.getValidIndex();\n }\n const diff = Math.abs(\n this.index - this.prevIndex + (this.dir > 0 && this.index < this.prevIndex || this.dir < 0 && this.index > this.prevIndex ? (this.maxIndex + 1) * this.dir : 0)\n );\n if (!this.dragging && diff > 1) {\n for (let i = 0; i < diff; i++) {\n this.stack.splice(1, 0, this.dir > 0 ? \"next\" : \"previous\");\n }\n e.preventDefault();\n return;\n }\n const index = this.dir < 0 || !this.slides[this.prevIndex] ? this.index : this.prevIndex;\n this.duration = speedUp(this.avgWidth / this.velocity) * (dimensions$1(this.slides[index]).width / this.avgWidth);\n this.reorder();\n },\n itemshow() {\n if (~this.prevIndex) {\n addClass(this._getTransitioner().getItemIn(), this.clsActive);\n }\n },\n itemshown() {\n this.updateActiveClasses();\n }\n },\n methods: {\n reorder() {\n if (this.finite) {\n css(this.slides, \"order\", \"\");\n return;\n }\n const index = this.dir > 0 && this.slides[this.prevIndex] ? this.prevIndex : this.index;\n this.slides.forEach(\n (slide, i) => css(\n slide,\n \"order\",\n this.dir > 0 && i < index ? 1 : this.dir < 0 && i >= this.index ? -1 : \"\"\n )\n );\n if (!this.center) {\n return;\n }\n const next = this.slides[index];\n let width = dimensions$1(this.list).width / 2 - dimensions$1(next).width / 2;\n let j = 0;\n while (width > 0) {\n const slideIndex = this.getIndex(--j + index, index);\n const slide = this.slides[slideIndex];\n css(slide, \"order\", slideIndex > index ? -2 : -1);\n width -= dimensions$1(slide).width;\n }\n },\n updateActiveClasses() {\n const actives = this._getTransitioner(this.index).getActives();\n const activeClasses = [\n this.clsActive,\n (!this.sets || includes(this.sets, toFloat(this.index))) && this.clsActivated || \"\"\n ];\n for (const slide of this.slides) {\n const active = includes(actives, slide);\n toggleClass(slide, activeClasses, active);\n attr(slide, \"aria-hidden\", !active);\n for (const focusable of $$(selFocusable, slide)) {\n if (!hasOwn(focusable, \"_tabindex\")) {\n focusable._tabindex = attr(focusable, \"tabindex\");\n }\n attr(focusable, \"tabindex\", active ? focusable._tabindex : -1);\n }\n }\n },\n getValidIndex(index = this.index, prevIndex = this.prevIndex) {\n index = this.getIndex(index, prevIndex);\n if (!this.sets) {\n return index;\n }\n let prev;\n do {\n if (includes(this.sets, index)) {\n return index;\n }\n prev = index;\n index = this.getIndex(index + this.dir, prevIndex);\n } while (index !== prev);\n return index;\n },\n getAdjacentSlides() {\n const { width } = dimensions$1(this.list);\n const left = -width;\n const right = width * 2;\n const slideWidth = dimensions$1(this.slides[this.index]).width;\n const slideLeft = this.center ? width / 2 - slideWidth / 2 : 0;\n const slides = /* @__PURE__ */ new Set();\n for (const i of [-1, 1]) {\n let currentLeft = slideLeft + (i > 0 ? slideWidth : 0);\n let j = 0;\n do {\n const slide = this.slides[this.getIndex(this.index + i + j++ * i)];\n currentLeft += dimensions$1(slide).width * i;\n slides.add(slide);\n } while (this.length > j && currentLeft > left && currentLeft < right);\n }\n return Array.from(slides);\n }\n }\n };\n function isFinite(list, center) {\n if (!list || list.length < 2) {\n return true;\n }\n const { width: listWidth } = dimensions$1(list);\n if (!center) {\n return Math.ceil(getWidth(list)) < Math.trunc(listWidth + getMaxElWidth(list));\n }\n const slides = children(list);\n const listHalf = Math.trunc(listWidth / 2);\n for (const index in slides) {\n const slide = slides[index];\n const slideWidth = dimensions$1(slide).width;\n const slidesInView = /* @__PURE__ */ new Set([slide]);\n let diff = 0;\n for (const i of [-1, 1]) {\n let left = slideWidth / 2;\n let j = 0;\n while (left < listHalf) {\n const nextSlide = slides[getIndex(+index + i + j++ * i, slides)];\n if (slidesInView.has(nextSlide)) {\n return true;\n }\n left += dimensions$1(nextSlide).width;\n slidesInView.add(nextSlide);\n }\n diff = Math.max(\n diff,\n slideWidth / 2 + dimensions$1(slides[getIndex(+index + i, slides)]).width / 2 - (left - listHalf)\n );\n }\n if (diff > sumBy(\n slides.filter((slide2) => !slidesInView.has(slide2)),\n (slide2) => dimensions$1(slide2).width\n )) {\n return true;\n }\n }\n return false;\n }\n function getMaxElWidth(list) {\n return Math.max(0, ...children(list).map((el) => dimensions$1(el).width));\n }\n\n var sliderParallax = {\n mixins: [Parallax],\n data: {\n selItem: \"!li\"\n },\n beforeConnect() {\n this.item = query(this.selItem, this.$el);\n },\n disconnected() {\n this.item = null;\n },\n events: [\n {\n name: \"itemin itemout\",\n self: true,\n el() {\n return this.item;\n },\n handler({ type, detail: { percent, duration, timing, dir } }) {\n fastdom.read(() => {\n if (!this.matchMedia) {\n return;\n }\n const propsFrom = this.getCss(getCurrentPercent(type, dir, percent));\n const propsTo = this.getCss(isIn(type) ? 0.5 : dir > 0 ? 1 : 0);\n fastdom.write(() => {\n css(this.$el, propsFrom);\n Transition.start(this.$el, propsTo, duration, timing).catch(noop);\n });\n });\n }\n },\n {\n name: \"transitioncanceled transitionend\",\n self: true,\n el() {\n return this.item;\n },\n handler() {\n Transition.cancel(this.$el);\n }\n },\n {\n name: \"itemtranslatein itemtranslateout\",\n self: true,\n el() {\n return this.item;\n },\n handler({ type, detail: { percent, dir } }) {\n fastdom.read(() => {\n if (!this.matchMedia) {\n this.reset();\n return;\n }\n const props = this.getCss(getCurrentPercent(type, dir, percent));\n fastdom.write(() => css(this.$el, props));\n });\n }\n }\n ]\n };\n function isIn(type) {\n return endsWith(type, \"in\");\n }\n function getCurrentPercent(type, dir, percent) {\n percent /= 2;\n return isIn(type) ^ dir < 0 ? percent : 1 - percent;\n }\n\n var Animations = {\n ...Animations$2,\n fade: {\n show() {\n return [{ opacity: 0, zIndex: 0 }, { zIndex: -1 }];\n },\n percent(current) {\n return 1 - css(current, \"opacity\");\n },\n translate(percent) {\n return [{ opacity: 1 - percent, zIndex: 0 }, { zIndex: -1 }];\n }\n },\n scale: {\n show() {\n return [{ opacity: 0, transform: scale3d(1 + 0.5), zIndex: 0 }, { zIndex: -1 }];\n },\n percent(current) {\n return 1 - css(current, \"opacity\");\n },\n translate(percent) {\n return [\n { opacity: 1 - percent, transform: scale3d(1 + 0.5 * percent), zIndex: 0 },\n { zIndex: -1 }\n ];\n }\n },\n pull: {\n show(dir) {\n return dir < 0 ? [\n { transform: translate(30), zIndex: -1 },\n { transform: translate(), zIndex: 0 }\n ] : [\n { transform: translate(-100), zIndex: 0 },\n { transform: translate(), zIndex: -1 }\n ];\n },\n percent(current, next, dir) {\n return dir < 0 ? 1 - translated(next) : translated(current);\n },\n translate(percent, dir) {\n return dir < 0 ? [\n { transform: translate(30 * percent), zIndex: -1 },\n { transform: translate(-100 * (1 - percent)), zIndex: 0 }\n ] : [\n { transform: translate(-percent * 100), zIndex: 0 },\n { transform: translate(30 * (1 - percent)), zIndex: -1 }\n ];\n }\n },\n push: {\n show(dir) {\n return dir < 0 ? [\n { transform: translate(100), zIndex: 0 },\n { transform: translate(), zIndex: -1 }\n ] : [\n { transform: translate(-30), zIndex: -1 },\n { transform: translate(), zIndex: 0 }\n ];\n },\n percent(current, next, dir) {\n return dir > 0 ? 1 - translated(next) : translated(current);\n },\n translate(percent, dir) {\n return dir < 0 ? [\n { transform: translate(percent * 100), zIndex: 0 },\n { transform: translate(-30 * (1 - percent)), zIndex: -1 }\n ] : [\n { transform: translate(-30 * percent), zIndex: -1 },\n { transform: translate(100 * (1 - percent)), zIndex: 0 }\n ];\n }\n }\n };\n\n var slideshow = {\n mixins: [Class, Slideshow, SliderReactive, SliderPreload],\n props: {\n ratio: String,\n minHeight: Number,\n maxHeight: Number\n },\n data: {\n ratio: \"16:9\",\n minHeight: false,\n maxHeight: false,\n selList: \".uk-slideshow-items\",\n attrItem: \"uk-slideshow-item\",\n selNav: \".uk-slideshow-nav\",\n Animations\n },\n update: {\n read() {\n if (!this.list) {\n return false;\n }\n let [width, height] = this.ratio.split(\":\").map(Number);\n height = height * this.list.offsetWidth / width || 0;\n if (this.minHeight) {\n height = Math.max(this.minHeight, height);\n }\n if (this.maxHeight) {\n height = Math.min(this.maxHeight, height);\n }\n return { height: height - boxModelAdjust(this.list, \"height\", \"content-box\") };\n },\n write({ height }) {\n height > 0 && css(this.list, \"minHeight\", height);\n },\n events: [\"resize\"]\n },\n methods: {\n getAdjacentSlides() {\n return [1, -1].map((i) => this.slides[this.getIndex(this.index + i)]);\n }\n }\n };\n\n var sortable = {\n mixins: [Class, Animate],\n props: {\n group: String,\n threshold: Number,\n clsItem: String,\n clsPlaceholder: String,\n clsDrag: String,\n clsDragState: String,\n clsBase: String,\n clsNoDrag: String,\n clsEmpty: String,\n clsCustom: String,\n handle: String\n },\n data: {\n group: false,\n threshold: 5,\n clsItem: \"uk-sortable-item\",\n clsPlaceholder: \"uk-sortable-placeholder\",\n clsDrag: \"uk-sortable-drag\",\n clsDragState: \"uk-drag\",\n clsBase: \"uk-sortable\",\n clsNoDrag: \"uk-sortable-nodrag\",\n clsEmpty: \"uk-sortable-empty\",\n clsCustom: \"\",\n handle: false,\n pos: {}\n },\n created() {\n for (const key of [\"init\", \"start\", \"move\", \"end\"]) {\n const fn = this[key];\n this[key] = (e) => {\n assign(this.pos, getEventPos(e));\n fn(e);\n };\n }\n },\n events: {\n name: pointerDown$1,\n passive: false,\n handler: \"init\"\n },\n computed: {\n target() {\n return (this.$el.tBodies || [this.$el])[0];\n },\n items() {\n return children(this.target);\n },\n isEmpty() {\n return isEmpty(this.items);\n },\n handles({ handle }, el) {\n return handle ? $$(handle, el) : this.items;\n }\n },\n watch: {\n isEmpty(empty) {\n toggleClass(this.target, this.clsEmpty, empty);\n },\n handles(handles, prev) {\n css(prev, { touchAction: \"\", userSelect: \"\" });\n css(handles, { touchAction: hasTouch ? \"none\" : \"\", userSelect: \"none\" });\n }\n },\n update: {\n write(data) {\n if (!this.drag || !parent(this.placeholder)) {\n return;\n }\n const {\n pos: { x, y },\n origin: { offsetTop, offsetLeft },\n placeholder\n } = this;\n css(this.drag, {\n top: y - offsetTop,\n left: x - offsetLeft\n });\n const sortable = this.getSortable(document.elementFromPoint(x, y));\n if (!sortable) {\n return;\n }\n const { items } = sortable;\n if (items.some(Transition.inProgress)) {\n return;\n }\n const target = findTarget(items, { x, y });\n if (items.length && (!target || target === placeholder)) {\n return;\n }\n const previous = this.getSortable(placeholder);\n const insertTarget = findInsertTarget(\n sortable.target,\n target,\n placeholder,\n x,\n y,\n sortable === previous && data.moved !== target\n );\n if (insertTarget === false) {\n return;\n }\n if (insertTarget && placeholder === insertTarget) {\n return;\n }\n if (sortable !== previous) {\n previous.remove(placeholder);\n data.moved = target;\n } else {\n delete data.moved;\n }\n sortable.insert(placeholder, insertTarget);\n this.touched.add(sortable);\n },\n events: [\"move\"]\n },\n methods: {\n init(e) {\n const { target, button, defaultPrevented } = e;\n const [placeholder] = this.items.filter((el) => within(target, el));\n if (!placeholder || defaultPrevented || button > 0 || isInput(target) || within(target, `.${this.clsNoDrag}`) || this.handle && !within(target, this.handle)) {\n return;\n }\n e.preventDefault();\n this.touched = /* @__PURE__ */ new Set([this]);\n this.placeholder = placeholder;\n this.origin = { target, index: index(placeholder), ...this.pos };\n on(document, pointerMove$1, this.move);\n on(document, pointerUp$1, this.end);\n if (!this.threshold) {\n this.start(e);\n }\n },\n start(e) {\n this.drag = appendDrag(this.$container, this.placeholder);\n const { left, top } = this.placeholder.getBoundingClientRect();\n assign(this.origin, { offsetLeft: this.pos.x - left, offsetTop: this.pos.y - top });\n addClass(this.drag, this.clsDrag, this.clsCustom);\n addClass(this.placeholder, this.clsPlaceholder);\n addClass(this.items, this.clsItem);\n addClass(document.documentElement, this.clsDragState);\n trigger(this.$el, \"start\", [this, this.placeholder]);\n trackScroll(this.pos);\n this.move(e);\n },\n move(e) {\n if (this.drag) {\n this.$emit(\"move\");\n } else if (Math.abs(this.pos.x - this.origin.x) > this.threshold || Math.abs(this.pos.y - this.origin.y) > this.threshold) {\n this.start(e);\n }\n },\n end() {\n off(document, pointerMove$1, this.move);\n off(document, pointerUp$1, this.end);\n if (!this.drag) {\n return;\n }\n untrackScroll();\n const sortable = this.getSortable(this.placeholder);\n if (this === sortable) {\n if (this.origin.index !== index(this.placeholder)) {\n trigger(this.$el, \"moved\", [this, this.placeholder]);\n }\n } else {\n trigger(sortable.$el, \"added\", [sortable, this.placeholder]);\n trigger(this.$el, \"removed\", [this, this.placeholder]);\n }\n trigger(this.$el, \"stop\", [this, this.placeholder]);\n remove$1(this.drag);\n this.drag = null;\n for (const { clsPlaceholder, clsItem } of this.touched) {\n for (const sortable2 of this.touched) {\n removeClass(sortable2.items, clsPlaceholder, clsItem);\n }\n }\n this.touched = null;\n removeClass(document.documentElement, this.clsDragState);\n },\n insert(element, target) {\n addClass(this.items, this.clsItem);\n const insert = () => target ? before(target, element) : append(this.target, element);\n this.animate(insert);\n },\n remove(element) {\n if (!within(element, this.target)) {\n return;\n }\n this.animate(() => remove$1(element));\n },\n getSortable(element) {\n do {\n const sortable = this.$getComponent(element, \"sortable\");\n if (sortable && (sortable === this || this.group !== false && sortable.group === this.group)) {\n return sortable;\n }\n } while (element = parent(element));\n }\n }\n };\n let trackTimer;\n function trackScroll(pos) {\n let last = Date.now();\n trackTimer = setInterval(() => {\n let { x, y } = pos;\n y += document.scrollingElement.scrollTop;\n const dist = (Date.now() - last) * 0.3;\n last = Date.now();\n scrollParents(document.elementFromPoint(x, pos.y)).reverse().some((scrollEl) => {\n let { scrollTop: scroll, scrollHeight } = scrollEl;\n const { top, bottom, height: height2 } = offsetViewport(scrollEl);\n if (top < y && top + 35 > y) {\n scroll -= dist;\n } else if (bottom > y && bottom - 35 < y) {\n scroll += dist;\n } else {\n return;\n }\n if (scroll > 0 && scroll < scrollHeight - height2) {\n scrollEl.scrollTop = scroll;\n return true;\n }\n });\n }, 15);\n }\n function untrackScroll() {\n clearInterval(trackTimer);\n }\n function appendDrag(container, element) {\n let clone;\n if (isTag(element, \"li\", \"tr\")) {\n clone = $(\"
      \");\n append(clone, element.cloneNode(true).children);\n for (const attribute of element.getAttributeNames()) {\n attr(clone, attribute, element.getAttribute(attribute));\n }\n } else {\n clone = element.cloneNode(true);\n }\n append(container, clone);\n css(clone, \"margin\", \"0\", \"important\");\n css(clone, {\n boxSizing: \"border-box\",\n width: element.offsetWidth,\n height: element.offsetHeight,\n padding: css(element, \"padding\")\n });\n height(clone.firstElementChild, height(element.firstElementChild));\n return clone;\n }\n function findTarget(items, point) {\n return items[findIndex(items, (item) => pointInRect(point, item.getBoundingClientRect()))];\n }\n function findInsertTarget(list, target, placeholder, x, y, sameList) {\n if (!children(list).length) {\n return;\n }\n const rect = target.getBoundingClientRect();\n if (!sameList) {\n if (!isHorizontal(list, placeholder)) {\n return y < rect.top + rect.height / 2 ? target : target.nextElementSibling;\n }\n return target;\n }\n const placeholderRect = placeholder.getBoundingClientRect();\n const sameRow = linesIntersect(\n [rect.top, rect.bottom],\n [placeholderRect.top, placeholderRect.bottom]\n );\n const [pointerPos, lengthProp, startProp, endProp] = sameRow ? [x, \"width\", \"left\", \"right\"] : [y, \"height\", \"top\", \"bottom\"];\n const diff = placeholderRect[lengthProp] < rect[lengthProp] ? rect[lengthProp] - placeholderRect[lengthProp] : 0;\n if (placeholderRect[startProp] < rect[startProp]) {\n if (diff && pointerPos < rect[startProp] + diff) {\n return false;\n }\n return target.nextElementSibling;\n }\n if (diff && pointerPos > rect[endProp] - diff) {\n return false;\n }\n return target;\n }\n function isHorizontal(list, placeholder) {\n const single = children(list).length === 1;\n if (single) {\n append(list, placeholder);\n }\n const items = children(list);\n const isHorizontal2 = items.some((el, i) => {\n const rectA = el.getBoundingClientRect();\n return items.slice(i + 1).some((el2) => {\n const rectB = el2.getBoundingClientRect();\n return !linesIntersect([rectA.left, rectA.right], [rectB.left, rectB.right]);\n });\n });\n if (single) {\n remove$1(placeholder);\n }\n return isHorizontal2;\n }\n function linesIntersect(lineA, lineB) {\n return lineA[1] > lineB[0] && lineB[1] > lineA[0];\n }\n\n var tooltip = {\n mixins: [Container, Togglable, Position],\n args: \"title\",\n props: {\n delay: Number,\n title: String\n },\n data: {\n pos: \"top\",\n title: \"\",\n delay: 0,\n animation: [\"uk-animation-scale-up\"],\n duration: 100,\n cls: \"uk-active\"\n },\n beforeConnect() {\n this.id = generateId(this);\n this._hasTitle = hasAttr(this.$el, \"title\");\n attr(this.$el, {\n title: \"\",\n \"aria-describedby\": this.id\n });\n makeFocusable(this.$el);\n },\n disconnected() {\n this.hide();\n if (!attr(this.$el, \"title\")) {\n attr(this.$el, \"title\", this._hasTitle ? this.title : null);\n }\n },\n methods: {\n show() {\n if (this.isToggled(this.tooltip || null) || !this.title) {\n return;\n }\n clearTimeout(this.showTimer);\n this.showTimer = setTimeout(this._show, this.delay);\n },\n async hide() {\n if (matches(this.$el, \"input:focus\")) {\n return;\n }\n clearTimeout(this.showTimer);\n if (!this.isToggled(this.tooltip || null)) {\n return;\n }\n await this.toggleElement(this.tooltip, false, false);\n remove$1(this.tooltip);\n this.tooltip = null;\n },\n _show() {\n this.tooltip = append(\n this.container,\n `
      \n
      ${this.title}
      \n
      `\n );\n on(this.tooltip, \"toggled\", (e, toggled) => {\n if (!toggled) {\n return;\n }\n const update = () => this.positionAt(this.tooltip, this.$el);\n update();\n const [dir, align] = getAlignment(this.tooltip, this.$el, this.pos);\n this.origin = this.axis === \"y\" ? `${flipPosition(dir)}-${align}` : `${align}-${flipPosition(dir)}`;\n const handlers = [\n once(\n document,\n `keydown ${pointerDown$1}`,\n this.hide,\n false,\n (e2) => e2.type === pointerDown$1 && !within(e2.target, this.$el) || e2.type === \"keydown\" && e2.keyCode === keyMap.ESC\n ),\n on([document, ...overflowParents(this.$el)], \"scroll\", update, {\n passive: true\n })\n ];\n once(this.tooltip, \"hide\", () => handlers.forEach((handler) => handler()), {\n self: true\n });\n });\n this.toggleElement(this.tooltip, true);\n }\n },\n events: {\n focus: \"show\",\n blur: \"hide\",\n [`${pointerEnter} ${pointerLeave}`](e) {\n if (!isTouch(e)) {\n this[e.type === pointerEnter ? \"show\" : \"hide\"]();\n }\n },\n // Clicking a button does not give it focus on all browsers and platforms\n // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#clicking_and_focus\n [pointerDown$1](e) {\n if (isTouch(e)) {\n this.show();\n }\n }\n }\n };\n function makeFocusable(el) {\n if (!isFocusable(el)) {\n attr(el, \"tabindex\", \"0\");\n }\n }\n function getAlignment(el, target, [dir, align]) {\n const elOffset = offset(el);\n const targetOffset = offset(target);\n const properties = [\n [\"left\", \"right\"],\n [\"top\", \"bottom\"]\n ];\n for (const props2 of properties) {\n if (elOffset[props2[0]] >= targetOffset[props2[1]]) {\n dir = props2[1];\n break;\n }\n if (elOffset[props2[1]] <= targetOffset[props2[0]]) {\n dir = props2[0];\n break;\n }\n }\n const props = includes(properties[0], dir) ? properties[1] : properties[0];\n if (elOffset[props[0]] === targetOffset[props[0]]) {\n align = props[0];\n } else if (elOffset[props[1]] === targetOffset[props[1]]) {\n align = props[1];\n } else {\n align = \"center\";\n }\n return [dir, align];\n }\n\n var upload = {\n mixins: [I18n],\n i18n: {\n invalidMime: \"Invalid File Type: %s\",\n invalidName: \"Invalid File Name: %s\",\n invalidSize: \"Invalid File Size: %s Kilobytes Max\"\n },\n props: {\n allow: String,\n clsDragover: String,\n concurrent: Number,\n maxSize: Number,\n method: String,\n mime: String,\n multiple: Boolean,\n name: String,\n params: Object,\n type: String,\n url: String\n },\n data: {\n allow: false,\n clsDragover: \"uk-dragover\",\n concurrent: 1,\n maxSize: 0,\n method: \"POST\",\n mime: false,\n multiple: false,\n name: \"files[]\",\n params: {},\n type: \"\",\n url: \"\",\n abort: noop,\n beforeAll: noop,\n beforeSend: noop,\n complete: noop,\n completeAll: noop,\n error: noop,\n fail: noop,\n load: noop,\n loadEnd: noop,\n loadStart: noop,\n progress: noop\n },\n events: {\n change(e) {\n if (!matches(e.target, 'input[type=\"file\"]')) {\n return;\n }\n e.preventDefault();\n if (e.target.files) {\n this.upload(e.target.files);\n }\n e.target.value = \"\";\n },\n drop(e) {\n stop(e);\n const transfer = e.dataTransfer;\n if (!(transfer == null ? void 0 : transfer.files)) {\n return;\n }\n removeClass(this.$el, this.clsDragover);\n this.upload(transfer.files);\n },\n dragenter(e) {\n stop(e);\n },\n dragover(e) {\n stop(e);\n addClass(this.$el, this.clsDragover);\n },\n dragleave(e) {\n stop(e);\n removeClass(this.$el, this.clsDragover);\n }\n },\n methods: {\n async upload(files) {\n files = toArray(files);\n if (!files.length) {\n return;\n }\n trigger(this.$el, \"upload\", [files]);\n for (const file of files) {\n if (this.maxSize && this.maxSize * 1e3 < file.size) {\n this.fail(this.t(\"invalidSize\", this.maxSize));\n return;\n }\n if (this.allow && !match(this.allow, file.name)) {\n this.fail(this.t(\"invalidName\", this.allow));\n return;\n }\n if (this.mime && !match(this.mime, file.type)) {\n this.fail(this.t(\"invalidMime\", this.mime));\n return;\n }\n }\n if (!this.multiple) {\n files = files.slice(0, 1);\n }\n this.beforeAll(this, files);\n const chunks = chunk(files, this.concurrent);\n const upload = async (files2) => {\n const data = new FormData();\n files2.forEach((file) => data.append(this.name, file));\n for (const key in this.params) {\n data.append(key, this.params[key]);\n }\n try {\n const xhr = await ajax(this.url, {\n data,\n method: this.method,\n responseType: this.type,\n beforeSend: (env) => {\n const { xhr: xhr2 } = env;\n on(xhr2.upload, \"progress\", this.progress);\n for (const type of [\"loadStart\", \"load\", \"loadEnd\", \"abort\"]) {\n on(xhr2, type.toLowerCase(), this[type]);\n }\n return this.beforeSend(env);\n }\n });\n this.complete(xhr);\n if (chunks.length) {\n await upload(chunks.shift());\n } else {\n this.completeAll(xhr);\n }\n } catch (e) {\n this.error(e);\n }\n };\n await upload(chunks.shift());\n }\n }\n };\n function match(pattern, path) {\n return path.match(\n new RegExp(\n `^${pattern.replace(/\\//g, \"\\\\/\").replace(/\\*\\*/g, \"(\\\\/[^\\\\/]+)*\").replace(/\\*/g, \"[^\\\\/]+\").replace(/((?!\\\\))\\?/g, \"$1.\")}$`,\n \"i\"\n )\n );\n }\n function chunk(files, size) {\n const chunks = [];\n for (let i = 0; i < files.length; i += size) {\n chunks.push(files.slice(i, i + size));\n }\n return chunks;\n }\n function stop(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n function ajax(url, options) {\n const env = {\n data: null,\n method: \"GET\",\n headers: {},\n xhr: new XMLHttpRequest(),\n beforeSend: noop,\n responseType: \"\",\n ...options\n };\n return Promise.resolve().then(() => env.beforeSend(env)).then(() => send(url, env));\n }\n function send(url, env) {\n return new Promise((resolve, reject) => {\n const { xhr } = env;\n for (const prop in env) {\n if (prop in xhr) {\n try {\n xhr[prop] = env[prop];\n } catch (e) {\n }\n }\n }\n xhr.open(env.method.toUpperCase(), url);\n for (const header in env.headers) {\n xhr.setRequestHeader(header, env.headers[header]);\n }\n on(xhr, \"load\", () => {\n if (xhr.status === 0 || xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {\n resolve(xhr);\n } else {\n reject(\n assign(Error(xhr.statusText), {\n xhr,\n status: xhr.status\n })\n );\n }\n });\n on(xhr, \"error\", () => reject(assign(Error(\"Network Error\"), { xhr })));\n on(xhr, \"timeout\", () => reject(assign(Error(\"Network Timeout\"), { xhr })));\n xhr.send(env.data);\n });\n }\n\n var components = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Countdown: countdown,\n Filter: filter,\n Lightbox: lightbox,\n LightboxPanel: LightboxPanel,\n Notification: notification,\n Parallax: parallax,\n Slider: slider,\n SliderParallax: sliderParallax,\n Slideshow: slideshow,\n SlideshowParallax: sliderParallax,\n Sortable: sortable,\n Tooltip: tooltip,\n Upload: upload\n });\n\n each(components, (component, name) => App.component(name, component));\n\n return App;\n\n}));\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlraXQuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qcy91dGlsL2xhbmcuanMiLCIuLi8uLi9zcmMvanMvdXRpbC9hdHRyLmpzIiwiLi4vLi4vc3JjL2pzL3V0aWwvZmlsdGVyLmpzIiwiLi4vLi4vc3JjL2pzL3V0aWwvc2VsZWN0b3IuanMiLCIuLi8uLi9zcmMvanMvdXRpbC9ldmVudC5qcyIsIi4uLy4uL3NyYy9qcy91dGlsL3N0eWxlLmpzIiwiLi4vLi4vc3JjL2pzL3V0aWwvY2xhc3MuanMiLCIuLi8uLi9zcmMvanMvdXRpbC9hbmltYXRpb24uanMiLCIuLi8uLi9zcmMvanMvdXRpbC9kb20uanMiLCIuLi8uLi9zcmMvanMvdXRpbC9kaW1lbnNpb25zLmpzIiwiLi4vLi4vc3JjL2pzL3V0aWwvZW52LmpzIiwiLi4vLi4vc3JjL2pzL3V0aWwvZmFzdGRvbS5qcyIsIi4uLy4uL3NyYy9qcy91dGlsL21vdXNlLmpzIiwiLi4vLi4vc3JjL2pzL3V0aWwvb2JzZXJ2ZXIuanMiLCIuLi8uLi9zcmMvanMvdXRpbC9wbGF5ZXIuanMiLCIuLi8uLi9zcmMvanMvdXRpbC92aWV3cG9ydC5qcyIsIi4uLy4uL3NyYy9qcy91dGlsL3Bvc2l0aW9uLmpzIiwiLi4vLi4vc3JjL2pzL2FwaS93YXRjaC5qcyIsIi4uLy4uL3NyYy9qcy9hcGkvdXBkYXRlLmpzIiwiLi4vLi4vc3JjL2pzL2FwaS9jb21wdXRlZC5qcyIsIi4uLy4uL3NyYy9qcy9hcGkvZXZlbnRzLmpzIiwiLi4vLi4vc3JjL2pzL2FwaS9vYnNlcnZlci5qcyIsIi4uLy4uL3NyYy9qcy9hcGkvb3B0aW9ucy5qcyIsIi4uLy4uL3NyYy9qcy9hcGkvcHJvcHMuanMiLCIuLi8uLi9zcmMvanMvYXBpL2hvb2tzLmpzIiwiLi4vLi4vc3JjL2pzL2FwaS9zdGF0ZS5qcyIsIi4uLy4uL3NyYy9qcy9hcGkvYXBwLmpzIiwiLi4vLi4vc3JjL2pzL2FwaS9jb21wb25lbnQuanMiLCIuLi8uLi9zcmMvanMvYXBpL2dsb2JhbC5qcyIsIi4uLy4uL3NyYy9qcy9hcGkvaW5zdGFuY2UuanMiLCIuLi8uLi9zcmMvanMvYXBpL2luZGV4LmpzIiwiLi4vLi4vc3JjL2pzL2FwaS9ib290LmpzIiwiLi4vLi4vc3JjL2pzL21peGluL2NsYXNzLmpzIiwiLi4vLi4vc3JjL2pzL21peGluL3RvZ2dsYWJsZS5qcyIsIi4uLy4uL3NyYy9qcy91dGlsL2tleXMuanMiLCIuLi8uLi9zcmMvanMvYXBpL29ic2VydmFibGVzLmpzIiwiLi4vLi4vc3JjL2pzL2NvcmUvYWNjb3JkaW9uLmpzIiwiLi4vLi4vc3JjL2pzL2NvcmUvYWxlcnQuanMiLCIuLi8uLi9zcmMvanMvY29yZS92aWRlby5qcyIsIi4uLy4uL3NyYy9qcy9jb3JlL2NvdmVyLmpzIiwiLi4vLi4vc3JjL2pzL21peGluL3Bvc2l0aW9uLmpzIiwiLi4vLi4vc3JjL2pzL21peGluL2NvbnRhaW5lci5qcyIsIi4uLy4uL3NyYy9qcy9taXhpbi9pbnRlcm5hbC9zY3JvbGwuanMiLCIuLi8uLi9zcmMvanMvY29yZS9kcm9wLmpzIiwiLi4vLi4vc3JjL2pzL2NvcmUvZHJvcG5hdi5qcyIsIi4uLy4uL3NyYy9qcy9jb3JlL2Zvcm0tY3VzdG9tLmpzIiwiLi4vLi4vc3JjL2pzL2NvcmUvbWFyZ2luLmpzIiwiLi4vLi4vc3JjL2pzL2NvcmUvZ3JpZC5qcyIsIi4uLy4uL3NyYy9qcy9jb3JlL2hlaWdodC1tYXRjaC5qcyIsIi4uLy4uL3NyYy9qcy9jb3JlL2hlaWdodC12aWV3cG9ydC5qcyIsIi4uLy4uL3NyYy9qcy9taXhpbi9zdmcuanMiLCIuLi8uLi9zcmMvanMvbWl4aW4vaTE4bi5qcyIsIi4uLy4uL3NyYy9qcy9jb3JlL2ljb24uanMiLCIuLi8uLi9zcmMvanMvY29yZS9pbWcuanMiLCIuLi8uLi9zcmMvanMvbWl4aW4vbWVkaWEuanMiLCIuLi8uLi9zcmMvanMvY29yZS9sZWFkZXIuanMiLCIuLi8uLi9zcmMvanMvbWl4aW4vbW9kYWwuanMiLCIuLi8uLi9zcmMvanMvY29yZS9tb2RhbC5qcyIsIi4uLy4uL3NyYy9qcy9jb3JlL25hdi5qcyIsIi4uLy4uL3NyYy9qcy9jb3JlL25hdmJhci5qcyIsIi4uLy4uL3NyYy9qcy9jb3JlL29mZmNhbnZhcy5qcyIsIi4uLy4uL3NyYy9qcy9jb3JlL292ZXJmbG93LWF1dG8uanMiLCIuLi8uLi9zcmMvanMvY29yZS9yZXNwb25zaXZlLmpzIiwiLi4vLi4vc3JjL2pzL2NvcmUvc2Nyb2xsLmpzIiwiLi4vLi4vc3JjL2pzL2NvcmUvc2Nyb2xsc3B5LmpzIiwiLi4vLi4vc3JjL2pzL2NvcmUvc2Nyb2xsc3B5LW5hdi5qcyIsIi4uLy4uL3NyYy9qcy9jb3JlL3N0aWNreS5qcyIsIi4uLy4uL3NyYy9qcy91dGlsL3N2Zy5qcyIsIi4uLy4uL3NyYy9qcy9jb3JlL3N2Zy5qcyIsIi4uLy4uL3NyYy9qcy9jb3JlL3N3aXRjaGVyLmpzIiwiLi4vLi4vc3JjL2pzL2NvcmUvdGFiLmpzIiwiLi4vLi4vc3JjL2pzL2NvcmUvdG9nZ2xlLmpzIiwiLi4vLi4vc3JjL2pzL3Vpa2l0LWNvcmUuanMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50cy9jb3VudGRvd24uanMiLCIuLi8uLi9zcmMvanMvbWl4aW4vaW50ZXJuYWwvYW5pbWF0ZS1mYWRlLmpzIiwiLi4vLi4vc3JjL2pzL21peGluL2ludGVybmFsL2FuaW1hdGUtc2xpZGUuanMiLCIuLi8uLi9zcmMvanMvbWl4aW4vYW5pbWF0ZS5qcyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL2ZpbHRlci5qcyIsIi4uLy4uL3NyYy9qcy9taXhpbi9pbnRlcm5hbC9zbGlkZXNob3ctYW5pbWF0aW9ucy5qcyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL2ludGVybmFsL2xpZ2h0Ym94LWFuaW1hdGlvbnMuanMiLCIuLi8uLi9zcmMvanMvbWl4aW4vaW50ZXJuYWwvc2xpZGVzaG93LXRyYW5zaXRpb25lci5qcyIsIi4uLy4uL3NyYy9qcy9taXhpbi9zbGlkZXItbmF2LmpzIiwiLi4vLi4vc3JjL2pzL21peGluL3NsaWRlci1kcmFnLmpzIiwiLi4vLi4vc3JjL2pzL21peGluL3NsaWRlci1hdXRvcGxheS5qcyIsIi4uLy4uL3NyYy9qcy9taXhpbi9zbGlkZXIuanMiLCIuLi8uLi9zcmMvanMvbWl4aW4vc2xpZGVzaG93LmpzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvbGlnaHRib3gtcGFuZWwuanMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50cy9saWdodGJveC5qcyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL25vdGlmaWNhdGlvbi5qcyIsIi4uLy4uL3NyYy9qcy9taXhpbi9wYXJhbGxheC5qcyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL3BhcmFsbGF4LmpzIiwiLi4vLi4vc3JjL2pzL21peGluL3NsaWRlci1yZWFjdGl2ZS5qcyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL2ludGVybmFsL3NsaWRlci1wcmVsb2FkLmpzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvaW50ZXJuYWwvc2xpZGVyLXRyYW5zaXRpb25lci5qcyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL3NsaWRlci5qcyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL3NsaWRlci1wYXJhbGxheC5qcyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL2ludGVybmFsL3NsaWRlc2hvdy1hbmltYXRpb25zLmpzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvc2xpZGVzaG93LmpzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvc29ydGFibGUuanMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50cy90b29sdGlwLmpzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvdXBsb2FkLmpzIiwiLi4vLi4vc3JjL2pzL3Vpa2l0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHsgaGFzT3duUHJvcGVydHksIHRvU3RyaW5nIH0gPSBPYmplY3QucHJvdG90eXBlO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzT3duKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xufVxuXG5jb25zdCBoeXBoZW5hdGVSZSA9IC9cXEIoW0EtWl0pL2c7XG5cbmV4cG9ydCBjb25zdCBoeXBoZW5hdGUgPSBtZW1vaXplKChzdHIpID0+IHN0ci5yZXBsYWNlKGh5cGhlbmF0ZVJlLCAnLSQxJykudG9Mb3dlckNhc2UoKSk7XG5cbmNvbnN0IGNhbWVsaXplUmUgPSAvLShcXHcpL2c7XG5cbmV4cG9ydCBjb25zdCBjYW1lbGl6ZSA9IG1lbW9pemUoKHN0cikgPT5cbiAgICAoc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpKS5yZXBsYWNlKGNhbWVsaXplUmUsIChfLCBjKSA9PiBjLnRvVXBwZXJDYXNlKCkpXG4pO1xuXG5leHBvcnQgY29uc3QgdWNmaXJzdCA9IG1lbW9pemUoKHN0cikgPT4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyLCBzZWFyY2gpIHtcbiAgICByZXR1cm4gc3RyPy5zdGFydHNXaXRoPy4oc2VhcmNoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuZHNXaXRoKHN0ciwgc2VhcmNoKSB7XG4gICAgcmV0dXJuIHN0cj8uZW5kc1dpdGg/LihzZWFyY2gpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXMob2JqLCBzZWFyY2gpIHtcbiAgICByZXR1cm4gb2JqPy5pbmNsdWRlcz8uKHNlYXJjaCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBhcnJheT8uZmluZEluZGV4Py4ocHJlZGljYXRlKTtcbn1cblxuZXhwb3J0IGNvbnN0IHsgaXNBcnJheSwgZnJvbTogdG9BcnJheSB9ID0gQXJyYXk7XG5leHBvcnQgY29uc3QgeyBhc3NpZ24gfSA9IE9iamVjdDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2luZG93KG9iaikge1xuICAgIHJldHVybiBpc09iamVjdChvYmopICYmIG9iaiA9PT0gb2JqLndpbmRvdztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRG9jdW1lbnQob2JqKSB7XG4gICAgcmV0dXJuIG5vZGVUeXBlKG9iaikgPT09IDk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGUob2JqKSB7XG4gICAgcmV0dXJuIG5vZGVUeXBlKG9iaikgPj0gMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudChvYmopIHtcbiAgICByZXR1cm4gbm9kZVR5cGUob2JqKSA9PT0gMTtcbn1cblxuZnVuY3Rpb24gbm9kZVR5cGUob2JqKSB7XG4gICAgcmV0dXJuICFpc1dpbmRvdyhvYmopICYmIGlzT2JqZWN0KG9iaikgJiYgb2JqLm5vZGVUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWModmFsdWUpIHtcbiAgICByZXR1cm4gaXNOdW1iZXIodmFsdWUpIHx8IChpc1N0cmluZyh2YWx1ZSkgJiYgIWlzTmFOKHZhbHVlIC0gcGFyc2VGbG9hdCh2YWx1ZSkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gICAgcmV0dXJuICEoaXNBcnJheShvYmopID8gb2JqLmxlbmd0aCA6IGlzT2JqZWN0KG9iaikgPyBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA6IGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB2b2lkIDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0Jvb2xlYW4odmFsdWUpIHtcbiAgICByZXR1cm4gaXNCb29sZWFuKHZhbHVlKVxuICAgICAgICA/IHZhbHVlXG4gICAgICAgIDogdmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJzEnIHx8IHZhbHVlID09PSAnJ1xuICAgICAgICA/IHRydWVcbiAgICAgICAgOiB2YWx1ZSA9PT0gJ2ZhbHNlJyB8fCB2YWx1ZSA9PT0gJzAnXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gICAgY29uc3QgbnVtYmVyID0gTnVtYmVyKHZhbHVlKTtcbiAgICByZXR1cm4gaXNOYU4obnVtYmVyKSA/IGZhbHNlIDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9GbG9hdCh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKSB8fCAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Ob2RlKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gdG9Ob2RlcyhlbGVtZW50KVswXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvTm9kZXMoZWxlbWVudCkge1xuICAgIHJldHVybiBpc05vZGUoZWxlbWVudCkgPyBbZWxlbWVudF0gOiBBcnJheS5mcm9tKGVsZW1lbnQgfHwgW10pLmZpbHRlcihpc05vZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9XaW5kb3coZWxlbWVudCkge1xuICAgIGlmIChpc1dpbmRvdyhlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBlbGVtZW50ID0gdG9Ob2RlKGVsZW1lbnQpO1xuICAgIGNvbnN0IGRvY3VtZW50ID0gaXNEb2N1bWVudChlbGVtZW50KSA/IGVsZW1lbnQgOiBlbGVtZW50Py5vd25lckRvY3VtZW50O1xuXG4gICAgcmV0dXJuIGRvY3VtZW50Py5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VxdWFsKHZhbHVlLCBvdGhlcikge1xuICAgIHJldHVybiAoXG4gICAgICAgIHZhbHVlID09PSBvdGhlciB8fFxuICAgICAgICAoaXNPYmplY3QodmFsdWUpICYmXG4gICAgICAgICAgICBpc09iamVjdChvdGhlcikgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IE9iamVjdC5rZXlzKG90aGVyKS5sZW5ndGggJiZcbiAgICAgICAgICAgIGVhY2godmFsdWUsICh2YWwsIGtleSkgPT4gdmFsID09PSBvdGhlcltrZXldKSlcbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3dhcCh2YWx1ZSwgYSwgYikge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7YX18JHtifWAsICdnJyksIChtYXRjaCkgPT4gKG1hdGNoID09PSBhID8gYiA6IGEpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgICByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlYWNoKG9iaiwgY2IpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKGZhbHNlID09PSBjYihvYmpba2V5XSwga2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydEJ5KGFycmF5LCBwcm9wKSB7XG4gICAgcmV0dXJuIGFycmF5XG4gICAgICAgIC5zbGljZSgpXG4gICAgICAgIC5zb3J0KCh7IFtwcm9wXTogcHJvcEEgPSAwIH0sIHsgW3Byb3BdOiBwcm9wQiA9IDAgfSkgPT5cbiAgICAgICAgICAgIHByb3BBID4gcHJvcEIgPyAxIDogcHJvcEIgPiBwcm9wQSA/IC0xIDogMFxuICAgICAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VtQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgcmV0dXJuIGFycmF5LnJlZHVjZShcbiAgICAgICAgKHN1bSwgaXRlbSkgPT4gc3VtICsgdG9GbG9hdChpc0Z1bmN0aW9uKGl0ZXJhdGVlKSA/IGl0ZXJhdGVlKGl0ZW0pIDogaXRlbVtpdGVyYXRlZV0pLFxuICAgICAgICAwXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZUJ5KGFycmF5LCBwcm9wKSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKTtcbiAgICByZXR1cm4gYXJyYXkuZmlsdGVyKCh7IFtwcm9wXTogY2hlY2sgfSkgPT4gKHNlZW4uaGFzKGNoZWNrKSA/IGZhbHNlIDogc2Vlbi5hZGQoY2hlY2spKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaWNrKG9iaiwgcHJvcHMpIHtcbiAgICByZXR1cm4gcHJvcHMucmVkdWNlKChyZXMsIHByb3ApID0+ICh7IC4uLnJlcywgW3Byb3BdOiBvYmpbcHJvcF0gfSksIHt9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wKG51bWJlciwgbWluID0gMCwgbWF4ID0gMSkge1xuICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh0b051bWJlcihudW1iZXIpIHx8IDAsIG1pbiksIG1heCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge31cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdFJlY3QoLi4ucmVjdHMpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBbJ2JvdHRvbScsICd0b3AnXSxcbiAgICAgICAgWydyaWdodCcsICdsZWZ0J10sXG4gICAgXS5ldmVyeShcbiAgICAgICAgKFttaW5Qcm9wLCBtYXhQcm9wXSkgPT5cbiAgICAgICAgICAgIE1hdGgubWluKC4uLnJlY3RzLm1hcCgoeyBbbWluUHJvcF06IG1pbiB9KSA9PiBtaW4pKSAtXG4gICAgICAgICAgICAgICAgTWF0aC5tYXgoLi4ucmVjdHMubWFwKCh7IFttYXhQcm9wXTogbWF4IH0pID0+IG1heCkpID5cbiAgICAgICAgICAgIDBcbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnRJblJlY3QocG9pbnQsIHJlY3QpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBwb2ludC54IDw9IHJlY3QucmlnaHQgJiZcbiAgICAgICAgcG9pbnQueCA+PSByZWN0LmxlZnQgJiZcbiAgICAgICAgcG9pbnQueSA8PSByZWN0LmJvdHRvbSAmJlxuICAgICAgICBwb2ludC55ID49IHJlY3QudG9wXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gcmF0aW8oZGltZW5zaW9ucywgcHJvcCwgdmFsdWUpIHtcbiAgICBjb25zdCBhUHJvcCA9IHByb3AgPT09ICd3aWR0aCcgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBbYVByb3BdOiBkaW1lbnNpb25zW3Byb3BdXG4gICAgICAgICAgICA/IE1hdGgucm91bmQoKHZhbHVlICogZGltZW5zaW9uc1thUHJvcF0pIC8gZGltZW5zaW9uc1twcm9wXSlcbiAgICAgICAgICAgIDogZGltZW5zaW9uc1thUHJvcF0sXG4gICAgICAgIFtwcm9wXTogdmFsdWUsXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY29udGFpbihkaW1lbnNpb25zLCBtYXhEaW1lbnNpb25zKSB7XG4gICAgZGltZW5zaW9ucyA9IHsgLi4uZGltZW5zaW9ucyB9O1xuXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGRpbWVuc2lvbnMpIHtcbiAgICAgICAgZGltZW5zaW9ucyA9XG4gICAgICAgICAgICBkaW1lbnNpb25zW3Byb3BdID4gbWF4RGltZW5zaW9uc1twcm9wXVxuICAgICAgICAgICAgICAgID8gcmF0aW8oZGltZW5zaW9ucywgcHJvcCwgbWF4RGltZW5zaW9uc1twcm9wXSlcbiAgICAgICAgICAgICAgICA6IGRpbWVuc2lvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpbWVuc2lvbnM7XG59XG5cbmZ1bmN0aW9uIGNvdmVyKGRpbWVuc2lvbnMsIG1heERpbWVuc2lvbnMpIHtcbiAgICBkaW1lbnNpb25zID0gY29udGFpbihkaW1lbnNpb25zLCBtYXhEaW1lbnNpb25zKTtcblxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBkaW1lbnNpb25zKSB7XG4gICAgICAgIGRpbWVuc2lvbnMgPVxuICAgICAgICAgICAgZGltZW5zaW9uc1twcm9wXSA8IG1heERpbWVuc2lvbnNbcHJvcF1cbiAgICAgICAgICAgICAgICA/IHJhdGlvKGRpbWVuc2lvbnMsIHByb3AsIG1heERpbWVuc2lvbnNbcHJvcF0pXG4gICAgICAgICAgICAgICAgOiBkaW1lbnNpb25zO1xuICAgIH1cblxuICAgIHJldHVybiBkaW1lbnNpb25zO1xufVxuXG5leHBvcnQgY29uc3QgRGltZW5zaW9ucyA9IHsgcmF0aW8sIGNvbnRhaW4sIGNvdmVyIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbmRleChpLCBlbGVtZW50cywgY3VycmVudCA9IDAsIGZpbml0ZSA9IGZhbHNlKSB7XG4gICAgZWxlbWVudHMgPSB0b05vZGVzKGVsZW1lbnRzKTtcblxuICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBlbGVtZW50cztcblxuICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBpID0gaXNOdW1lcmljKGkpXG4gICAgICAgID8gdG9OdW1iZXIoaSlcbiAgICAgICAgOiBpID09PSAnbmV4dCdcbiAgICAgICAgPyBjdXJyZW50ICsgMVxuICAgICAgICA6IGkgPT09ICdwcmV2aW91cydcbiAgICAgICAgPyBjdXJyZW50IC0gMVxuICAgICAgICA6IGkgPT09ICdsYXN0J1xuICAgICAgICA/IGxlbmd0aCAtIDFcbiAgICAgICAgOiBlbGVtZW50cy5pbmRleE9mKHRvTm9kZShpKSk7XG5cbiAgICBpZiAoZmluaXRlKSB7XG4gICAgICAgIHJldHVybiBjbGFtcChpLCAwLCBsZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBpICU9IGxlbmd0aDtcblxuICAgIHJldHVybiBpIDwgMCA/IGkgKyBsZW5ndGggOiBpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICAgIGNvbnN0IGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICByZXR1cm4gKGtleSkgPT4gY2FjaGVba2V5XSB8fCAoY2FjaGVba2V5XSA9IGZuKGtleSkpO1xufVxuXG5leHBvcnQgY2xhc3MgRGVmZXJyZWQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0LCBpc1VuZGVmaW5lZCwgdG9Ob2RlLCB0b05vZGVzIH0gZnJvbSAnLi9sYW5nJztcblxuZXhwb3J0IGZ1bmN0aW9uIGF0dHIoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcbiAgICBpZiAoaXNPYmplY3QobmFtZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZSkge1xuICAgICAgICAgICAgYXR0cihlbGVtZW50LCBrZXksIG5hbWVba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRvTm9kZShlbGVtZW50KT8uZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgZWwgb2YgdG9Ob2RlcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKGVsLCBhdHRyKGVsLCBuYW1lKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUF0dHIoZWwsIG5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzQXR0cihlbGVtZW50LCBuYW1lKSB7XG4gICAgcmV0dXJuIHRvTm9kZXMoZWxlbWVudCkuc29tZSgoZWxlbWVudCkgPT4gZWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQXR0cihlbGVtZW50LCBuYW1lKSB7XG4gICAgdG9Ob2RlcyhlbGVtZW50KS5mb3JFYWNoKChlbGVtZW50KSA9PiBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhKGVsZW1lbnQsIGF0dHJpYnV0ZSkge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBbYXR0cmlidXRlLCBgZGF0YS0ke2F0dHJpYnV0ZX1gXSkge1xuICAgICAgICBpZiAoaGFzQXR0cihlbGVtZW50LCBuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIGF0dHIoZWxlbWVudCwgbmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpc0VsZW1lbnQsIGlzU3RyaW5nLCBzdGFydHNXaXRoLCB0b0FycmF5LCB0b05vZGUsIHRvTm9kZXMgfSBmcm9tICcuL2xhbmcnO1xuXG5jb25zdCB2b2lkRWxlbWVudHMgPSB7XG4gICAgYXJlYTogdHJ1ZSxcbiAgICBiYXNlOiB0cnVlLFxuICAgIGJyOiB0cnVlLFxuICAgIGNvbDogdHJ1ZSxcbiAgICBlbWJlZDogdHJ1ZSxcbiAgICBocjogdHJ1ZSxcbiAgICBpbWc6IHRydWUsXG4gICAgaW5wdXQ6IHRydWUsXG4gICAga2V5Z2VuOiB0cnVlLFxuICAgIGxpbms6IHRydWUsXG4gICAgbWV0YTogdHJ1ZSxcbiAgICBwYXJhbTogdHJ1ZSxcbiAgICBzb3VyY2U6IHRydWUsXG4gICAgdHJhY2s6IHRydWUsXG4gICAgd2JyOiB0cnVlLFxufTtcbmV4cG9ydCBmdW5jdGlvbiBpc1ZvaWRFbGVtZW50KGVsZW1lbnQpIHtcbiAgICByZXR1cm4gdG9Ob2RlcyhlbGVtZW50KS5zb21lKChlbGVtZW50KSA9PiB2b2lkRWxlbWVudHNbZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCldKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlzaWJsZShlbGVtZW50KSB7XG4gICAgcmV0dXJuIHRvTm9kZXMoZWxlbWVudCkuc29tZShcbiAgICAgICAgKGVsZW1lbnQpID0+IGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgZWxlbWVudC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aFxuICAgICk7XG59XG5cbmV4cG9ydCBjb25zdCBzZWxJbnB1dCA9ICdpbnB1dCxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uJztcbmV4cG9ydCBmdW5jdGlvbiBpc0lucHV0KGVsZW1lbnQpIHtcbiAgICByZXR1cm4gdG9Ob2RlcyhlbGVtZW50KS5zb21lKChlbGVtZW50KSA9PiBtYXRjaGVzKGVsZW1lbnQsIHNlbElucHV0KSk7XG59XG5cbmV4cG9ydCBjb25zdCBzZWxGb2N1c2FibGUgPSBgJHtzZWxJbnB1dH0sYVtocmVmXSxbdGFiaW5kZXhdYDtcbmV4cG9ydCBmdW5jdGlvbiBpc0ZvY3VzYWJsZShlbGVtZW50KSB7XG4gICAgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCwgc2VsRm9jdXNhYmxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmVudChlbGVtZW50KSB7XG4gICAgcmV0dXJuIHRvTm9kZShlbGVtZW50KT8ucGFyZW50RWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiB0b05vZGVzKGVsZW1lbnQpLmZpbHRlcigoZWxlbWVudCkgPT4gbWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hlcyhlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiB0b05vZGVzKGVsZW1lbnQpLnNvbWUoKGVsZW1lbnQpID0+IGVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VzdChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBpc0VsZW1lbnQoZWxlbWVudClcbiAgICAgICAgPyBlbGVtZW50LmNsb3Nlc3Qoc3RhcnRzV2l0aChzZWxlY3RvciwgJz4nKSA/IHNlbGVjdG9yLnNsaWNlKDEpIDogc2VsZWN0b3IpXG4gICAgICAgIDogdG9Ob2RlcyhlbGVtZW50KVxuICAgICAgICAgICAgICAubWFwKChlbGVtZW50KSA9PiBjbG9zZXN0KGVsZW1lbnQsIHNlbGVjdG9yKSlcbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBpc1N0cmluZyhzZWxlY3RvcilcbiAgICAgICAgPyAhIWNsb3Nlc3QoZWxlbWVudCwgc2VsZWN0b3IpXG4gICAgICAgIDogdG9Ob2RlKHNlbGVjdG9yKS5jb250YWlucyh0b05vZGUoZWxlbWVudCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyZW50cyhlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gW107XG5cbiAgICB3aGlsZSAoKGVsZW1lbnQgPSBwYXJlbnQoZWxlbWVudCkpKSB7XG4gICAgICAgIGlmICghc2VsZWN0b3IgfHwgbWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvcikpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGlsZHJlbihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGVsZW1lbnQgPSB0b05vZGUoZWxlbWVudCk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBlbGVtZW50ID8gdG9BcnJheShlbGVtZW50LmNoaWxkcmVuKSA6IFtdO1xuICAgIHJldHVybiBzZWxlY3RvciA/IGZpbHRlcihjaGlsZHJlbiwgc2VsZWN0b3IpIDogY2hpbGRyZW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleChlbGVtZW50LCByZWYpIHtcbiAgICByZXR1cm4gcmVmID8gdG9Ob2RlcyhlbGVtZW50KS5pbmRleE9mKHRvTm9kZShyZWYpKSA6IGNoaWxkcmVuKHBhcmVudChlbGVtZW50KSkuaW5kZXhPZihlbGVtZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZVNpdGVBbmNob3IoZWwpIHtcbiAgICBlbCA9IHRvTm9kZShlbCk7XG4gICAgcmV0dXJuIGVsICYmIFsnb3JpZ2luJywgJ3BhdGhuYW1lJywgJ3NlYXJjaCddLmV2ZXJ5KChwYXJ0KSA9PiBlbFtwYXJ0XSA9PT0gbG9jYXRpb25bcGFydF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0ZWRFbGVtZW50KGVsKSB7XG4gICAgaWYgKGlzU2FtZVNpdGVBbmNob3IoZWwpKSB7XG4gICAgICAgIGVsID0gdG9Ob2RlKGVsKTtcbiAgICAgICAgY29uc3QgaWQgPSBkZWNvZGVVUklDb21wb25lbnQoZWwuaGFzaCkuc3Vic3RyaW5nKDEpO1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGlkKVswXTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBhdHRyIH0gZnJvbSAnLi9hdHRyJztcbmltcG9ydCB7IGNsb3Nlc3QsIGluZGV4LCBtYXRjaGVzLCBwYXJlbnQgfSBmcm9tICcuL2ZpbHRlcic7XG5pbXBvcnQgeyBpc0RvY3VtZW50LCBpc1N0cmluZywgbWVtb2l6ZSwgdG9Ob2RlLCB0b05vZGVzIH0gZnJvbSAnLi9sYW5nJztcblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5KHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGZpbmQoc2VsZWN0b3IsIGdldENvbnRleHQoc2VsZWN0b3IsIGNvbnRleHQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QWxsKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGZpbmRBbGwoc2VsZWN0b3IsIGdldENvbnRleHQoc2VsZWN0b3IsIGNvbnRleHQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmQoc2VsZWN0b3IsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gdG9Ob2RlKF9xdWVyeShzZWxlY3RvciwgdG9Ob2RlKGNvbnRleHQpLCAncXVlcnlTZWxlY3RvcicpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRBbGwoc2VsZWN0b3IsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gdG9Ob2RlcyhfcXVlcnkoc2VsZWN0b3IsIHRvTm9kZShjb250ZXh0KSwgJ3F1ZXJ5U2VsZWN0b3JBbGwnKSk7XG59XG5cbmNvbnN0IGNvbnRleHRTZWxlY3RvclJlID0gLyhefFteXFxcXF0sKVxccypbIT4rfi1dLztcbmNvbnN0IGlzQ29udGV4dFNlbGVjdG9yID0gbWVtb2l6ZSgoc2VsZWN0b3IpID0+IHNlbGVjdG9yLm1hdGNoKGNvbnRleHRTZWxlY3RvclJlKSk7XG5cbmZ1bmN0aW9uIGdldENvbnRleHQoc2VsZWN0b3IsIGNvbnRleHQgPSBkb2N1bWVudCkge1xuICAgIHJldHVybiAoaXNTdHJpbmcoc2VsZWN0b3IpICYmIGlzQ29udGV4dFNlbGVjdG9yKHNlbGVjdG9yKSkgfHwgaXNEb2N1bWVudChjb250ZXh0KVxuICAgICAgICA/IGNvbnRleHRcbiAgICAgICAgOiBjb250ZXh0Lm93bmVyRG9jdW1lbnQ7XG59XG5cbmNvbnN0IGNvbnRleHRTYW5pdGl6ZVJlID0gLyhbIT4rfi1dKSg/PVxccytbIT4rfi1dfFxccyokKS9nO1xuY29uc3Qgc2FuYXRpemUgPSBtZW1vaXplKChzZWxlY3RvcikgPT4gc2VsZWN0b3IucmVwbGFjZShjb250ZXh0U2FuaXRpemVSZSwgJyQxIConKSk7XG5cbmZ1bmN0aW9uIF9xdWVyeShzZWxlY3RvciwgY29udGV4dCA9IGRvY3VtZW50LCBxdWVyeUZuKSB7XG4gICAgaWYgKCFzZWxlY3RvciB8fCAhaXNTdHJpbmcoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICB9XG5cbiAgICBzZWxlY3RvciA9IHNhbmF0aXplKHNlbGVjdG9yKTtcblxuICAgIGlmIChpc0NvbnRleHRTZWxlY3RvcihzZWxlY3RvcikpIHtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBzcGxpdFNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgc2VsZWN0b3IgPSAnJztcbiAgICAgICAgZm9yIChsZXQgc2VsIG9mIHNwbGl0KSB7XG4gICAgICAgICAgICBsZXQgY3R4ID0gY29udGV4dDtcblxuICAgICAgICAgICAgaWYgKHNlbFswXSA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0b3JzID0gc2VsLnN1YnN0cigxKS50cmltKCkuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgICAgICBjdHggPSBjbG9zZXN0KHBhcmVudChjb250ZXh0KSwgc2VsZWN0b3JzWzBdKTtcbiAgICAgICAgICAgICAgICBzZWwgPSBzZWxlY3RvcnMuc2xpY2UoMSkuam9pbignICcpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNlbC5sZW5ndGggJiYgc3BsaXQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsWzBdID09PSAnLScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RvcnMgPSBzZWwuc3Vic3RyKDEpLnRyaW0oKS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSAoY3R4IHx8IGNvbnRleHQpLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgY3R4ID0gbWF0Y2hlcyhwcmV2LCBzZWwuc3Vic3RyKDEpKSA/IHByZXYgOiBudWxsO1xuICAgICAgICAgICAgICAgIHNlbCA9IHNlbGVjdG9ycy5zbGljZSgxKS5qb2luKCcgJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RvciArPSBgJHtzZWxlY3RvciA/ICcsJyA6ICcnfSR7ZG9tUGF0aChjdHgpfSAke3NlbH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dCA9IGRvY3VtZW50O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0W3F1ZXJ5Rm5dKHNlbGVjdG9yKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxuY29uc3Qgc2VsZWN0b3JSZSA9IC8uKj9bXlxcXFxdKD86LHwkKS9nO1xuXG5jb25zdCBzcGxpdFNlbGVjdG9yID0gbWVtb2l6ZSgoc2VsZWN0b3IpID0+XG4gICAgc2VsZWN0b3IubWF0Y2goc2VsZWN0b3JSZSkubWFwKChzZWxlY3RvcikgPT4gc2VsZWN0b3IucmVwbGFjZSgvLCQvLCAnJykudHJpbSgpKVxuKTtcblxuZnVuY3Rpb24gZG9tUGF0aChlbGVtZW50KSB7XG4gICAgY29uc3QgbmFtZXMgPSBbXTtcbiAgICB3aGlsZSAoZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgIGNvbnN0IGlkID0gYXR0cihlbGVtZW50LCAnaWQnKTtcbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBuYW1lcy51bnNoaWZ0KGAjJHtlc2NhcGUoaWQpfWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgeyB0YWdOYW1lIH0gPSBlbGVtZW50O1xuICAgICAgICAgICAgaWYgKHRhZ05hbWUgIT09ICdIVE1MJykge1xuICAgICAgICAgICAgICAgIHRhZ05hbWUgKz0gYDpudGgtY2hpbGQoJHtpbmRleChlbGVtZW50KSArIDF9KWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuYW1lcy51bnNoaWZ0KHRhZ05hbWUpO1xuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmFtZXMuam9pbignID4gJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGUoY3NzKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKGNzcykgPyBDU1MuZXNjYXBlKGNzcykgOiAnJztcbn1cbiIsImltcG9ydCB7IGZpbmRBbGwgfSBmcm9tICcuL3NlbGVjdG9yJztcbmltcG9ydCB7IGNsb3Nlc3QsIHdpdGhpbiB9IGZyb20gJy4vZmlsdGVyJztcbmltcG9ydCB7IGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCB0b05vZGUsIHRvTm9kZXMgfSBmcm9tICcuL2xhbmcnO1xuXG5leHBvcnQgZnVuY3Rpb24gb24oLi4uYXJncykge1xuICAgIGxldCBbdGFyZ2V0cywgdHlwZXMsIHNlbGVjdG9yLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSA9IGZhbHNlXSA9IGdldEFyZ3MoYXJncyk7XG5cbiAgICBpZiAobGlzdGVuZXIubGVuZ3RoID4gMSkge1xuICAgICAgICBsaXN0ZW5lciA9IGRldGFpbChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgaWYgKHVzZUNhcHR1cmU/LnNlbGYpIHtcbiAgICAgICAgbGlzdGVuZXIgPSBzZWxmRmlsdGVyKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgbGlzdGVuZXIgPSBkZWxlZ2F0ZShzZWxlY3RvciwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4gb2ZmKHRhcmdldHMsIHR5cGVzLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvZmYoLi4uYXJncykge1xuICAgIGxldCBbdGFyZ2V0cywgdHlwZXMsICwgbGlzdGVuZXIsIHVzZUNhcHR1cmUgPSBmYWxzZV0gPSBnZXRBcmdzKGFyZ3MpO1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbmNlKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbZWxlbWVudCwgdHlwZXMsIHNlbGVjdG9yLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSA9IGZhbHNlLCBjb25kaXRpb25dID0gZ2V0QXJncyhhcmdzKTtcbiAgICBjb25zdCBvZmYgPSBvbihcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgdHlwZXMsXG4gICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAoZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gIWNvbmRpdGlvbiB8fCBjb25kaXRpb24oZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgb2ZmKCk7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIoZSwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXNlQ2FwdHVyZVxuICAgICk7XG5cbiAgICByZXR1cm4gb2ZmO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlcih0YXJnZXRzLCBldmVudCwgZGV0YWlsKSB7XG4gICAgcmV0dXJuIHRvRXZlbnRUYXJnZXRzKHRhcmdldHMpLmV2ZXJ5KCh0YXJnZXQpID0+XG4gICAgICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50KGNyZWF0ZUV2ZW50KGV2ZW50LCB0cnVlLCB0cnVlLCBkZXRhaWwpKVxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFdmVudChlLCBidWJibGVzID0gdHJ1ZSwgY2FuY2VsYWJsZSA9IGZhbHNlLCBkZXRhaWwpIHtcbiAgICBpZiAoaXNTdHJpbmcoZSkpIHtcbiAgICAgICAgZSA9IG5ldyBDdXN0b21FdmVudChlLCB7IGJ1YmJsZXMsIGNhbmNlbGFibGUsIGRldGFpbCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZTtcbn1cblxuZnVuY3Rpb24gZ2V0QXJncyhhcmdzKSB7XG4gICAgLy8gRXZlbnQgdGFyZ2V0c1xuICAgIGFyZ3NbMF0gPSB0b0V2ZW50VGFyZ2V0cyhhcmdzWzBdKTtcblxuICAgIC8vIEV2ZW50IHR5cGVzXG4gICAgaWYgKGlzU3RyaW5nKGFyZ3NbMV0pKSB7XG4gICAgICAgIGFyZ3NbMV0gPSBhcmdzWzFdLnNwbGl0KCcgJyk7XG4gICAgfVxuXG4gICAgLy8gRGVsZWdhdGU/XG4gICAgaWYgKGlzRnVuY3Rpb24oYXJnc1syXSkpIHtcbiAgICAgICAgYXJncy5zcGxpY2UoMiwgMCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzO1xufVxuXG5mdW5jdGlvbiBkZWxlZ2F0ZShzZWxlY3RvciwgbGlzdGVuZXIpIHtcbiAgICByZXR1cm4gKGUpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9XG4gICAgICAgICAgICBzZWxlY3RvclswXSA9PT0gJz4nXG4gICAgICAgICAgICAgICAgPyBmaW5kQWxsKHNlbGVjdG9yLCBlLmN1cnJlbnRUYXJnZXQpXG4gICAgICAgICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGVsZW1lbnQpID0+IHdpdGhpbihlLnRhcmdldCwgZWxlbWVudCkpWzBdXG4gICAgICAgICAgICAgICAgOiBjbG9zZXN0KGUudGFyZ2V0LCBzZWxlY3Rvcik7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGUuY3VycmVudCA9IGN1cnJlbnQ7XG4gICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGUpO1xuICAgICAgICAgICAgZGVsZXRlIGUuY3VycmVudDtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGRldGFpbChsaXN0ZW5lcikge1xuICAgIHJldHVybiAoZSkgPT4gKGlzQXJyYXkoZS5kZXRhaWwpID8gbGlzdGVuZXIoZSwgLi4uZS5kZXRhaWwpIDogbGlzdGVuZXIoZSkpO1xufVxuXG5mdW5jdGlvbiBzZWxmRmlsdGVyKGxpc3RlbmVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChlLnRhcmdldCA9PT0gZS5jdXJyZW50VGFyZ2V0IHx8IGUudGFyZ2V0ID09PSBlLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lci5jYWxsKG51bGwsIGUpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaXNFdmVudFRhcmdldCh0YXJnZXQpIHtcbiAgICByZXR1cm4gdGFyZ2V0ICYmICdhZGRFdmVudExpc3RlbmVyJyBpbiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIHRvRXZlbnRUYXJnZXQodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGlzRXZlbnRUYXJnZXQodGFyZ2V0KSA/IHRhcmdldCA6IHRvTm9kZSh0YXJnZXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9FdmVudFRhcmdldHModGFyZ2V0KSB7XG4gICAgcmV0dXJuIGlzQXJyYXkodGFyZ2V0KVxuICAgICAgICA/IHRhcmdldC5tYXAodG9FdmVudFRhcmdldCkuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIDogaXNTdHJpbmcodGFyZ2V0KVxuICAgICAgICA/IGZpbmRBbGwodGFyZ2V0KVxuICAgICAgICA6IGlzRXZlbnRUYXJnZXQodGFyZ2V0KVxuICAgICAgICA/IFt0YXJnZXRdXG4gICAgICAgIDogdG9Ob2Rlcyh0YXJnZXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUb3VjaChlKSB7XG4gICAgcmV0dXJuIGUucG9pbnRlclR5cGUgPT09ICd0b3VjaCcgfHwgISFlLnRvdWNoZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFdmVudFBvcyhlKSB7XG4gICAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0gPSBlLnRvdWNoZXM/LlswXSB8fCBlLmNoYW5nZWRUb3VjaGVzPy5bMF0gfHwgZTtcblxuICAgIHJldHVybiB7IHgsIHkgfTtcbn1cbiIsImltcG9ydCB7XG4gICAgZWFjaCxcbiAgICBoeXBoZW5hdGUsXG4gICAgaXNBcnJheSxcbiAgICBpc051bWJlcixcbiAgICBpc051bWVyaWMsXG4gICAgaXNPYmplY3QsXG4gICAgaXNTdHJpbmcsXG4gICAgaXNVbmRlZmluZWQsXG4gICAgbWVtb2l6ZSxcbiAgICBzdGFydHNXaXRoLFxuICAgIHRvTm9kZXMsXG59IGZyb20gJy4vbGFuZyc7XG5cbmNvbnN0IGNzc051bWJlciA9IHtcbiAgICAnYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCc6IHRydWUsXG4gICAgJ2NvbHVtbi1jb3VudCc6IHRydWUsXG4gICAgJ2ZpbGwtb3BhY2l0eSc6IHRydWUsXG4gICAgJ2ZsZXgtZ3Jvdyc6IHRydWUsXG4gICAgJ2ZsZXgtc2hyaW5rJzogdHJ1ZSxcbiAgICAnZm9udC13ZWlnaHQnOiB0cnVlLFxuICAgICdsaW5lLWhlaWdodCc6IHRydWUsXG4gICAgb3BhY2l0eTogdHJ1ZSxcbiAgICBvcmRlcjogdHJ1ZSxcbiAgICBvcnBoYW5zOiB0cnVlLFxuICAgICdzdHJva2UtZGFzaGFycmF5JzogdHJ1ZSxcbiAgICAnc3Ryb2tlLWRhc2hvZmZzZXQnOiB0cnVlLFxuICAgIHdpZG93czogdHJ1ZSxcbiAgICAnei1pbmRleCc6IHRydWUsXG4gICAgem9vbTogdHJ1ZSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjc3MoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCBwcmlvcml0eSkge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gdG9Ob2RlcyhlbGVtZW50KTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wTmFtZShwcm9wZXJ0eSk7XG5cbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgIGlzTnVtZXJpYyh2YWx1ZSkgJiYgIWNzc051bWJlcltwcm9wZXJ0eV1cbiAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7dmFsdWV9cHhgXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHZhbHVlIHx8IGlzTnVtYmVyKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkocHJvcGVydHkpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgcHJvcHNbcHJvcF0gPSBjc3MoZWxlbWVudCwgcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QocHJvcGVydHkpKSB7XG4gICAgICAgICAgICBwcmlvcml0eSA9IHZhbHVlO1xuICAgICAgICAgICAgZWFjaChwcm9wZXJ0eSwgKHZhbHVlLCBwcm9wZXJ0eSkgPT4gY3NzKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSwgcHJpb3JpdHkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudHNbMF07XG59XG5cbi8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jZG9tLWNzc3N0eWxlZGVjbGFyYXRpb24tc2V0cHJvcGVydHlcbmV4cG9ydCBjb25zdCBwcm9wTmFtZSA9IG1lbW9pemUoKG5hbWUpID0+IHZlbmRvclByb3BOYW1lKG5hbWUpKTtcblxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUobmFtZSkge1xuICAgIGlmIChzdGFydHNXaXRoKG5hbWUsICctLScpKSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cblxuICAgIG5hbWUgPSBoeXBoZW5hdGUobmFtZSk7XG5cbiAgICBjb25zdCB7IHN0eWxlIH0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICBpZiAobmFtZSBpbiBzdHlsZSkge1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHByZWZpeCBvZiBbJ3dlYmtpdCcsICdtb3onXSkge1xuICAgICAgICBjb25zdCBwcmVmaXhlZE5hbWUgPSBgLSR7cHJlZml4fS0ke25hbWV9YDtcbiAgICAgICAgaWYgKHByZWZpeGVkTmFtZSBpbiBzdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHByZWZpeGVkTmFtZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7IGF0dHIgfSBmcm9tICcuL2F0dHInO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQsIHRvTm9kZXMgfSBmcm9tICcuL2xhbmcnO1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCwgLi4uYXJncykge1xuICAgIGFwcGx5KGVsZW1lbnQsIGFyZ3MsICdhZGQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsZW1lbnQsIC4uLmFyZ3MpIHtcbiAgICBhcHBseShlbGVtZW50LCBhcmdzLCAncmVtb3ZlJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKGVsZW1lbnQsIGNscykge1xuICAgIGF0dHIoZWxlbWVudCwgJ2NsYXNzJywgKHZhbHVlKSA9PlxuICAgICAgICAodmFsdWUgfHwgJycpLnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXGIke2Nsc31cXFxcYlxcXFxzP2AsICdnJyksICcnKVxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQ2xhc3MoZWxlbWVudCwgLi4uYXJncykge1xuICAgIGFyZ3NbMF0gJiYgcmVtb3ZlQ2xhc3MoZWxlbWVudCwgYXJnc1swXSk7XG4gICAgYXJnc1sxXSAmJiBhZGRDbGFzcyhlbGVtZW50LCBhcmdzWzFdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0NsYXNzKGVsZW1lbnQsIGNscykge1xuICAgIFtjbHNdID0gZ2V0Q2xhc3NlcyhjbHMpO1xuICAgIHJldHVybiAhIWNscyAmJiB0b05vZGVzKGVsZW1lbnQpLnNvbWUoKG5vZGUpID0+IG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNscykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoZWxlbWVudCwgY2xzLCBmb3JjZSkge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBnZXRDbGFzc2VzKGNscyk7XG5cbiAgICBpZiAoIWlzVW5kZWZpbmVkKGZvcmNlKSkge1xuICAgICAgICBmb3JjZSA9ICEhZm9yY2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBub2RlIG9mIHRvTm9kZXMoZWxlbWVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBjbHMgb2YgY2xhc3Nlcykge1xuICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QudG9nZ2xlKGNscywgZm9yY2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhcHBseShlbGVtZW50LCBhcmdzLCBmbikge1xuICAgIGFyZ3MgPSBhcmdzLnJlZHVjZSgoYXJncywgYXJnKSA9PiBhcmdzLmNvbmNhdChnZXRDbGFzc2VzKGFyZykpLCBbXSk7XG5cbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdG9Ob2RlcyhlbGVtZW50KSkge1xuICAgICAgICBub2RlLmNsYXNzTGlzdFtmbl0oLi4uYXJncyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRDbGFzc2VzKHN0cikge1xuICAgIHJldHVybiBTdHJpbmcoc3RyKS5zcGxpdCgvWyAsXS8pLmZpbHRlcihCb29sZWFuKTtcbn1cbiIsImltcG9ydCB7IGF0dHIgfSBmcm9tICcuL2F0dHInO1xuaW1wb3J0IHsgb25jZSwgdHJpZ2dlciB9IGZyb20gJy4vZXZlbnQnO1xuaW1wb3J0IHsgY3NzLCBwcm9wTmFtZSB9IGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IHsgc3RhcnRzV2l0aCwgdG9Ob2RlcyB9IGZyb20gJy4vbGFuZyc7XG5pbXBvcnQgeyBhZGRDbGFzcywgaGFzQ2xhc3MsIHJlbW92ZUNsYXNzLCByZW1vdmVDbGFzc2VzIH0gZnJvbSAnLi9jbGFzcyc7XG5cbmZ1bmN0aW9uIHRyYW5zaXRpb24oZWxlbWVudCwgcHJvcHMsIGR1cmF0aW9uID0gNDAwLCB0aW1pbmcgPSAnbGluZWFyJykge1xuICAgIGR1cmF0aW9uID0gTWF0aC5yb3VuZChkdXJhdGlvbik7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICB0b05vZGVzKGVsZW1lbnQpLm1hcChcbiAgICAgICAgICAgIChlbGVtZW50KSA9PlxuICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNzcyhlbGVtZW50LCBuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3MoZWxlbWVudCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRyaWdnZXIoZWxlbWVudCwgJ3RyYW5zaXRpb25lbmQnKSwgZHVyYXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgIG9uY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zaXRpb25lbmQgdHJhbnNpdGlvbmNhbmNlbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICh7IHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ3VrLXRyYW5zaXRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3MoZWxlbWVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uUHJvcGVydHk6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb246ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICd0cmFuc2l0aW9uY2FuY2VsZWQnID8gcmVqZWN0KCkgOiByZXNvbHZlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgc2VsZjogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3MoZWxlbWVudCwgJ3VrLXRyYW5zaXRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgY3NzKGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25Qcm9wZXJ0eTogT2JqZWN0LmtleXMocHJvcHMpLm1hcChwcm9wTmFtZSkuam9pbignLCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uOiBgJHtkdXJhdGlvbn1tc2AsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246IHRpbWluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IFRyYW5zaXRpb24gPSB7XG4gICAgc3RhcnQ6IHRyYW5zaXRpb24sXG5cbiAgICBhc3luYyBzdG9wKGVsZW1lbnQpIHtcbiAgICAgICAgdHJpZ2dlcihlbGVtZW50LCAndHJhbnNpdGlvbmVuZCcpO1xuICAgICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsKGVsZW1lbnQpIHtcbiAgICAgICAgdHJpZ2dlcihlbGVtZW50LCAndHJhbnNpdGlvbmNhbmNlbGVkJyk7XG4gICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0sXG5cbiAgICBpblByb2dyZXNzKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGhhc0NsYXNzKGVsZW1lbnQsICd1ay10cmFuc2l0aW9uJyk7XG4gICAgfSxcbn07XG5cbmNvbnN0IGFuaW1hdGlvblByZWZpeCA9ICd1ay1hbmltYXRpb24tJztcblxuZnVuY3Rpb24gYW5pbWF0ZShlbGVtZW50LCBhbmltYXRpb24sIGR1cmF0aW9uID0gMjAwLCBvcmlnaW4sIG91dCkge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgdG9Ob2RlcyhlbGVtZW50KS5tYXAoXG4gICAgICAgICAgICAoZWxlbWVudCkgPT5cbiAgICAgICAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoZWxlbWVudCwgJ2FuaW1hdGlvbmNhbmNlbGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0cmlnZ2VyKGVsZW1lbnQsICdhbmltYXRpb25lbmQnKSwgZHVyYXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgIG9uY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2FuaW1hdGlvbmVuZCBhbmltYXRpb25jYW5jZWxlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAoeyB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gJ2FuaW1hdGlvbmNhbmNlbGVkJyA/IHJlamVjdCgpIDogcmVzb2x2ZShlbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcyhlbGVtZW50LCAnYW5pbWF0aW9uRHVyYXRpb24nLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3NlcyhlbGVtZW50LCBgJHthbmltYXRpb25QcmVmaXh9XFxcXFMqYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBzZWxmOiB0cnVlIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjc3MoZWxlbWVudCwgJ2FuaW1hdGlvbkR1cmF0aW9uJywgYCR7ZHVyYXRpb259bXNgKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3MoZWxlbWVudCwgYW5pbWF0aW9uLCBhbmltYXRpb25QcmVmaXggKyAob3V0ID8gJ2xlYXZlJyA6ICdlbnRlcicpKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRzV2l0aChhbmltYXRpb24sIGFuaW1hdGlvblByZWZpeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbiAmJiBhZGRDbGFzcyhlbGVtZW50LCBgdWstdHJhbnNmb3JtLW9yaWdpbi0ke29yaWdpbn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCAmJiBhZGRDbGFzcyhlbGVtZW50LCBgJHthbmltYXRpb25QcmVmaXh9cmV2ZXJzZWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICk7XG59XG5cbmNvbnN0IGluUHJvZ3Jlc3NSZSA9IG5ldyBSZWdFeHAoYCR7YW5pbWF0aW9uUHJlZml4fShlbnRlcnxsZWF2ZSlgKTtcblxuZXhwb3J0IGNvbnN0IEFuaW1hdGlvbiA9IHtcbiAgICBpbjogYW5pbWF0ZSxcblxuICAgIG91dChlbGVtZW50LCBhbmltYXRpb24sIGR1cmF0aW9uLCBvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIGFuaW1hdGUoZWxlbWVudCwgYW5pbWF0aW9uLCBkdXJhdGlvbiwgb3JpZ2luLCB0cnVlKTtcbiAgICB9LFxuXG4gICAgaW5Qcm9ncmVzcyhlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBpblByb2dyZXNzUmUudGVzdChhdHRyKGVsZW1lbnQsICdjbGFzcycpKTtcbiAgICB9LFxuXG4gICAgY2FuY2VsKGVsZW1lbnQpIHtcbiAgICAgICAgdHJpZ2dlcihlbGVtZW50LCAnYW5pbWF0aW9uY2FuY2VsZWQnKTtcbiAgICB9LFxufTtcbiIsImltcG9ydCB7IG9uY2UgfSBmcm9tICcuL2V2ZW50JztcbmltcG9ydCB7IHBhcmVudCB9IGZyb20gJy4vZmlsdGVyJztcbmltcG9ydCB7IGZpbmQsIGZpbmRBbGwgfSBmcm9tICcuL3NlbGVjdG9yJztcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNTdHJpbmcsIGlzVW5kZWZpbmVkLCBzdGFydHNXaXRoLCB0b0FycmF5LCB0b05vZGUsIHRvTm9kZXMgfSBmcm9tICcuL2xhbmcnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVhZHkoZm4pIHtcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgIGZuKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvbmNlKGRvY3VtZW50LCAnRE9NQ29udGVudExvYWRlZCcsIGZuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFnKGVsZW1lbnQsIC4uLnRhZ05hbWVzKSB7XG4gICAgcmV0dXJuIHRhZ05hbWVzLnNvbWUoKHRhZ05hbWUpID0+IGVsZW1lbnQ/LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUudG9Mb3dlckNhc2UoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eShlbGVtZW50KSB7XG4gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7XG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICByZXR1cm4gZWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh0bWwocGFyZW50LCBodG1sKSB7XG4gICAgcmV0dXJuIGlzVW5kZWZpbmVkKGh0bWwpID8gJChwYXJlbnQpLmlubmVySFRNTCA6IGFwcGVuZChlbXB0eShwYXJlbnQpLCBodG1sKTtcbn1cblxuZXhwb3J0IGNvbnN0IHByZXBlbmQgPSBhcHBseUZuKCdwcmVwZW5kJyk7XG5leHBvcnQgY29uc3QgYXBwZW5kID0gYXBwbHlGbignYXBwZW5kJyk7XG5leHBvcnQgY29uc3QgYmVmb3JlID0gYXBwbHlGbignYmVmb3JlJyk7XG5leHBvcnQgY29uc3QgYWZ0ZXIgPSBhcHBseUZuKCdhZnRlcicpO1xuXG5mdW5jdGlvbiBhcHBseUZuKGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZWYsIGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0b05vZGVzKGlzU3RyaW5nKGVsZW1lbnQpID8gZnJhZ21lbnQoZWxlbWVudCkgOiBlbGVtZW50KTtcbiAgICAgICAgJChyZWYpPy5bZm5dKC4uLm5vZGVzKTtcbiAgICAgICAgcmV0dXJuIHVud3JhcFNpbmdsZShub2Rlcyk7XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZShlbGVtZW50KSB7XG4gICAgdG9Ob2RlcyhlbGVtZW50KS5mb3JFYWNoKChlbGVtZW50KSA9PiBlbGVtZW50LnJlbW92ZSgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBBbGwoZWxlbWVudCwgc3RydWN0dXJlKSB7XG4gICAgc3RydWN0dXJlID0gdG9Ob2RlKGJlZm9yZShlbGVtZW50LCBzdHJ1Y3R1cmUpKTtcblxuICAgIHdoaWxlIChzdHJ1Y3R1cmUuZmlyc3RDaGlsZCkge1xuICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUuZmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBhcHBlbmQoc3RydWN0dXJlLCBlbGVtZW50KTtcblxuICAgIHJldHVybiBzdHJ1Y3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwSW5uZXIoZWxlbWVudCwgc3RydWN0dXJlKSB7XG4gICAgcmV0dXJuIHRvTm9kZXMoXG4gICAgICAgIHRvTm9kZXMoZWxlbWVudCkubWFwKChlbGVtZW50KSA9PlxuICAgICAgICAgICAgZWxlbWVudC5oYXNDaGlsZE5vZGVzKClcbiAgICAgICAgICAgICAgICA/IHdyYXBBbGwodG9BcnJheShlbGVtZW50LmNoaWxkTm9kZXMpLCBzdHJ1Y3R1cmUpXG4gICAgICAgICAgICAgICAgOiBhcHBlbmQoZWxlbWVudCwgc3RydWN0dXJlKVxuICAgICAgICApXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcChlbGVtZW50KSB7XG4gICAgdG9Ob2RlcyhlbGVtZW50KVxuICAgICAgICAubWFwKHBhcmVudClcbiAgICAgICAgLmZpbHRlcigodmFsdWUsIGluZGV4LCBzZWxmKSA9PiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleClcbiAgICAgICAgLmZvckVhY2goKHBhcmVudCkgPT4gcGFyZW50LnJlcGxhY2VXaXRoKC4uLnBhcmVudC5jaGlsZE5vZGVzKSk7XG59XG5cbmNvbnN0IGZyYWdtZW50UmUgPSAvXlxccyo8KFxcdyt8ISlbXj5dKj4vO1xuY29uc3Qgc2luZ2xlVGFnUmUgPSAvXjwoXFx3KylcXHMqXFwvPz4oPzo8XFwvXFwxPik/JC87XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFnbWVudChodG1sKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHNpbmdsZVRhZ1JlLmV4ZWMoaHRtbCk7XG4gICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobWF0Y2hlc1sxXSk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgaWYgKGZyYWdtZW50UmUudGVzdChodG1sKSkge1xuICAgICAgICBjb250YWluZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCBodG1sLnRyaW0oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29udGFpbmVyLnRleHRDb250ZW50ID0gaHRtbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdW53cmFwU2luZ2xlKGNvbnRhaW5lci5jaGlsZE5vZGVzKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwU2luZ2xlKG5vZGVzKSB7XG4gICAgcmV0dXJuIG5vZGVzLmxlbmd0aCA+IDEgPyBub2RlcyA6IG5vZGVzWzBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHkobm9kZSwgZm4pIHtcbiAgICBpZiAoIWlzRWxlbWVudChub2RlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm4obm9kZSk7XG4gICAgbm9kZSA9IG5vZGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICBhcHBseShub2RlLCBmbik7XG4gICAgICAgIG5vZGUgPSBuZXh0O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uICQoc2VsZWN0b3IsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gaXNIdG1sKHNlbGVjdG9yKSA/IHRvTm9kZShmcmFnbWVudChzZWxlY3RvcikpIDogZmluZChzZWxlY3RvciwgY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiAkJChzZWxlY3RvciwgY29udGV4dCkge1xuICAgIHJldHVybiBpc0h0bWwoc2VsZWN0b3IpID8gdG9Ob2RlcyhmcmFnbWVudChzZWxlY3RvcikpIDogZmluZEFsbChzZWxlY3RvciwgY29udGV4dCk7XG59XG5cbmZ1bmN0aW9uIGlzSHRtbChzdHIpIHtcbiAgICByZXR1cm4gaXNTdHJpbmcoc3RyKSAmJiBzdGFydHNXaXRoKHN0ci50cmltKCksICc8Jyk7XG59XG4iLCJpbXBvcnQgeyBvbiB9IGZyb20gJy4vZXZlbnQnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgeyAkLCBhcHBlbmQsIHJlbW92ZSB9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7XG4gICAgZWFjaCxcbiAgICBpc0RvY3VtZW50LFxuICAgIGlzRWxlbWVudCxcbiAgICBpc1N0cmluZyxcbiAgICBpc1VuZGVmaW5lZCxcbiAgICBpc1dpbmRvdyxcbiAgICBtZW1vaXplLFxuICAgIHN1bUJ5LFxuICAgIHRvRmxvYXQsXG4gICAgdG9Ob2RlLFxuICAgIHRvV2luZG93LFxuICAgIHVjZmlyc3QsXG59IGZyb20gJy4vbGFuZyc7XG5cbmNvbnN0IGRpcnMgPSB7XG4gICAgd2lkdGg6IFsnbGVmdCcsICdyaWdodCddLFxuICAgIGhlaWdodDogWyd0b3AnLCAnYm90dG9tJ10sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGltZW5zaW9ucyhlbGVtZW50KSB7XG4gICAgY29uc3QgcmVjdCA9IGlzRWxlbWVudChlbGVtZW50KVxuICAgICAgICA/IHRvTm9kZShlbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICA6IHsgaGVpZ2h0OiBoZWlnaHQoZWxlbWVudCksIHdpZHRoOiB3aWR0aChlbGVtZW50KSwgdG9wOiAwLCBsZWZ0OiAwIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgICAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiByZWN0LnRvcCxcbiAgICAgICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgICAgICBib3R0b206IHJlY3QudG9wICsgcmVjdC5oZWlnaHQsXG4gICAgICAgIHJpZ2h0OiByZWN0LmxlZnQgKyByZWN0LndpZHRoLFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvZmZzZXQoZWxlbWVudCwgY29vcmRpbmF0ZXMpIHtcbiAgICBjb25zdCBjdXJyZW50T2Zmc2V0ID0gZGltZW5zaW9ucyhlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsWSwgc2Nyb2xsWCB9ID0gdG9XaW5kb3coZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IG9mZnNldEJ5ID0geyBoZWlnaHQ6IHNjcm9sbFksIHdpZHRoOiBzY3JvbGxYIH07XG5cbiAgICAgICAgZm9yIChjb25zdCBkaXIgaW4gZGlycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGRpcnNbZGlyXSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXRbcHJvcF0gKz0gb2Zmc2V0QnlbZGlyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY29vcmRpbmF0ZXMpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQ7XG4gICAgfVxuXG4gICAgY29uc3QgcG9zID0gY3NzKGVsZW1lbnQsICdwb3NpdGlvbicpO1xuXG4gICAgZWFjaChjc3MoZWxlbWVudCwgWydsZWZ0JywgJ3RvcCddKSwgKHZhbHVlLCBwcm9wKSA9PlxuICAgICAgICBjc3MoXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzW3Byb3BdIC1cbiAgICAgICAgICAgICAgICBjdXJyZW50T2Zmc2V0W3Byb3BdICtcbiAgICAgICAgICAgICAgICB0b0Zsb2F0KHBvcyA9PT0gJ2Fic29sdXRlJyAmJiB2YWx1ZSA9PT0gJ2F1dG8nID8gcG9zaXRpb24oZWxlbWVudClbcHJvcF0gOiB2YWx1ZSlcbiAgICAgICAgKVxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvbihlbGVtZW50KSB7XG4gICAgbGV0IHsgdG9wLCBsZWZ0IH0gPSBvZmZzZXQoZWxlbWVudCk7XG5cbiAgICBjb25zdCB7XG4gICAgICAgIG93bmVyRG9jdW1lbnQ6IHsgYm9keSwgZG9jdW1lbnRFbGVtZW50IH0sXG4gICAgICAgIG9mZnNldFBhcmVudCxcbiAgICB9ID0gdG9Ob2RlKGVsZW1lbnQpO1xuICAgIGxldCBwYXJlbnQgPSBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXG4gICAgd2hpbGUgKFxuICAgICAgICBwYXJlbnQgJiZcbiAgICAgICAgKHBhcmVudCA9PT0gYm9keSB8fCBwYXJlbnQgPT09IGRvY3VtZW50RWxlbWVudCkgJiZcbiAgICAgICAgY3NzKHBhcmVudCwgJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnXG4gICAgKSB7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIGlmIChpc0VsZW1lbnQocGFyZW50KSkge1xuICAgICAgICBjb25zdCBwYXJlbnRPZmZzZXQgPSBvZmZzZXQocGFyZW50KTtcbiAgICAgICAgdG9wIC09IHBhcmVudE9mZnNldC50b3AgKyB0b0Zsb2F0KGNzcyhwYXJlbnQsICdib3JkZXJUb3BXaWR0aCcpKTtcbiAgICAgICAgbGVmdCAtPSBwYXJlbnRPZmZzZXQubGVmdCArIHRvRmxvYXQoY3NzKHBhcmVudCwgJ2JvcmRlckxlZnRXaWR0aCcpKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0b3A6IHRvcCAtIHRvRmxvYXQoY3NzKGVsZW1lbnQsICdtYXJnaW5Ub3AnKSksXG4gICAgICAgIGxlZnQ6IGxlZnQgLSB0b0Zsb2F0KGNzcyhlbGVtZW50LCAnbWFyZ2luTGVmdCcpKSxcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2Zmc2V0UG9zaXRpb24oZWxlbWVudCkge1xuICAgIGVsZW1lbnQgPSB0b05vZGUoZWxlbWVudCk7XG5cbiAgICBjb25zdCBvZmZzZXQgPSBbZWxlbWVudC5vZmZzZXRUb3AsIGVsZW1lbnQub2Zmc2V0TGVmdF07XG5cbiAgICB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudCkpIHtcbiAgICAgICAgb2Zmc2V0WzBdICs9IGVsZW1lbnQub2Zmc2V0VG9wICsgdG9GbG9hdChjc3MoZWxlbWVudCwgYGJvcmRlclRvcFdpZHRoYCkpO1xuICAgICAgICBvZmZzZXRbMV0gKz0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgdG9GbG9hdChjc3MoZWxlbWVudCwgYGJvcmRlckxlZnRXaWR0aGApKTtcblxuICAgICAgICBpZiAoY3NzKGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAnZml4ZWQnKSB7XG4gICAgICAgICAgICBjb25zdCB3aW4gPSB0b1dpbmRvdyhlbGVtZW50KTtcbiAgICAgICAgICAgIG9mZnNldFswXSArPSB3aW4uc2Nyb2xsWTtcbiAgICAgICAgICAgIG9mZnNldFsxXSArPSB3aW4uc2Nyb2xsWDtcbiAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xufVxuXG5leHBvcnQgY29uc3QgaGVpZ2h0ID0gZGltZW5zaW9uKCdoZWlnaHQnKTtcbmV4cG9ydCBjb25zdCB3aWR0aCA9IGRpbWVuc2lvbignd2lkdGgnKTtcblxuZnVuY3Rpb24gZGltZW5zaW9uKHByb3ApIHtcbiAgICBjb25zdCBwcm9wTmFtZSA9IHVjZmlyc3QocHJvcCk7XG4gICAgcmV0dXJuIChlbGVtZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoaXNXaW5kb3coZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFtgaW5uZXIke3Byb3BOYW1lfWBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNEb2N1bWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvYyA9IGVsZW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heChkb2NbYG9mZnNldCR7cHJvcE5hbWV9YF0sIGRvY1tgc2Nyb2xsJHtwcm9wTmFtZX1gXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsZW1lbnQgPSB0b05vZGUoZWxlbWVudCk7XG5cbiAgICAgICAgICAgIHZhbHVlID0gY3NzKGVsZW1lbnQsIHByb3ApO1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gJ2F1dG8nID8gZWxlbWVudFtgb2Zmc2V0JHtwcm9wTmFtZX1gXSA6IHRvRmxvYXQodmFsdWUpIHx8IDA7XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAtIGJveE1vZGVsQWRqdXN0KGVsZW1lbnQsIHByb3ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNzcyhcbiAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgICAgICAgIXZhbHVlICYmIHZhbHVlICE9PSAwID8gJycgOiArdmFsdWUgKyBib3hNb2RlbEFkanVzdChlbGVtZW50LCBwcm9wKSArICdweCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm94TW9kZWxBZGp1c3QoZWxlbWVudCwgcHJvcCwgc2l6aW5nID0gJ2JvcmRlci1ib3gnKSB7XG4gICAgcmV0dXJuIGNzcyhlbGVtZW50LCAnYm94U2l6aW5nJykgPT09IHNpemluZ1xuICAgICAgICA/IHN1bUJ5KFxuICAgICAgICAgICAgICBkaXJzW3Byb3BdLm1hcCh1Y2ZpcnN0KSxcbiAgICAgICAgICAgICAgKHByb3ApID0+XG4gICAgICAgICAgICAgICAgICB0b0Zsb2F0KGNzcyhlbGVtZW50LCBgcGFkZGluZyR7cHJvcH1gKSkgK1xuICAgICAgICAgICAgICAgICAgdG9GbG9hdChjc3MoZWxlbWVudCwgYGJvcmRlciR7cHJvcH1XaWR0aGApKVxuICAgICAgICAgIClcbiAgICAgICAgOiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxpcFBvc2l0aW9uKHBvcykge1xuICAgIGZvciAoY29uc3QgZGlyIGluIGRpcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIGluIGRpcnNbZGlyXSkge1xuICAgICAgICAgICAgaWYgKGRpcnNbZGlyXVtpXSA9PT0gcG9zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpcnNbZGlyXVsxIC0gaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBvcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUHgodmFsdWUsIHByb3BlcnR5ID0gJ3dpZHRoJywgZWxlbWVudCA9IHdpbmRvdywgb2Zmc2V0RGltID0gZmFsc2UpIHtcbiAgICBpZiAoIWlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdG9GbG9hdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1bUJ5KHBhcnNlQ2FsYyh2YWx1ZSksICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB1bml0ID0gcGFyc2VVbml0KHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gdW5pdFxuICAgICAgICAgICAgPyBwZXJjZW50KFxuICAgICAgICAgICAgICAgICAgdW5pdCA9PT0gJ3ZoJ1xuICAgICAgICAgICAgICAgICAgICAgID8gZ2V0Vmlld3BvcnRIZWlnaHQoKVxuICAgICAgICAgICAgICAgICAgICAgIDogdW5pdCA9PT0gJ3Z3J1xuICAgICAgICAgICAgICAgICAgICAgID8gd2lkdGgodG9XaW5kb3coZWxlbWVudCkpXG4gICAgICAgICAgICAgICAgICAgICAgOiBvZmZzZXREaW1cbiAgICAgICAgICAgICAgICAgICAgICA/IGVsZW1lbnRbYG9mZnNldCR7dWNmaXJzdChwcm9wZXJ0eSl9YF1cbiAgICAgICAgICAgICAgICAgICAgICA6IGRpbWVuc2lvbnMoZWxlbWVudClbcHJvcGVydHldLFxuICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB2YWx1ZTtcbiAgICB9KTtcbn1cblxuY29uc3QgY2FsY1JlID0gLy0/XFxkKyg/OlxcLlxcZCspPyg/OnZbd2hdfCV8cHgpPy9nO1xuY29uc3QgcGFyc2VDYWxjID0gbWVtb2l6ZSgoY2FsYykgPT4gY2FsYy50b1N0cmluZygpLnJlcGxhY2UoL1xccy9nLCAnJykubWF0Y2goY2FsY1JlKSB8fCBbXSk7XG5jb25zdCB1bml0UmUgPSAvKD86dltod118JSkkLztcbmNvbnN0IHBhcnNlVW5pdCA9IG1lbW9pemUoKHN0cikgPT4gKHN0ci5tYXRjaCh1bml0UmUpIHx8IFtdKVswXSk7XG5cbmZ1bmN0aW9uIHBlcmNlbnQoYmFzZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gKGJhc2UgKiB0b0Zsb2F0KHZhbHVlKSkgLyAxMDA7XG59XG5cbmxldCB2aDtcbmxldCB2aEVsO1xuXG5mdW5jdGlvbiBnZXRWaWV3cG9ydEhlaWdodCgpIHtcbiAgICBpZiAodmgpIHtcbiAgICAgICAgcmV0dXJuIHZoO1xuICAgIH1cbiAgICBpZiAoIXZoRWwpIHtcbiAgICAgICAgdmhFbCA9ICQoJzxkaXY+Jyk7XG4gICAgICAgIGNzcyh2aEVsLCB7XG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDB2aCcsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgfSk7XG4gICAgICAgIG9uKHdpbmRvdywgJ3Jlc2l6ZScsICgpID0+ICh2aCA9IG51bGwpKTtcbiAgICB9XG5cbiAgICBhcHBlbmQoZG9jdW1lbnQuYm9keSwgdmhFbCk7XG4gICAgdmggPSB2aEVsLmNsaWVudEhlaWdodDtcbiAgICByZW1vdmUodmhFbCk7XG4gICAgcmV0dXJuIHZoO1xufVxuIiwiZXhwb3J0IGNvbnN0IGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuZXhwb3J0IGNvbnN0IGlzUnRsID0gaW5Ccm93c2VyICYmIGRvY3VtZW50LmRpciA9PT0gJ3J0bCc7XG5cbmV4cG9ydCBjb25zdCBoYXNUb3VjaCA9IGluQnJvd3NlciAmJiAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3c7XG5jb25zdCBoYXNQb2ludGVyRXZlbnRzID0gaW5Ccm93c2VyICYmIHdpbmRvdy5Qb2ludGVyRXZlbnQ7XG5cbmV4cG9ydCBjb25zdCBwb2ludGVyRG93biA9IGhhc1BvaW50ZXJFdmVudHMgPyAncG9pbnRlcmRvd24nIDogaGFzVG91Y2ggPyAndG91Y2hzdGFydCcgOiAnbW91c2Vkb3duJztcbmV4cG9ydCBjb25zdCBwb2ludGVyTW92ZSA9IGhhc1BvaW50ZXJFdmVudHMgPyAncG9pbnRlcm1vdmUnIDogaGFzVG91Y2ggPyAndG91Y2htb3ZlJyA6ICdtb3VzZW1vdmUnO1xuZXhwb3J0IGNvbnN0IHBvaW50ZXJVcCA9IGhhc1BvaW50ZXJFdmVudHMgPyAncG9pbnRlcnVwJyA6IGhhc1RvdWNoID8gJ3RvdWNoZW5kJyA6ICdtb3VzZXVwJztcbmV4cG9ydCBjb25zdCBwb2ludGVyRW50ZXIgPSBoYXNQb2ludGVyRXZlbnRzID8gJ3BvaW50ZXJlbnRlcicgOiBoYXNUb3VjaCA/ICcnIDogJ21vdXNlZW50ZXInO1xuZXhwb3J0IGNvbnN0IHBvaW50ZXJMZWF2ZSA9IGhhc1BvaW50ZXJFdmVudHMgPyAncG9pbnRlcmxlYXZlJyA6IGhhc1RvdWNoID8gJycgOiAnbW91c2VsZWF2ZSc7XG5leHBvcnQgY29uc3QgcG9pbnRlckNhbmNlbCA9IGhhc1BvaW50ZXJFdmVudHMgPyAncG9pbnRlcmNhbmNlbCcgOiAndG91Y2hjYW5jZWwnO1xuIiwiLypcbiAgICBCYXNlZCBvbjpcbiAgICBDb3B5cmlnaHQgKGMpIDIwMTYgV2lsc29uIFBhZ2Ugd2lsc29ucGFnZUBtZS5jb21cbiAgICBodHRwczovL2dpdGh1Yi5jb20vd2lsc29ucGFnZS9mYXN0ZG9tXG4qL1xuXG5leHBvcnQgY29uc3QgZmFzdGRvbSA9IHtcbiAgICByZWFkczogW10sXG4gICAgd3JpdGVzOiBbXSxcblxuICAgIHJlYWQodGFzaykge1xuICAgICAgICB0aGlzLnJlYWRzLnB1c2godGFzayk7XG4gICAgICAgIHNjaGVkdWxlRmx1c2goKTtcbiAgICAgICAgcmV0dXJuIHRhc2s7XG4gICAgfSxcblxuICAgIHdyaXRlKHRhc2spIHtcbiAgICAgICAgdGhpcy53cml0ZXMucHVzaCh0YXNrKTtcbiAgICAgICAgc2NoZWR1bGVGbHVzaCgpO1xuICAgICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuXG4gICAgY2xlYXIodGFzaykge1xuICAgICAgICByZW1vdmUodGhpcy5yZWFkcywgdGFzayk7XG4gICAgICAgIHJlbW92ZSh0aGlzLndyaXRlcywgdGFzayk7XG4gICAgfSxcblxuICAgIGZsdXNoLFxufTtcblxuZnVuY3Rpb24gZmx1c2gocmVjdXJzaW9uKSB7XG4gICAgcnVuVGFza3MoZmFzdGRvbS5yZWFkcyk7XG4gICAgcnVuVGFza3MoZmFzdGRvbS53cml0ZXMuc3BsaWNlKDApKTtcblxuICAgIGZhc3Rkb20uc2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgICBpZiAoZmFzdGRvbS5yZWFkcy5sZW5ndGggfHwgZmFzdGRvbS53cml0ZXMubGVuZ3RoKSB7XG4gICAgICAgIHNjaGVkdWxlRmx1c2gocmVjdXJzaW9uICsgMSk7XG4gICAgfVxufVxuXG5jb25zdCBSRUNVUlNJT05fTElNSVQgPSA0O1xuZnVuY3Rpb24gc2NoZWR1bGVGbHVzaChyZWN1cnNpb24pIHtcbiAgICBpZiAoZmFzdGRvbS5zY2hlZHVsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZhc3Rkb20uc2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBpZiAocmVjdXJzaW9uICYmIHJlY3Vyc2lvbiA8IFJFQ1VSU0lPTl9MSU1JVCkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IGZsdXNoKHJlY3Vyc2lvbikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBmbHVzaCgxKSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBydW5UYXNrcyh0YXNrcykge1xuICAgIGxldCB0YXNrO1xuICAgIHdoaWxlICgodGFzayA9IHRhc2tzLnNoaWZ0KCkpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0YXNrKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZShhcnJheSwgaXRlbSkge1xuICAgIGNvbnN0IGluZGV4ID0gYXJyYXkuaW5kZXhPZihpdGVtKTtcbiAgICByZXR1cm4gfmluZGV4ICYmIGFycmF5LnNwbGljZShpbmRleCwgMSk7XG59XG4iLCJpbXBvcnQgeyBnZXRFdmVudFBvcywgb24gfSBmcm9tICcuL2V2ZW50JztcbmltcG9ydCB7IGxhc3QsIHBvaW50SW5SZWN0IH0gZnJvbSAnLi9sYW5nJztcblxuZXhwb3J0IGZ1bmN0aW9uIE1vdXNlVHJhY2tlcigpIHt9XG5cbk1vdXNlVHJhY2tlci5wcm90b3R5cGUgPSB7XG4gICAgcG9zaXRpb25zOiBbXSxcblxuICAgIGluaXQoKSB7XG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gW107XG5cbiAgICAgICAgbGV0IHBvc2l0aW9uO1xuICAgICAgICB0aGlzLnVuYmluZCA9IG9uKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgKGUpID0+IChwb3NpdGlvbiA9IGdldEV2ZW50UG9zKGUpKSk7XG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucG9zaXRpb25zLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9ucy5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCA1MCk7XG4gICAgfSxcblxuICAgIGNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy51bmJpbmQ/LigpO1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgIH0sXG5cbiAgICBtb3Zlc1RvKHRhcmdldCkge1xuICAgICAgICBpZiAodGhpcy5wb3NpdGlvbnMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgeyBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20gfSA9IHA7XG5cbiAgICAgICAgY29uc3QgW3ByZXZQb3NpdGlvbl0gPSB0aGlzLnBvc2l0aW9ucztcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBsYXN0KHRoaXMucG9zaXRpb25zKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IFtwcmV2UG9zaXRpb24sIHBvc2l0aW9uXTtcblxuICAgICAgICBpZiAocG9pbnRJblJlY3QocG9zaXRpb24sIHApKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWFnb25hbHMgPSBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgeyB4OiBsZWZ0LCB5OiB0b3AgfSxcbiAgICAgICAgICAgICAgICB7IHg6IHJpZ2h0LCB5OiBib3R0b20gfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgeyB4OiBsZWZ0LCB5OiBib3R0b20gfSxcbiAgICAgICAgICAgICAgICB7IHg6IHJpZ2h0LCB5OiB0b3AgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIGRpYWdvbmFscy5zb21lKChkaWFnb25hbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0KHBhdGgsIGRpYWdvbmFsKTtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcnNlY3Rpb24gJiYgcG9pbnRJblJlY3QoaW50ZXJzZWN0aW9uLCBwKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbn07XG5cbi8vIEluc3BpcmVkIGJ5IGh0dHA6Ly9wYXVsYm91cmtlLm5ldC9nZW9tZXRyeS9wb2ludGxpbmVwbGFuZS9cbmZ1bmN0aW9uIGludGVyc2VjdChbeyB4OiB4MSwgeTogeTEgfSwgeyB4OiB4MiwgeTogeTIgfV0sIFt7IHg6IHgzLCB5OiB5MyB9LCB7IHg6IHg0LCB5OiB5NCB9XSkge1xuICAgIGNvbnN0IGRlbm9taW5hdG9yID0gKHk0IC0geTMpICogKHgyIC0geDEpIC0gKHg0IC0geDMpICogKHkyIC0geTEpO1xuXG4gICAgLy8gTGluZXMgYXJlIHBhcmFsbGVsXG4gICAgaWYgKGRlbm9taW5hdG9yID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB1YSA9ICgoeDQgLSB4MykgKiAoeTEgLSB5MykgLSAoeTQgLSB5MykgKiAoeDEgLSB4MykpIC8gZGVub21pbmF0b3I7XG5cbiAgICBpZiAodWEgPCAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgb2YgdGhlIGludGVyc2VjdGlvblxuICAgIHJldHVybiB7IHg6IHgxICsgdWEgKiAoeDIgLSB4MSksIHk6IHkxICsgdWEgKiAoeTIgLSB5MSkgfTtcbn1cbiIsImltcG9ydCB7IG9uIH0gZnJvbSAnLi9ldmVudCc7XG5pbXBvcnQgeyBub29wLCB0b05vZGVzIH0gZnJvbSAnLi9sYW5nJztcbmltcG9ydCB7IGluQnJvd3NlciB9IGZyb20gJy4vZW52JztcblxuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVJbnRlcnNlY3Rpb24odGFyZ2V0cywgY2IsIG9wdGlvbnMgPSB7fSwgeyBpbnRlcnNlY3RpbmcgPSB0cnVlIH0gPSB7fSkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICBpbnRlcnNlY3RpbmdcbiAgICAgICAgICAgID8gKGVudHJpZXMsIG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZW50cmllcy5zb21lKChlbnRyeSkgPT4gZW50cnkuaXNJbnRlcnNlY3RpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2IoZW50cmllcywgb2JzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IGNiLFxuICAgICAgICBvcHRpb25zXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHRvTm9kZXModGFyZ2V0cykpIHtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9ic2VydmVyO1xufVxuXG5jb25zdCBoYXNSZXNpemVPYnNlcnZlciA9IGluQnJvd3NlciAmJiB3aW5kb3cuUmVzaXplT2JzZXJ2ZXI7XG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZVJlc2l6ZSh0YXJnZXRzLCBjYiwgb3B0aW9ucyA9IHsgYm94OiAnYm9yZGVyLWJveCcgfSkge1xuICAgIGlmIChoYXNSZXNpemVPYnNlcnZlcikge1xuICAgICAgICByZXR1cm4gb2JzZXJ2ZShSZXNpemVPYnNlcnZlciwgdGFyZ2V0cywgY2IsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIFNhZmFyaSA8IDEzLjFcbiAgICBpbml0UmVzaXplTGlzdGVuZXIoKTtcbiAgICBsaXN0ZW5lcnMuYWRkKGNiKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG9ic2VydmU6IG5vb3AsXG4gICAgICAgIHVub2JzZXJ2ZTogbm9vcCxcbiAgICAgICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUoY2IpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5cbmxldCBsaXN0ZW5lcnM7XG5mdW5jdGlvbiBpbml0UmVzaXplTGlzdGVuZXIoKSB7XG4gICAgaWYgKGxpc3RlbmVycykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzID0gbmV3IFNldCgpO1xuXG4gICAgLy8gdGhyb3R0bGUgJ3Jlc2l6ZSdcbiAgICBsZXQgcGVuZGluZ1Jlc2l6ZTtcbiAgICBjb25zdCBoYW5kbGVSZXNpemUgPSAoKSA9PiB7XG4gICAgICAgIGlmIChwZW5kaW5nUmVzaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcGVuZGluZ1Jlc2l6ZSA9IHRydWU7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiAocGVuZGluZ1Jlc2l6ZSA9IGZhbHNlKSk7XG4gICAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgbGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIG9uKHdpbmRvdywgJ2xvYWQgcmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICBvbihkb2N1bWVudCwgJ2xvYWRlZG1ldGFkYXRhIGxvYWQnLCBoYW5kbGVSZXNpemUsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZU11dGF0aW9uKHRhcmdldHMsIGNiLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9ic2VydmUoTXV0YXRpb25PYnNlcnZlciwgdGFyZ2V0cywgY2IsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBvYnNlcnZlKE9ic2VydmVyLCB0YXJnZXRzLCBjYiwgb3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE9ic2VydmVyKGNiKTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHRvTm9kZXModGFyZ2V0cykpIHtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9ic2VydmVyO1xufVxuIiwiaW1wb3J0IHsgaXNUYWcgfSBmcm9tICcuL2RvbSc7XG5pbXBvcnQgeyBvbmNlIH0gZnJvbSAnLi9ldmVudCc7XG5pbXBvcnQgeyBpbmNsdWRlcywgbm9vcCB9IGZyb20gJy4vbGFuZyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwbGF5KGVsKSB7XG4gICAgaWYgKGlzSUZyYW1lKGVsKSkge1xuICAgICAgICBjYWxsKGVsLCB7IGZ1bmM6ICdwbGF5VmlkZW8nLCBtZXRob2Q6ICdwbGF5JyB9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MNShlbCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGVsLnBsYXkoKS5jYXRjaChub29wKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF1c2UoZWwpIHtcbiAgICBpZiAoaXNJRnJhbWUoZWwpKSB7XG4gICAgICAgIGNhbGwoZWwsIHsgZnVuYzogJ3BhdXNlVmlkZW8nLCBtZXRob2Q6ICdwYXVzZScgfSk7XG4gICAgfVxuXG4gICAgaWYgKGlzSFRNTDUoZWwpKSB7XG4gICAgICAgIGVsLnBhdXNlKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbXV0ZShlbCkge1xuICAgIGlmIChpc0lGcmFtZShlbCkpIHtcbiAgICAgICAgY2FsbChlbCwgeyBmdW5jOiAnbXV0ZScsIG1ldGhvZDogJ3NldFZvbHVtZScsIHZhbHVlOiAwIH0pO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUw1KGVsKSkge1xuICAgICAgICBlbC5tdXRlZCA9IHRydWU7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWaWRlbyhlbCkge1xuICAgIHJldHVybiBpc0hUTUw1KGVsKSB8fCBpc0lGcmFtZShlbCk7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTDUoZWwpIHtcbiAgICByZXR1cm4gaXNUYWcoZWwsICd2aWRlbycpO1xufVxuXG5mdW5jdGlvbiBpc0lGcmFtZShlbCkge1xuICAgIHJldHVybiBpc1RhZyhlbCwgJ2lmcmFtZScpICYmIChpc1lvdXR1YmUoZWwpIHx8IGlzVmltZW8oZWwpKTtcbn1cblxuZnVuY3Rpb24gaXNZb3V0dWJlKGVsKSB7XG4gICAgcmV0dXJuICEhZWwuc3JjLm1hdGNoKFxuICAgICAgICAvXFwvXFwvLio/eW91dHViZSgtbm9jb29raWUpP1xcLlthLXpdK1xcLyh3YXRjaFxcP3Y9W14mXFxzXSt8ZW1iZWQpfHlvdXR1XFwuYmVcXC8uKi9cbiAgICApO1xufVxuXG5mdW5jdGlvbiBpc1ZpbWVvKGVsKSB7XG4gICAgcmV0dXJuICEhZWwuc3JjLm1hdGNoKC92aW1lb1xcLmNvbVxcL3ZpZGVvXFwvLiovKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2FsbChlbCwgY21kKSB7XG4gICAgYXdhaXQgZW5hYmxlQXBpKGVsKTtcbiAgICBwb3N0KGVsLCBjbWQpO1xufVxuXG5mdW5jdGlvbiBwb3N0KGVsLCBjbWQpIHtcbiAgICB0cnkge1xuICAgICAgICBlbC5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHsgZXZlbnQ6ICdjb21tYW5kJywgLi4uY21kIH0pLCAnKicpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gbm9vcFxuICAgIH1cbn1cblxuY29uc3Qgc3RhdGVLZXkgPSAnX3VrUGxheWVyJztcbmxldCBjb3VudGVyID0gMDtcbmZ1bmN0aW9uIGVuYWJsZUFwaShlbCkge1xuICAgIGlmIChlbFtzdGF0ZUtleV0pIHtcbiAgICAgICAgcmV0dXJuIGVsW3N0YXRlS2V5XTtcbiAgICB9XG5cbiAgICBjb25zdCB5b3V0dWJlID0gaXNZb3V0dWJlKGVsKTtcbiAgICBjb25zdCB2aW1lbyA9IGlzVmltZW8oZWwpO1xuXG4gICAgY29uc3QgaWQgPSArK2NvdW50ZXI7XG4gICAgbGV0IHBvbGxlcjtcblxuICAgIHJldHVybiAoZWxbc3RhdGVLZXldID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgeW91dHViZSAmJlxuICAgICAgICAgICAgb25jZShlbCwgJ2xvYWQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiBwb3N0KGVsLCB7IGV2ZW50OiAnbGlzdGVuaW5nJywgaWQgfSk7XG4gICAgICAgICAgICAgICAgcG9sbGVyID0gc2V0SW50ZXJ2YWwobGlzdGVuZXIsIDEwMCk7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG9uY2Uod2luZG93LCAnbWVzc2FnZScsIHJlc29sdmUsIGZhbHNlLCAoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHlvdXR1YmUgJiYgZGF0YT8uaWQgPT09IGlkICYmIGRhdGEuZXZlbnQgPT09ICdvblJlYWR5JykgfHxcbiAgICAgICAgICAgICAgICAgICAgKHZpbWVvICYmIE51bWJlcihkYXRhPy5wbGF5ZXJfaWQpID09PSBpZClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWwuc3JjID0gYCR7ZWwuc3JjfSR7aW5jbHVkZXMoZWwuc3JjLCAnPycpID8gJyYnIDogJz8nfSR7XG4gICAgICAgICAgICB5b3V0dWJlID8gJ2VuYWJsZWpzYXBpPTEnIDogYGFwaT0xJnBsYXllcl9pZD0ke2lkfWBcbiAgICAgICAgfWA7XG4gICAgfSkudGhlbigoKSA9PiBjbGVhckludGVydmFsKHBvbGxlcikpKTtcbn1cbiIsImltcG9ydCB7IGNzcyB9IGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IHsgaXNWaXNpYmxlLCBwYXJlbnRzIH0gZnJvbSAnLi9maWx0ZXInO1xuaW1wb3J0IHsgb2Zmc2V0LCBvZmZzZXRQb3NpdGlvbiB9IGZyb20gJy4vZGltZW5zaW9ucyc7XG5pbXBvcnQge1xuICAgIGNsYW1wLFxuICAgIGZpbmRJbmRleCxcbiAgICBpbmNsdWRlcyxcbiAgICBpbnRlcnNlY3RSZWN0LFxuICAgIGlzV2luZG93LFxuICAgIHRvRmxvYXQsXG4gICAgdG9XaW5kb3csXG4gICAgdWNmaXJzdCxcbn0gZnJvbSAnLi9sYW5nJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5WaWV3KGVsZW1lbnQsIG9mZnNldFRvcCA9IDAsIG9mZnNldExlZnQgPSAwKSB7XG4gICAgaWYgKCFpc1Zpc2libGUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnNlY3RSZWN0KFxuICAgICAgICAuLi5vdmVyZmxvd1BhcmVudHMoZWxlbWVudClcbiAgICAgICAgICAgIC5tYXAoKHBhcmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0IH0gPSBvZmZzZXRWaWV3cG9ydChwYXJlbnQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiB0b3AgLSBvZmZzZXRUb3AsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQgLSBvZmZzZXRMZWZ0LFxuICAgICAgICAgICAgICAgICAgICBib3R0b206IGJvdHRvbSArIG9mZnNldFRvcCxcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0ICsgb2Zmc2V0TGVmdCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jb25jYXQob2Zmc2V0KGVsZW1lbnQpKVxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxJbnRvVmlldyhlbGVtZW50LCB7IG9mZnNldDogb2Zmc2V0QnkgPSAwIH0gPSB7fSkge1xuICAgIGNvbnN0IHBhcmVudHMgPSBpc1Zpc2libGUoZWxlbWVudCkgPyBzY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGZhbHNlLCBbJ2hpZGRlbiddKSA6IFtdO1xuICAgIHJldHVybiBwYXJlbnRzLnJlZHVjZShcbiAgICAgICAgKGZuLCBzY3JvbGxFbGVtZW50LCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBvZmZzZXRIZWlnaHQgfSA9IHNjcm9sbEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB2aWV3cG9ydCA9IG9mZnNldFZpZXdwb3J0KHNjcm9sbEVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgbWF4U2Nyb2xsID0gc2Nyb2xsSGVpZ2h0IC0gdmlld3BvcnQuaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgeyBoZWlnaHQ6IGVsSGVpZ2h0LCB0b3A6IGVsVG9wIH0gPSBwYXJlbnRzW2kgLSAxXVxuICAgICAgICAgICAgICAgID8gb2Zmc2V0Vmlld3BvcnQocGFyZW50c1tpIC0gMV0pXG4gICAgICAgICAgICAgICAgOiBvZmZzZXQoZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGxldCB0b3AgPSBNYXRoLmNlaWwoZWxUb3AgLSB2aWV3cG9ydC50b3AgLSBvZmZzZXRCeSArIHNjcm9sbFRvcCk7XG5cbiAgICAgICAgICAgIGlmIChvZmZzZXRCeSA+IDAgJiYgb2Zmc2V0SGVpZ2h0IDwgZWxIZWlnaHQgKyBvZmZzZXRCeSkge1xuICAgICAgICAgICAgICAgIHRvcCArPSBvZmZzZXRCeTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0QnkgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodG9wID4gbWF4U2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0QnkgLT0gdG9wIC0gbWF4U2Nyb2xsO1xuICAgICAgICAgICAgICAgIHRvcCA9IG1heFNjcm9sbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG9wIDwgMCkge1xuICAgICAgICAgICAgICAgIG9mZnNldEJ5IC09IHRvcDtcbiAgICAgICAgICAgICAgICB0b3AgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gc2Nyb2xsVG8oc2Nyb2xsRWxlbWVudCwgdG9wIC0gc2Nyb2xsVG9wKS50aGVuKGZuKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICApKCk7XG5cbiAgICBmdW5jdGlvbiBzY3JvbGxUbyhlbGVtZW50LCB0b3ApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGwgPSBlbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gZ2V0RHVyYXRpb24oTWF0aC5hYnModG9wKSk7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiBzdGVwKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBlcmNlbnQgPSBlYXNlKGNsYW1wKChEYXRlLm5vdygpIC0gc3RhcnQpIC8gZHVyYXRpb24pKTtcblxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsICsgdG9wICogcGVyY2VudDtcblxuICAgICAgICAgICAgICAgIC8vIHNjcm9sbCBtb3JlIGlmIHdlIGhhdmUgbm90IHJlYWNoZWQgb3VyIGRlc3RpbmF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKHBlcmNlbnQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREdXJhdGlvbihkaXN0KSB7XG4gICAgICAgIHJldHVybiA0MCAqIE1hdGgucG93KGRpc3QsIDAuMzc1KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlYXNlKGspIHtcbiAgICAgICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxlZE92ZXIoZWxlbWVudCwgc3RhcnRPZmZzZXQgPSAwLCBlbmRPZmZzZXQgPSAwKSB7XG4gICAgaWYgKCFpc1Zpc2libGUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgW3Njcm9sbEVsZW1lbnRdID0gc2Nyb2xsUGFyZW50cyhlbGVtZW50LCB0cnVlKTtcbiAgICBjb25zdCB7IHNjcm9sbEhlaWdodCwgc2Nyb2xsVG9wIH0gPSBzY3JvbGxFbGVtZW50O1xuICAgIGNvbnN0IHsgaGVpZ2h0OiB2aWV3cG9ydEhlaWdodCB9ID0gb2Zmc2V0Vmlld3BvcnQoc2Nyb2xsRWxlbWVudCk7XG4gICAgY29uc3QgbWF4U2Nyb2xsID0gc2Nyb2xsSGVpZ2h0IC0gdmlld3BvcnRIZWlnaHQ7XG4gICAgY29uc3QgZWxlbWVudE9mZnNldFRvcCA9IG9mZnNldFBvc2l0aW9uKGVsZW1lbnQpWzBdIC0gb2Zmc2V0UG9zaXRpb24oc2Nyb2xsRWxlbWVudClbMF07XG5cbiAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIGVsZW1lbnRPZmZzZXRUb3AgLSB2aWV3cG9ydEhlaWdodCArIHN0YXJ0T2Zmc2V0KTtcbiAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihtYXhTY3JvbGwsIGVsZW1lbnRPZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAtIGVuZE9mZnNldCk7XG5cbiAgICByZXR1cm4gY2xhbXAoKHNjcm9sbFRvcCAtIHN0YXJ0KSAvIChlbmQgLSBzdGFydCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsUGFyZW50cyhlbGVtZW50LCBzY3JvbGxhYmxlID0gZmFsc2UsIHByb3BzID0gW10pIHtcbiAgICBjb25zdCBzY3JvbGxFbCA9IHNjcm9sbGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICBsZXQgYW5jZXN0b3JzID0gcGFyZW50cyhlbGVtZW50KS5yZXZlcnNlKCk7XG4gICAgYW5jZXN0b3JzID0gYW5jZXN0b3JzLnNsaWNlKGFuY2VzdG9ycy5pbmRleE9mKHNjcm9sbEVsKSArIDEpO1xuXG4gICAgY29uc3QgZml4ZWRJbmRleCA9IGZpbmRJbmRleChhbmNlc3RvcnMsIChlbCkgPT4gY3NzKGVsLCAncG9zaXRpb24nKSA9PT0gJ2ZpeGVkJyk7XG4gICAgaWYgKH5maXhlZEluZGV4KSB7XG4gICAgICAgIGFuY2VzdG9ycyA9IGFuY2VzdG9ycy5zbGljZShmaXhlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3Njcm9sbEVsXVxuICAgICAgICAuY29uY2F0KFxuICAgICAgICAgICAgYW5jZXN0b3JzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAocGFyZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICBjc3MocGFyZW50LCAnb3ZlcmZsb3cnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zb21lKChwcm9wKSA9PiBpbmNsdWRlcyhbJ2F1dG8nLCAnc2Nyb2xsJywgLi4ucHJvcHNdLCBwcm9wKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKCFzY3JvbGxhYmxlIHx8IHBhcmVudC5zY3JvbGxIZWlnaHQgPiBvZmZzZXRWaWV3cG9ydChwYXJlbnQpLmhlaWdodClcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAucmV2ZXJzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3ZlcmZsb3dQYXJlbnRzKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gc2Nyb2xsUGFyZW50cyhlbGVtZW50LCBmYWxzZSwgWydoaWRkZW4nLCAnY2xpcCddKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9mZnNldFZpZXdwb3J0KHNjcm9sbEVsZW1lbnQpIHtcbiAgICBjb25zdCB3aW5kb3cgPSB0b1dpbmRvdyhzY3JvbGxFbGVtZW50KTtcbiAgICBjb25zdCB7XG4gICAgICAgIHZpc3VhbFZpZXdwb3J0LFxuICAgICAgICBkb2N1bWVudDogeyBkb2N1bWVudEVsZW1lbnQgfSxcbiAgICB9ID0gd2luZG93O1xuICAgIGxldCB2aWV3cG9ydEVsZW1lbnQgPVxuICAgICAgICBzY3JvbGxFbGVtZW50ID09PSBzY3JvbGxpbmdFbGVtZW50KHNjcm9sbEVsZW1lbnQpID8gd2luZG93IDogc2Nyb2xsRWxlbWVudDtcblxuICAgIGlmIChpc1dpbmRvdyh2aWV3cG9ydEVsZW1lbnQpICYmIHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgICAgIGxldCB7IGhlaWdodCwgd2lkdGgsIHNjYWxlLCBwYWdlVG9wOiB0b3AsIHBhZ2VMZWZ0OiBsZWZ0IH0gPSB2aXN1YWxWaWV3cG9ydDtcbiAgICAgICAgaGVpZ2h0ID0gTWF0aC5yb3VuZChoZWlnaHQgKiBzY2FsZSk7XG4gICAgICAgIHdpZHRoID0gTWF0aC5yb3VuZCh3aWR0aCAqIHNjYWxlKTtcbiAgICAgICAgcmV0dXJuIHsgaGVpZ2h0LCB3aWR0aCwgdG9wLCBsZWZ0LCBib3R0b206IHRvcCArIGhlaWdodCwgcmlnaHQ6IGxlZnQgKyB3aWR0aCB9O1xuICAgIH1cblxuICAgIGxldCByZWN0ID0gb2Zmc2V0KHZpZXdwb3J0RWxlbWVudCk7XG4gICAgaWYgKGNzcyh2aWV3cG9ydEVsZW1lbnQsICdkaXNwbGF5JykgPT09ICdpbmxpbmUnKSB7XG4gICAgICAgIHJldHVybiByZWN0O1xuICAgIH1cblxuICAgIGZvciAobGV0IFtwcm9wLCBkaXIsIHN0YXJ0LCBlbmRdIG9mIFtcbiAgICAgICAgWyd3aWR0aCcsICd4JywgJ2xlZnQnLCAncmlnaHQnXSxcbiAgICAgICAgWydoZWlnaHQnLCAneScsICd0b3AnLCAnYm90dG9tJ10sXG4gICAgXSkge1xuICAgICAgICBpZiAoaXNXaW5kb3codmlld3BvcnRFbGVtZW50KSkge1xuICAgICAgICAgICAgLy8gaU9TIDEyIHJldHVybnMgPGJvZHk+IGFzIHNjcm9sbGluZ0VsZW1lbnRcbiAgICAgICAgICAgIHZpZXdwb3J0RWxlbWVudCA9IGRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlY3Rbc3RhcnRdICs9IHRvRmxvYXQoY3NzKHZpZXdwb3J0RWxlbWVudCwgYGJvcmRlci0ke3N0YXJ0fS13aWR0aGApKTtcbiAgICAgICAgfVxuICAgICAgICByZWN0W3Byb3BdID0gcmVjdFtkaXJdID0gdmlld3BvcnRFbGVtZW50W2BjbGllbnQke3VjZmlyc3QocHJvcCl9YF07XG4gICAgICAgIHJlY3RbZW5kXSA9IHJlY3RbcHJvcF0gKyByZWN0W3N0YXJ0XTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICAgIHJldHVybiB0b1dpbmRvdyhlbGVtZW50KS5kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xufVxuIiwiaW1wb3J0IHsgY3NzIH0gZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgeyB3aXRoaW4gfSBmcm9tICcuL2ZpbHRlcic7XG5pbXBvcnQgeyBvZmZzZXQgfSBmcm9tICcuL2RpbWVuc2lvbnMnO1xuaW1wb3J0IHsgY2xhbXAsIGlzQXJyYXksIHVjZmlyc3QgfSBmcm9tICcuL2xhbmcnO1xuaW1wb3J0IHsgb2Zmc2V0Vmlld3BvcnQsIG92ZXJmbG93UGFyZW50cyB9IGZyb20gJy4vdmlld3BvcnQnO1xuXG5jb25zdCBkaXJzID0gW1xuICAgIFsnd2lkdGgnLCAneCcsICdsZWZ0JywgJ3JpZ2h0J10sXG4gICAgWydoZWlnaHQnLCAneScsICd0b3AnLCAnYm90dG9tJ10sXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gcG9zaXRpb25BdChlbGVtZW50LCB0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgICBhdHRhY2g6IHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IFsnbGVmdCcsICd0b3AnXSxcbiAgICAgICAgICAgIHRhcmdldDogWydsZWZ0JywgJ3RvcCddLFxuICAgICAgICAgICAgLi4ub3B0aW9ucy5hdHRhY2gsXG4gICAgICAgIH0sXG4gICAgICAgIG9mZnNldDogWzAsIDBdLFxuICAgICAgICBwbGFjZW1lbnQ6IFtdLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICBpZiAoIWlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICB0YXJnZXQgPSBbdGFyZ2V0LCB0YXJnZXRdO1xuICAgIH1cblxuICAgIG9mZnNldChlbGVtZW50LCBnZXRQb3NpdGlvbihlbGVtZW50LCB0YXJnZXQsIG9wdGlvbnMpKTtcbn1cblxuZnVuY3Rpb24gZ2V0UG9zaXRpb24oZWxlbWVudCwgdGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgY29uc3QgcG9zaXRpb24gPSBhdHRhY2hUbyhlbGVtZW50LCB0YXJnZXQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHsgYm91bmRhcnksIHZpZXdwb3J0T2Zmc2V0ID0gMCwgcGxhY2VtZW50IH0gPSBvcHRpb25zO1xuXG4gICAgbGV0IG9mZnNldFBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgZm9yIChjb25zdCBbaSwgW3Byb3AsICwgc3RhcnQsIGVuZF1dIG9mIE9iamVjdC5lbnRyaWVzKGRpcnMpKSB7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2V0Vmlld3BvcnQoZWxlbWVudCwgdGFyZ2V0W2ldLCB2aWV3cG9ydE9mZnNldCwgYm91bmRhcnksIGkpO1xuXG4gICAgICAgIGlmIChpc1dpdGhpbihwb3NpdGlvbiwgdmlld3BvcnQsIGkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvZmZzZXRCeSA9IDA7XG5cbiAgICAgICAgLy8gRmxpcFxuICAgICAgICBpZiAocGxhY2VtZW50W2ldID09PSAnZmxpcCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaCA9IG9wdGlvbnMuYXR0YWNoLnRhcmdldFtpXTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoYXR0YWNoID09PSBlbmQgJiYgcG9zaXRpb25bZW5kXSA8PSB2aWV3cG9ydFtlbmRdKSB8fFxuICAgICAgICAgICAgICAgIChhdHRhY2ggPT09IHN0YXJ0ICYmIHBvc2l0aW9uW3N0YXJ0XSA+PSB2aWV3cG9ydFtzdGFydF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb2Zmc2V0QnkgPSBmbGlwKGVsZW1lbnQsIHRhcmdldCwgb3B0aW9ucywgaSlbc3RhcnRdIC0gcG9zaXRpb25bc3RhcnRdO1xuXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxBcmVhID0gZ2V0U2Nyb2xsQXJlYShlbGVtZW50LCB0YXJnZXRbaV0sIHZpZXdwb3J0T2Zmc2V0LCBpKTtcblxuICAgICAgICAgICAgaWYgKCFpc1dpdGhpbihhcHBseU9mZnNldChwb3NpdGlvbiwgb2Zmc2V0QnksIGkpLCBzY3JvbGxBcmVhLCBpKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc1dpdGhpbihwb3NpdGlvbiwgc2Nyb2xsQXJlYSwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVjdXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQb3MgPSBmbGlwQXhpcyhlbGVtZW50LCB0YXJnZXQsIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5ld1BvcyAmJiBpc1dpdGhpbihuZXdQb3MsIHNjcm9sbEFyZWEsIDEgLSBpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3UG9zO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTaGlmdFxuICAgICAgICB9IGVsc2UgaWYgKHBsYWNlbWVudFtpXSA9PT0gJ3NoaWZ0Jykge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0RGltID0gb2Zmc2V0KHRhcmdldFtpXSk7XG4gICAgICAgICAgICBjb25zdCB7IG9mZnNldDogZWxPZmZzZXQgfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICBvZmZzZXRCeSA9XG4gICAgICAgICAgICAgICAgY2xhbXAoXG4gICAgICAgICAgICAgICAgICAgIGNsYW1wKHBvc2l0aW9uW3N0YXJ0XSwgdmlld3BvcnRbc3RhcnRdLCB2aWV3cG9ydFtlbmRdIC0gcG9zaXRpb25bcHJvcF0pLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXREaW1bc3RhcnRdIC0gcG9zaXRpb25bcHJvcF0gKyBlbE9mZnNldFtpXSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RGltW2VuZF0gLSBlbE9mZnNldFtpXVxuICAgICAgICAgICAgICAgICkgLSBwb3NpdGlvbltzdGFydF07XG4gICAgICAgIH1cblxuICAgICAgICBvZmZzZXRQb3NpdGlvbiA9IGFwcGx5T2Zmc2V0KG9mZnNldFBvc2l0aW9uLCBvZmZzZXRCeSwgaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mZnNldFBvc2l0aW9uO1xufVxuXG5mdW5jdGlvbiBhdHRhY2hUbyhlbGVtZW50LCB0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICBsZXQgeyBhdHRhY2gsIG9mZnNldDogb2Zmc2V0QnkgfSA9IHtcbiAgICAgICAgYXR0YWNoOiB7XG4gICAgICAgICAgICBlbGVtZW50OiBbJ2xlZnQnLCAndG9wJ10sXG4gICAgICAgICAgICB0YXJnZXQ6IFsnbGVmdCcsICd0b3AnXSxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMuYXR0YWNoLFxuICAgICAgICB9LFxuICAgICAgICBvZmZzZXQ6IFswLCAwXSxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuXG4gICAgbGV0IGVsT2Zmc2V0ID0gb2Zmc2V0KGVsZW1lbnQpO1xuXG4gICAgZm9yIChjb25zdCBbaSwgW3Byb3AsICwgc3RhcnQsIGVuZF1dIG9mIE9iamVjdC5lbnRyaWVzKGRpcnMpKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldE9mZnNldCA9XG4gICAgICAgICAgICBhdHRhY2gudGFyZ2V0W2ldID09PSBhdHRhY2guZWxlbWVudFtpXSA/IG9mZnNldFZpZXdwb3J0KHRhcmdldFtpXSkgOiBvZmZzZXQodGFyZ2V0W2ldKTtcblxuICAgICAgICBlbE9mZnNldCA9IGFwcGx5T2Zmc2V0KFxuICAgICAgICAgICAgZWxPZmZzZXQsXG4gICAgICAgICAgICB0YXJnZXRPZmZzZXRbc3RhcnRdIC1cbiAgICAgICAgICAgICAgICBlbE9mZnNldFtzdGFydF0gK1xuICAgICAgICAgICAgICAgIG1vdmVCeShhdHRhY2gudGFyZ2V0W2ldLCBlbmQsIHRhcmdldE9mZnNldFtwcm9wXSkgLVxuICAgICAgICAgICAgICAgIG1vdmVCeShhdHRhY2guZWxlbWVudFtpXSwgZW5kLCBlbE9mZnNldFtwcm9wXSkgK1xuICAgICAgICAgICAgICAgICtvZmZzZXRCeVtpXSxcbiAgICAgICAgICAgIGlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsT2Zmc2V0O1xufVxuXG5mdW5jdGlvbiBhcHBseU9mZnNldChwb3NpdGlvbiwgb2Zmc2V0LCBpKSB7XG4gICAgY29uc3QgWywgZGlyLCBzdGFydCwgZW5kXSA9IGRpcnNbaV07XG4gICAgY29uc3QgbmV3UG9zID0geyAuLi5wb3NpdGlvbiB9O1xuICAgIG5ld1Bvc1tzdGFydF0gPSBwb3NpdGlvbltkaXJdID0gcG9zaXRpb25bc3RhcnRdICsgb2Zmc2V0O1xuICAgIG5ld1Bvc1tlbmRdICs9IG9mZnNldDtcbiAgICByZXR1cm4gbmV3UG9zO1xufVxuXG5mdW5jdGlvbiBtb3ZlQnkoYXR0YWNoLCBlbmQsIGRpbSkge1xuICAgIHJldHVybiBhdHRhY2ggPT09ICdjZW50ZXInID8gZGltIC8gMiA6IGF0dGFjaCA9PT0gZW5kID8gZGltIDogMDtcbn1cblxuZnVuY3Rpb24gZ2V0Vmlld3BvcnQoZWxlbWVudCwgdGFyZ2V0LCB2aWV3cG9ydE9mZnNldCwgYm91bmRhcnksIGkpIHtcbiAgICBsZXQgdmlld3BvcnQgPSBnZXRJbnRlcnNlY3Rpb25BcmVhKC4uLmNvbW1vblNjcm9sbFBhcmVudHMoZWxlbWVudCwgdGFyZ2V0KS5tYXAob2Zmc2V0Vmlld3BvcnQpKTtcblxuICAgIGlmICh2aWV3cG9ydE9mZnNldCkge1xuICAgICAgICB2aWV3cG9ydFtkaXJzW2ldWzJdXSArPSB2aWV3cG9ydE9mZnNldDtcbiAgICAgICAgdmlld3BvcnRbZGlyc1tpXVszXV0gLT0gdmlld3BvcnRPZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGJvdW5kYXJ5KSB7XG4gICAgICAgIHZpZXdwb3J0ID0gZ2V0SW50ZXJzZWN0aW9uQXJlYShcbiAgICAgICAgICAgIHZpZXdwb3J0LFxuICAgICAgICAgICAgb2Zmc2V0KGlzQXJyYXkoYm91bmRhcnkpID8gYm91bmRhcnlbaV0gOiBib3VuZGFyeSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmlld3BvcnQ7XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbEFyZWEoZWxlbWVudCwgdGFyZ2V0LCB2aWV3cG9ydE9mZnNldCwgaSkge1xuICAgIGNvbnN0IFtwcm9wLCBheGlzLCBzdGFydCwgZW5kXSA9IGRpcnNbaV07XG4gICAgY29uc3QgW3Njcm9sbEVsZW1lbnRdID0gY29tbW9uU2Nyb2xsUGFyZW50cyhlbGVtZW50LCB0YXJnZXQpO1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gb2Zmc2V0Vmlld3BvcnQoc2Nyb2xsRWxlbWVudCk7XG5cbiAgICBpZiAoWydhdXRvJywgJ3Njcm9sbCddLmluY2x1ZGVzKGNzcyhzY3JvbGxFbGVtZW50LCBgb3ZlcmZsb3ctJHtheGlzfWApKSkge1xuICAgICAgICB2aWV3cG9ydFtzdGFydF0gLT0gc2Nyb2xsRWxlbWVudFtgc2Nyb2xsJHt1Y2ZpcnN0KHN0YXJ0KX1gXTtcbiAgICAgICAgdmlld3BvcnRbZW5kXSA9IHZpZXdwb3J0W3N0YXJ0XSArIHNjcm9sbEVsZW1lbnRbYHNjcm9sbCR7dWNmaXJzdChwcm9wKX1gXTtcbiAgICB9XG5cbiAgICB2aWV3cG9ydFtzdGFydF0gKz0gdmlld3BvcnRPZmZzZXQ7XG4gICAgdmlld3BvcnRbZW5kXSAtPSB2aWV3cG9ydE9mZnNldDtcblxuICAgIHJldHVybiB2aWV3cG9ydDtcbn1cblxuZnVuY3Rpb24gY29tbW9uU2Nyb2xsUGFyZW50cyhlbGVtZW50LCB0YXJnZXQpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dQYXJlbnRzKHRhcmdldCkuZmlsdGVyKChwYXJlbnQpID0+IHdpdGhpbihlbGVtZW50LCBwYXJlbnQpKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW50ZXJzZWN0aW9uQXJlYSguLi5yZWN0cykge1xuICAgIGxldCBhcmVhID0ge307XG4gICAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgICAgIGZvciAoY29uc3QgWywgLCBzdGFydCwgZW5kXSBvZiBkaXJzKSB7XG4gICAgICAgICAgICBhcmVhW3N0YXJ0XSA9IE1hdGgubWF4KGFyZWFbc3RhcnRdIHx8IDAsIHJlY3Rbc3RhcnRdKTtcbiAgICAgICAgICAgIGFyZWFbZW5kXSA9IE1hdGgubWluKC4uLlthcmVhW2VuZF0sIHJlY3RbZW5kXV0uZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJlYTtcbn1cblxuZnVuY3Rpb24gaXNXaXRoaW4ocG9zaXRpb25BLCBwb3NpdGlvbkIsIGkpIHtcbiAgICBjb25zdCBbLCAsIHN0YXJ0LCBlbmRdID0gZGlyc1tpXTtcbiAgICByZXR1cm4gcG9zaXRpb25BW3N0YXJ0XSA+PSBwb3NpdGlvbkJbc3RhcnRdICYmIHBvc2l0aW9uQVtlbmRdIDw9IHBvc2l0aW9uQltlbmRdO1xufVxuXG5mdW5jdGlvbiBmbGlwKGVsZW1lbnQsIHRhcmdldCwgeyBvZmZzZXQsIGF0dGFjaCB9LCBpKSB7XG4gICAgcmV0dXJuIGF0dGFjaFRvKGVsZW1lbnQsIHRhcmdldCwge1xuICAgICAgICBhdHRhY2g6IHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGZsaXBBdHRhY2goYXR0YWNoLmVsZW1lbnQsIGkpLFxuICAgICAgICAgICAgdGFyZ2V0OiBmbGlwQXR0YWNoKGF0dGFjaC50YXJnZXQsIGkpLFxuICAgICAgICB9LFxuICAgICAgICBvZmZzZXQ6IGZsaXBPZmZzZXQob2Zmc2V0LCBpKSxcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZmxpcEF4aXMoZWxlbWVudCwgdGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGdldFBvc2l0aW9uKGVsZW1lbnQsIHRhcmdldCwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBhdHRhY2g6IHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IG9wdGlvbnMuYXR0YWNoLmVsZW1lbnQubWFwKGZsaXBBdHRhY2hBeGlzKS5yZXZlcnNlKCksXG4gICAgICAgICAgICB0YXJnZXQ6IG9wdGlvbnMuYXR0YWNoLnRhcmdldC5tYXAoZmxpcEF0dGFjaEF4aXMpLnJldmVyc2UoKSxcbiAgICAgICAgfSxcbiAgICAgICAgb2Zmc2V0OiBvcHRpb25zLm9mZnNldC5yZXZlcnNlKCksXG4gICAgICAgIHBsYWNlbWVudDogb3B0aW9ucy5wbGFjZW1lbnQucmV2ZXJzZSgpLFxuICAgICAgICByZWN1cnNpb246IHRydWUsXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGZsaXBBdHRhY2goYXR0YWNoLCBpKSB7XG4gICAgY29uc3QgbmV3QXR0YWNoID0gWy4uLmF0dGFjaF07XG4gICAgY29uc3QgaW5kZXggPSBkaXJzW2ldLmluZGV4T2YoYXR0YWNoW2ldKTtcbiAgICBpZiAofmluZGV4KSB7XG4gICAgICAgIG5ld0F0dGFjaFtpXSA9IGRpcnNbaV1bMSAtIChpbmRleCAlIDIpICsgMl07XG4gICAgfVxuICAgIHJldHVybiBuZXdBdHRhY2g7XG59XG5cbmZ1bmN0aW9uIGZsaXBBdHRhY2hBeGlzKHByb3ApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkaXJzW2ldLmluZGV4T2YocHJvcCk7XG4gICAgICAgIGlmICh+aW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBkaXJzWzEgLSBpXVsoaW5kZXggJSAyKSArIDJdO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBmbGlwT2Zmc2V0KG9mZnNldCwgaSkge1xuICAgIG9mZnNldCA9IFsuLi5vZmZzZXRdO1xuICAgIG9mZnNldFtpXSAqPSAtMTtcbiAgICByZXR1cm4gb2Zmc2V0O1xufVxuIiwiaW1wb3J0IHsgaGFzT3duLCBpc0VxdWFsLCBpc1BsYWluT2JqZWN0IH0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0V2F0Y2hlcyhpbnN0YW5jZSkge1xuICAgIGluc3RhbmNlLl93YXRjaGVzID0gW107XG4gICAgZm9yIChjb25zdCB3YXRjaGVzIG9mIGluc3RhbmNlLiRvcHRpb25zLndhdGNoIHx8IFtdKSB7XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHdhdGNoXSBvZiBPYmplY3QuZW50cmllcyh3YXRjaGVzKSkge1xuICAgICAgICAgICAgcmVnaXN0ZXJXYXRjaChpbnN0YW5jZSwgd2F0Y2gsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluc3RhbmNlLl9pbml0aWFsID0gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyV2F0Y2goaW5zdGFuY2UsIHdhdGNoLCBuYW1lKSB7XG4gICAgaW5zdGFuY2UuX3dhdGNoZXMucHVzaCh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIC4uLihpc1BsYWluT2JqZWN0KHdhdGNoKSA/IHdhdGNoIDogeyBoYW5kbGVyOiB3YXRjaCB9KSxcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bldhdGNoZXMoaW5zdGFuY2UsIHZhbHVlcykge1xuICAgIGZvciAoY29uc3QgeyBuYW1lLCBoYW5kbGVyLCBpbW1lZGlhdGUgPSB0cnVlIH0gb2YgaW5zdGFuY2UuX3dhdGNoZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGluc3RhbmNlLl9pbml0aWFsICYmIGltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgIChoYXNPd24odmFsdWVzLCBuYW1lKSAmJiAhaXNFcXVhbCh2YWx1ZXNbbmFtZV0sIGluc3RhbmNlW25hbWVdKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBoYW5kbGVyLmNhbGwoaW5zdGFuY2UsIGluc3RhbmNlW25hbWVdLCB2YWx1ZXNbbmFtZV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluc3RhbmNlLl9pbml0aWFsID0gZmFsc2U7XG59XG4iLCJpbXBvcnQgeyBhc3NpZ24sIGZhc3Rkb20sIGlzUGxhaW5PYmplY3QgfSBmcm9tICd1aWtpdC11dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRVcGRhdGVzKGluc3RhbmNlKSB7XG4gICAgaW5zdGFuY2UuX2RhdGEgPSB7fTtcbiAgICBpbnN0YW5jZS5fdXBkYXRlcyA9IFsuLi4oaW5zdGFuY2UuJG9wdGlvbnMudXBkYXRlIHx8IFtdKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwZW5kVXBkYXRlKGluc3RhbmNlLCB1cGRhdGUpIHtcbiAgICBpbnN0YW5jZS5fdXBkYXRlcy51bnNoaWZ0KHVwZGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclVwZGF0ZURhdGEoaW5zdGFuY2UpIHtcbiAgICBkZWxldGUgaW5zdGFuY2UuX2RhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxsVXBkYXRlKGluc3RhbmNlLCBlID0gJ3VwZGF0ZScpIHtcbiAgICBpZiAoIWluc3RhbmNlLl9jb25uZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghaW5zdGFuY2UuX3VwZGF0ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWluc3RhbmNlLl9xdWV1ZWQpIHtcbiAgICAgICAgaW5zdGFuY2UuX3F1ZXVlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgZmFzdGRvbS5yZWFkKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZS5fY29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgcnVuVXBkYXRlcyhpbnN0YW5jZSwgaW5zdGFuY2UuX3F1ZXVlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgaW5zdGFuY2UuX3F1ZXVlZDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5zdGFuY2UuX3F1ZXVlZC5hZGQoZS50eXBlIHx8IGUpO1xufVxuXG5mdW5jdGlvbiBydW5VcGRhdGVzKGluc3RhbmNlLCB0eXBlcykge1xuICAgIGZvciAoY29uc3QgeyByZWFkLCB3cml0ZSwgZXZlbnRzID0gW10gfSBvZiBpbnN0YW5jZS5fdXBkYXRlcykge1xuICAgICAgICBpZiAoIXR5cGVzLmhhcygndXBkYXRlJykgJiYgIWV2ZW50cy5zb21lKCh0eXBlKSA9PiB0eXBlcy5oYXModHlwZSkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIGlmIChyZWFkKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZWFkLmNhbGwoaW5zdGFuY2UsIGluc3RhbmNlLl9kYXRhLCB0eXBlcyk7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgaXNQbGFpbk9iamVjdChyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgYXNzaWduKGluc3RhbmNlLl9kYXRhLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdyaXRlICYmIHJlc3VsdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGZhc3Rkb20ud3JpdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5fY29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlLmNhbGwoaW5zdGFuY2UsIGluc3RhbmNlLl9kYXRhLCB0eXBlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBydW5XYXRjaGVzIH0gZnJvbSAnLi93YXRjaCc7XG5pbXBvcnQgeyBjYWxsVXBkYXRlLCBwcmVwZW5kVXBkYXRlIH0gZnJvbSAnLi91cGRhdGUnO1xuaW1wb3J0IHsgaGFzT3duLCBpc1VuZGVmaW5lZCB9IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdENvbXB1dGVkKGluc3RhbmNlKSB7XG4gICAgY29uc3QgeyBjb21wdXRlZCB9ID0gaW5zdGFuY2UuJG9wdGlvbnM7XG5cbiAgICBpbnN0YW5jZS5fY29tcHV0ZWQgPSB7fTtcblxuICAgIGlmIChjb21wdXRlZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wdXRlZCkge1xuICAgICAgICAgICAgcmVnaXN0ZXJDb21wdXRlZChpbnN0YW5jZSwga2V5LCBjb21wdXRlZFtrZXldKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ29tcHV0ZWQoaW5zdGFuY2UsIGtleSwgY2IpIHtcbiAgICBpbnN0YW5jZS5faGFzQ29tcHV0ZWQgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0YW5jZSwga2V5LCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG5cbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgY29uc3QgeyBfY29tcHV0ZWQsICRwcm9wcywgJGVsIH0gPSBpbnN0YW5jZTtcblxuICAgICAgICAgICAgaWYgKCFoYXNPd24oX2NvbXB1dGVkLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgX2NvbXB1dGVkW2tleV0gPSAoY2IuZ2V0IHx8IGNiKS5jYWxsKGluc3RhbmNlLCAkcHJvcHMsICRlbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfY29tcHV0ZWRba2V5XTtcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgX2NvbXB1dGVkIH0gPSBpbnN0YW5jZTtcblxuICAgICAgICAgICAgX2NvbXB1dGVkW2tleV0gPSBjYi5zZXQgPyBjYi5zZXQuY2FsbChpbnN0YW5jZSwgdmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChfY29tcHV0ZWRba2V5XSkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgX2NvbXB1dGVkW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q29tcHV0ZWRVcGRhdGVzKGluc3RhbmNlKSB7XG4gICAgaWYgKCFpbnN0YW5jZS5faGFzQ29tcHV0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByZXBlbmRVcGRhdGUoaW5zdGFuY2UsIHtcbiAgICAgICAgcmVhZDogKCkgPT4gcnVuV2F0Y2hlcyhpbnN0YW5jZSwgcmVzZXRDb21wdXRlZChpbnN0YW5jZSkpLFxuICAgICAgICBldmVudHM6IFsncmVzaXplJywgJ2NvbXB1dGVkJ10sXG4gICAgfSk7XG5cbiAgICByZWdpc3RlckNvbXB1dGVkT2JzZXJ2ZXIoKTtcbiAgICBpbnN0YW5jZXMuYWRkKGluc3RhbmNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2Nvbm5lY3RDb21wdXRlZFVwZGF0ZXMoaW5zdGFuY2UpIHtcbiAgICBpbnN0YW5jZXM/LmRlbGV0ZShpbnN0YW5jZSk7XG4gICAgcmVzZXRDb21wdXRlZChpbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q29tcHV0ZWQoaW5zdGFuY2UpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB7IC4uLmluc3RhbmNlLl9jb21wdXRlZCB9O1xuICAgIGluc3RhbmNlLl9jb21wdXRlZCA9IHt9O1xuICAgIHJldHVybiB2YWx1ZXM7XG59XG5cbmxldCBvYnNlcnZlcjtcbmxldCBpbnN0YW5jZXM7XG5mdW5jdGlvbiByZWdpc3RlckNvbXB1dGVkT2JzZXJ2ZXIoKSB7XG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbnN0YW5jZXMgPSBuZXcgU2V0KCk7XG4gICAgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7XG4gICAgICAgICAgICBjYWxsVXBkYXRlKGluc3RhbmNlLCAnY29tcHV0ZWQnKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQsIHtcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgaGFzT3duLCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1BsYWluT2JqZWN0LCBpc1N0cmluZywgb24gfSBmcm9tICd1aWtpdC11dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRFdmVudHMoaW5zdGFuY2UpIHtcbiAgICBpbnN0YW5jZS5fZXZlbnRzID0gW107XG4gICAgZm9yIChjb25zdCBldmVudCBvZiBpbnN0YW5jZS4kb3B0aW9ucy5ldmVudHMgfHwgW10pIHtcbiAgICAgICAgaWYgKGhhc093bihldmVudCwgJ2hhbmRsZXInKSkge1xuICAgICAgICAgICAgcmVnaXN0ZXJFdmVudChpbnN0YW5jZSwgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZWdpc3RlckV2ZW50KGluc3RhbmNlLCBldmVudFtrZXldLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5iaW5kRXZlbnRzKGluc3RhbmNlKSB7XG4gICAgaW5zdGFuY2UuX2V2ZW50cy5mb3JFYWNoKCh1bmJpbmQpID0+IHVuYmluZCgpKTtcbiAgICBkZWxldGUgaW5zdGFuY2UuX2V2ZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnQoaW5zdGFuY2UsIGV2ZW50LCBrZXkpIHtcbiAgICBsZXQgeyBuYW1lLCBlbCwgaGFuZGxlciwgY2FwdHVyZSwgcGFzc2l2ZSwgZGVsZWdhdGUsIGZpbHRlciwgc2VsZiB9ID0gaXNQbGFpbk9iamVjdChldmVudClcbiAgICAgICAgPyBldmVudFxuICAgICAgICA6IHsgbmFtZToga2V5LCBoYW5kbGVyOiBldmVudCB9O1xuICAgIGVsID0gaXNGdW5jdGlvbihlbCkgPyBlbC5jYWxsKGluc3RhbmNlLCBpbnN0YW5jZSkgOiBlbCB8fCBpbnN0YW5jZS4kZWw7XG5cbiAgICBpZiAoaXNBcnJheShlbCkpIHtcbiAgICAgICAgZWwuZm9yRWFjaCgoZWwpID0+IHJlZ2lzdGVyRXZlbnQoaW5zdGFuY2UsIHsgLi4uZXZlbnQsIGVsIH0sIGtleSkpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFlbCB8fCAoZmlsdGVyICYmICFmaWx0ZXIuY2FsbChpbnN0YW5jZSkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbnN0YW5jZS5fZXZlbnRzLnB1c2goXG4gICAgICAgIG9uKFxuICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgZGVsZWdhdGUgPyAoaXNTdHJpbmcoZGVsZWdhdGUpID8gZGVsZWdhdGUgOiBkZWxlZ2F0ZS5jYWxsKGluc3RhbmNlLCBpbnN0YW5jZSkpIDogbnVsbCxcbiAgICAgICAgICAgIGlzU3RyaW5nKGhhbmRsZXIpID8gaW5zdGFuY2VbaGFuZGxlcl0gOiBoYW5kbGVyLmJpbmQoaW5zdGFuY2UpLFxuICAgICAgICAgICAgeyBwYXNzaXZlLCBjYXB0dXJlLCBzZWxmIH1cbiAgICAgICAgKVxuICAgICk7XG59XG4iLCJpbXBvcnQgeyByZWdpc3RlcldhdGNoIH0gZnJvbSAnLi93YXRjaCc7XG5pbXBvcnQgeyByZWdpc3RlckNvbXB1dGVkIH0gZnJvbSAnLi9jb21wdXRlZCc7XG5pbXBvcnQgeyBoYXNPd24sIGluY2x1ZGVzLCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1N0cmluZyB9IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdE9ic2VydmVycyhpbnN0YW5jZSkge1xuICAgIGluc3RhbmNlLl9vYnNlcnZlcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IG9ic2VydmVyIG9mIGluc3RhbmNlLiRvcHRpb25zLm9ic2VydmUgfHwgW10pIHtcbiAgICAgICAgaWYgKGhhc093bihvYnNlcnZlciwgJ2hhbmRsZXInKSkge1xuICAgICAgICAgICAgcmVnaXN0ZXJPYnNlcnZhYmxlKGluc3RhbmNlLCBvYnNlcnZlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9ic2VydmFibGUgb2Ygb2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICByZWdpc3Rlck9ic2VydmFibGUoaW5zdGFuY2UsIG9ic2VydmFibGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJPYnNlcnZlcihpbnN0YW5jZSwgLi4ub2JzZXJ2ZXIpIHtcbiAgICBpbnN0YW5jZS5fb2JzZXJ2ZXJzLnB1c2goLi4ub2JzZXJ2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzY29ubmVjdE9ic2VydmVycyhpbnN0YW5jZSkge1xuICAgIGZvciAoY29uc3Qgb2JzZXJ2ZXIgb2YgaW5zdGFuY2UuX29ic2VydmVycykge1xuICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWdpc3Rlck9ic2VydmFibGUoaW5zdGFuY2UsIG9ic2VydmFibGUpIHtcbiAgICBsZXQgeyBvYnNlcnZlLCB0YXJnZXQgPSBpbnN0YW5jZS4kZWwsIGhhbmRsZXIsIG9wdGlvbnMsIGZpbHRlciwgYXJncyB9ID0gb2JzZXJ2YWJsZTtcblxuICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlci5jYWxsKGluc3RhbmNlLCBpbnN0YW5jZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IGBfb2JzZXJ2ZSR7aW5zdGFuY2UuX29ic2VydmVycy5sZW5ndGh9YDtcbiAgICBpZiAoaXNGdW5jdGlvbih0YXJnZXQpICYmICFoYXNPd24oaW5zdGFuY2UsIGtleSkpIHtcbiAgICAgICAgcmVnaXN0ZXJDb21wdXRlZChpbnN0YW5jZSwga2V5LCAoKSA9PiB0YXJnZXQuY2FsbChpbnN0YW5jZSwgaW5zdGFuY2UpKTtcbiAgICB9XG5cbiAgICBoYW5kbGVyID0gaXNTdHJpbmcoaGFuZGxlcikgPyBpbnN0YW5jZVtoYW5kbGVyXSA6IGhhbmRsZXIuYmluZChpbnN0YW5jZSk7XG5cbiAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5jYWxsKGluc3RhbmNlLCBpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0cyA9IGhhc093bihpbnN0YW5jZSwga2V5KSA/IGluc3RhbmNlW2tleV0gOiB0YXJnZXQ7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBvYnNlcnZlKHRhcmdldHMsIGhhbmRsZXIsIG9wdGlvbnMsIGFyZ3MpO1xuXG4gICAgaWYgKGlzRnVuY3Rpb24odGFyZ2V0KSAmJiBpc0FycmF5KGluc3RhbmNlW2tleV0pICYmIG9ic2VydmVyLnVub2JzZXJ2ZSkge1xuICAgICAgICByZWdpc3RlcldhdGNoKGluc3RhbmNlLCB7IGhhbmRsZXI6IHVwZGF0ZVRhcmdldHMob2JzZXJ2ZXIpLCBpbW1lZGlhdGU6IGZhbHNlIH0sIGtleSk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPYnNlcnZlcihpbnN0YW5jZSwgb2JzZXJ2ZXIpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUYXJnZXRzKG9ic2VydmVyKSB7XG4gICAgcmV0dXJuICh0YXJnZXRzLCBwcmV2KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHByZXYpIHtcbiAgICAgICAgICAgICFpbmNsdWRlcyh0YXJnZXRzLCB0YXJnZXQpICYmIG9ic2VydmVyLnVub2JzZXJ2ZSh0YXJnZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgICAgICAgIWluY2x1ZGVzKHByZXYsIHRhcmdldCkgJiYgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbiIsImltcG9ydCB7XG4gICAgaGFzT3duLFxuICAgIGluY2x1ZGVzLFxuICAgIGlzQXJyYXksXG4gICAgaXNGdW5jdGlvbixcbiAgICBpc051bWVyaWMsXG4gICAgaXNTdHJpbmcsXG4gICAgaXNVbmRlZmluZWQsXG4gICAgc29ydEJ5LFxuICAgIHN0YXJ0c1dpdGgsXG4gICAgdG9Cb29sZWFuLFxuICAgIHRvTnVtYmVyLFxufSBmcm9tICd1aWtpdC11dGlsJztcblxuY29uc3Qgc3RyYXRzID0ge307XG5cbnN0cmF0cy5ldmVudHMgPVxuICAgIHN0cmF0cy53YXRjaCA9XG4gICAgc3RyYXRzLm9ic2VydmUgPVxuICAgIHN0cmF0cy5jcmVhdGVkID1cbiAgICBzdHJhdHMuYmVmb3JlQ29ubmVjdCA9XG4gICAgc3RyYXRzLmNvbm5lY3RlZCA9XG4gICAgc3RyYXRzLmJlZm9yZURpc2Nvbm5lY3QgPVxuICAgIHN0cmF0cy5kaXNjb25uZWN0ZWQgPVxuICAgIHN0cmF0cy5kZXN0cm95ID1cbiAgICAgICAgY29uY2F0U3RyYXQ7XG5cbi8vIGFyZ3Mgc3RyYXRlZ3lcbnN0cmF0cy5hcmdzID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgICByZXR1cm4gY2hpbGRWYWwgIT09IGZhbHNlICYmIGNvbmNhdFN0cmF0KGNoaWxkVmFsIHx8IHBhcmVudFZhbCk7XG59O1xuXG4vLyB1cGRhdGUgc3RyYXRlZ3lcbnN0cmF0cy51cGRhdGUgPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCkge1xuICAgIHJldHVybiBzb3J0QnkoXG4gICAgICAgIGNvbmNhdFN0cmF0KHBhcmVudFZhbCwgaXNGdW5jdGlvbihjaGlsZFZhbCkgPyB7IHJlYWQ6IGNoaWxkVmFsIH0gOiBjaGlsZFZhbCksXG4gICAgICAgICdvcmRlcidcbiAgICApO1xufTtcblxuLy8gcHJvcGVydHkgc3RyYXRlZ3lcbnN0cmF0cy5wcm9wcyA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgaWYgKGlzQXJyYXkoY2hpbGRWYWwpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGNoaWxkVmFsKSB7XG4gICAgICAgICAgICB2YWx1ZVtrZXldID0gU3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkVmFsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmF0cy5tZXRob2RzKHBhcmVudFZhbCwgY2hpbGRWYWwpO1xufTtcblxuLy8gZXh0ZW5kIHN0cmF0ZWd5XG5zdHJhdHMuY29tcHV0ZWQgPSBzdHJhdHMubWV0aG9kcyA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgcmV0dXJuIGNoaWxkVmFsID8gKHBhcmVudFZhbCA/IHsgLi4ucGFyZW50VmFsLCAuLi5jaGlsZFZhbCB9IDogY2hpbGRWYWwpIDogcGFyZW50VmFsO1xufTtcblxuLy8gZGF0YSBzdHJhdGVneVxuc3RyYXRzLmkxOG4gPSBzdHJhdHMuZGF0YSA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSkge1xuICAgIGlmICghdm0pIHtcbiAgICAgICAgaWYgKCFjaGlsZFZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudFZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyZW50VmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRWYWw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZtKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VGbkRhdGEocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZUZuRGF0YShwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSk7XG59O1xuXG5mdW5jdGlvbiBtZXJnZUZuRGF0YShwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSkge1xuICAgIHJldHVybiBzdHJhdHMuY29tcHV0ZWQoXG4gICAgICAgIGlzRnVuY3Rpb24ocGFyZW50VmFsKSA/IHBhcmVudFZhbC5jYWxsKHZtLCB2bSkgOiBwYXJlbnRWYWwsXG4gICAgICAgIGlzRnVuY3Rpb24oY2hpbGRWYWwpID8gY2hpbGRWYWwuY2FsbCh2bSwgdm0pIDogY2hpbGRWYWxcbiAgICApO1xufVxuXG4vLyBjb25jYXQgc3RyYXRlZ3lcbmZ1bmN0aW9uIGNvbmNhdFN0cmF0KHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgICBwYXJlbnRWYWwgPSBwYXJlbnRWYWwgJiYgIWlzQXJyYXkocGFyZW50VmFsKSA/IFtwYXJlbnRWYWxdIDogcGFyZW50VmFsO1xuXG4gICAgcmV0dXJuIGNoaWxkVmFsXG4gICAgICAgID8gcGFyZW50VmFsXG4gICAgICAgICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpXG4gICAgICAgICAgICA6IGlzQXJyYXkoY2hpbGRWYWwpXG4gICAgICAgICAgICA/IGNoaWxkVmFsXG4gICAgICAgICAgICA6IFtjaGlsZFZhbF1cbiAgICAgICAgOiBwYXJlbnRWYWw7XG59XG5cbi8vIGRlZmF1bHQgc3RyYXRlZ3lcbmZ1bmN0aW9uIGRlZmF1bHRTdHJhdChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgcmV0dXJuIGlzVW5kZWZpbmVkKGNoaWxkVmFsKSA/IHBhcmVudFZhbCA6IGNoaWxkVmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VPcHRpb25zKHBhcmVudCwgY2hpbGQsIHZtKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oY2hpbGQpKSB7XG4gICAgICAgIGNoaWxkID0gY2hpbGQub3B0aW9ucztcbiAgICB9XG5cbiAgICBpZiAoY2hpbGQuZXh0ZW5kcykge1xuICAgICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5leHRlbmRzLCB2bSk7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkLm1peGlucykge1xuICAgICAgICBmb3IgKGNvbnN0IG1peGluIG9mIGNoaWxkLm1peGlucykge1xuICAgICAgICAgICAgcGFyZW50ID0gbWVyZ2VPcHRpb25zKHBhcmVudCwgbWl4aW4sIHZtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IGluIHBhcmVudCkge1xuICAgICAgICBtZXJnZUtleShrZXkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IGluIGNoaWxkKSB7XG4gICAgICAgIGlmICghaGFzT3duKHBhcmVudCwga2V5KSkge1xuICAgICAgICAgICAgbWVyZ2VLZXkoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlS2V5KGtleSkge1xuICAgICAgICBvcHRpb25zW2tleV0gPSAoc3RyYXRzW2tleV0gfHwgZGVmYXVsdFN0cmF0KShwYXJlbnRba2V5XSwgY2hpbGRba2V5XSwgdm0pO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcHRpb25zKG9wdGlvbnMsIGFyZ3MgPSBbXSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zXG4gICAgICAgICAgICA/IHN0YXJ0c1dpdGgob3B0aW9ucywgJ3snKVxuICAgICAgICAgICAgICAgID8gSlNPTi5wYXJzZShvcHRpb25zKVxuICAgICAgICAgICAgICAgIDogYXJncy5sZW5ndGggJiYgIWluY2x1ZGVzKG9wdGlvbnMsICc6JylcbiAgICAgICAgICAgICAgICA/IHsgW2FyZ3NbMF1dOiBvcHRpb25zIH1cbiAgICAgICAgICAgICAgICA6IG9wdGlvbnMuc3BsaXQoJzsnKS5yZWR1Y2UoKG9wdGlvbnMsIG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IG9wdGlvbi5zcGxpdCgvOiguKikvKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICYmICFpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1trZXkudHJpbSgpXSA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICB9LCB7fSlcbiAgICAgICAgICAgIDoge307XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29lcmNlKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT09IEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHRvQm9vbGVhbih2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBOdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdsaXN0Jykge1xuICAgICAgICByZXR1cm4gdG9MaXN0KHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IE9iamVjdCAmJiBpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlT3B0aW9ucyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGUgPyB0eXBlKHZhbHVlKSA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiB0b0xpc3QodmFsdWUpIHtcbiAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZVxuICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICAgIC5zcGxpdCgvLCg/IVteKF0qXFwpKS8pXG4gICAgICAgICAgICAgIC5tYXAoKHZhbHVlKSA9PiAoaXNOdW1lcmljKHZhbHVlKSA/IHRvTnVtYmVyKHZhbHVlKSA6IHRvQm9vbGVhbih2YWx1ZS50cmltKCkpKSlcbiAgICAgICAgOiBbdmFsdWVdO1xufVxuIiwiaW1wb3J0IHsgcmVnaXN0ZXJPYnNlcnZlciB9IGZyb20gJy4vb2JzZXJ2ZXInO1xuaW1wb3J0IHsgY29lcmNlLCBwYXJzZU9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgY2FtZWxpemUsIGRhdGEgYXMgZ2V0RGF0YSwgaGFzT3duLCBoeXBoZW5hdGUsIGlzVW5kZWZpbmVkLCBzdGFydHNXaXRoIH0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0UHJvcHMoaW5zdGFuY2UpIHtcbiAgICBjb25zdCBwcm9wcyA9IGdldFByb3BzKGluc3RhbmNlLiRvcHRpb25zKTtcblxuICAgIGZvciAobGV0IGtleSBpbiBwcm9wcykge1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHByb3BzW2tleV0pKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS4kcHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBleGNsdWRlID0gW2luc3RhbmNlLiRvcHRpb25zLmNvbXB1dGVkLCBpbnN0YW5jZS4kb3B0aW9ucy5tZXRob2RzXTtcbiAgICBmb3IgKGxldCBrZXkgaW4gaW5zdGFuY2UuJHByb3BzKSB7XG4gICAgICAgIGlmIChrZXkgaW4gcHJvcHMgJiYgbm90SW4oZXhjbHVkZSwga2V5KSkge1xuICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IGluc3RhbmNlLiRwcm9wc1trZXldO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcHMob3B0cykge1xuICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICBjb25zdCB7IGFyZ3MgPSBbXSwgcHJvcHMgPSB7fSwgZWwsIGlkIH0gPSBvcHRzO1xuXG4gICAgaWYgKCFwcm9wcykge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xuICAgICAgICBjb25zdCBwcm9wID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldERhdGEoZWwsIHByb3ApO1xuXG4gICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgPSBwcm9wc1trZXldID09PSBCb29sZWFuICYmIHZhbHVlID09PSAnJyA/IHRydWUgOiBjb2VyY2UocHJvcHNba2V5XSwgdmFsdWUpO1xuXG4gICAgICAgIGlmIChwcm9wID09PSAndGFyZ2V0JyAmJiBzdGFydHNXaXRoKHZhbHVlLCAnXycpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMoZ2V0RGF0YShlbCwgaWQpLCBhcmdzKTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcHJvcCA9IGNhbWVsaXplKGtleSk7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQocHJvcHNbcHJvcF0pKSB7XG4gICAgICAgICAgICBkYXRhW3Byb3BdID0gY29lcmNlKHByb3BzW3Byb3BdLCBvcHRpb25zW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIG5vdEluKG9wdGlvbnMsIGtleSkge1xuICAgIHJldHVybiBvcHRpb25zLmV2ZXJ5KChhcnIpID0+ICFhcnIgfHwgIWhhc093bihhcnIsIGtleSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdFByb3BzT2JzZXJ2ZXIoaW5zdGFuY2UpIHtcbiAgICBjb25zdCB7ICRvcHRpb25zLCAkcHJvcHMgfSA9IGluc3RhbmNlO1xuICAgIGNvbnN0IHsgaWQsIHByb3BzLCBlbCB9ID0gJG9wdGlvbnM7XG5cbiAgICBpZiAoIXByb3BzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gT2JqZWN0LmtleXMocHJvcHMpO1xuICAgIGNvbnN0IGZpbHRlciA9IGF0dHJpYnV0ZXMubWFwKChrZXkpID0+IGh5cGhlbmF0ZShrZXkpKS5jb25jYXQoaWQpO1xuXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigocmVjb3JkcykgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gZ2V0UHJvcHMoJG9wdGlvbnMpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZWNvcmRzLnNvbWUoKHsgYXR0cmlidXRlTmFtZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcCA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZSgnZGF0YS0nLCAnJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChwcm9wID09PSBpZCA/IGF0dHJpYnV0ZXMgOiBbY2FtZWxpemUocHJvcCksIGNhbWVsaXplKGF0dHJpYnV0ZU5hbWUpXSkuc29tZShcbiAgICAgICAgICAgICAgICAgICAgKHByb3ApID0+ICFpc1VuZGVmaW5lZChkYXRhW3Byb3BdKSAmJiBkYXRhW3Byb3BdICE9PSAkcHJvcHNbcHJvcF1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS4kcmVzZXQoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbCwge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IGZpbHRlci5jb25jYXQoZmlsdGVyLm1hcCgoa2V5KSA9PiBgZGF0YS0ke2tleX1gKSksXG4gICAgfSk7XG5cbiAgICByZWdpc3Rlck9ic2VydmVyKGluc3RhbmNlLCBvYnNlcnZlcik7XG59XG4iLCJpbXBvcnQgeyBkaXNjb25uZWN0Q29tcHV0ZWRVcGRhdGVzLCBpbml0Q29tcHV0ZWRVcGRhdGVzIH0gZnJvbSAnLi9jb21wdXRlZCc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZyc7XG5pbXBvcnQgeyBpbml0V2F0Y2hlcyB9IGZyb20gJy4vd2F0Y2gnO1xuaW1wb3J0IHsgY2FsbFVwZGF0ZSwgY2xlYXJVcGRhdGVEYXRhLCBpbml0VXBkYXRlcyB9IGZyb20gJy4vdXBkYXRlJztcbmltcG9ydCB7IGluaXRFdmVudHMsIHVuYmluZEV2ZW50cyB9IGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCB7IGluaXRQcm9wcywgaW5pdFByb3BzT2JzZXJ2ZXIgfSBmcm9tICcuL3Byb3BzJztcbmltcG9ydCB7IGRpc2Nvbm5lY3RPYnNlcnZlcnMsIGluaXRPYnNlcnZlcnMgfSBmcm9tICcuL29ic2VydmVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxIb29rKGluc3RhbmNlLCBob29rKSB7XG4gICAgTE9HICYmIGxvZyhpbnN0YW5jZSwgaG9vayk7XG4gICAgaW5zdGFuY2UuJG9wdGlvbnNbaG9va10/LmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuY2FsbChpbnN0YW5jZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsbENvbm5lY3RlZChpbnN0YW5jZSkge1xuICAgIGlmIChpbnN0YW5jZS5fY29ubmVjdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbml0UHJvcHMoaW5zdGFuY2UpO1xuXG4gICAgY2FsbEhvb2soaW5zdGFuY2UsICdiZWZvcmVDb25uZWN0Jyk7XG4gICAgaW5zdGFuY2UuX2Nvbm5lY3RlZCA9IHRydWU7XG5cbiAgICBpbml0RXZlbnRzKGluc3RhbmNlKTtcbiAgICBpbml0VXBkYXRlcyhpbnN0YW5jZSk7XG4gICAgaW5pdFdhdGNoZXMoaW5zdGFuY2UpO1xuICAgIGluaXRPYnNlcnZlcnMoaW5zdGFuY2UpO1xuXG4gICAgaW5pdFByb3BzT2JzZXJ2ZXIoaW5zdGFuY2UpO1xuICAgIGluaXRDb21wdXRlZFVwZGF0ZXMoaW5zdGFuY2UpO1xuXG4gICAgY2FsbEhvb2soaW5zdGFuY2UsICdjb25uZWN0ZWQnKTtcbiAgICBjYWxsVXBkYXRlKGluc3RhbmNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxEaXNjb25uZWN0ZWQoaW5zdGFuY2UpIHtcbiAgICBpZiAoIWluc3RhbmNlLl9jb25uZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNhbGxIb29rKGluc3RhbmNlLCAnYmVmb3JlRGlzY29ubmVjdCcpO1xuXG4gICAgdW5iaW5kRXZlbnRzKGluc3RhbmNlKTtcbiAgICBjbGVhclVwZGF0ZURhdGEoaW5zdGFuY2UpO1xuICAgIGRpc2Nvbm5lY3RPYnNlcnZlcnMoaW5zdGFuY2UpO1xuICAgIGRpc2Nvbm5lY3RDb21wdXRlZFVwZGF0ZXMoaW5zdGFuY2UpO1xuXG4gICAgY2FsbEhvb2soaW5zdGFuY2UsICdkaXNjb25uZWN0ZWQnKTtcblxuICAgIGluc3RhbmNlLl9jb25uZWN0ZWQgPSBmYWxzZTtcbn1cbiIsImltcG9ydCB7IGNhbGxIb29rIH0gZnJvbSAnLi9ob29rcyc7XG5pbXBvcnQgeyBpbml0Q29tcHV0ZWQgfSBmcm9tICcuL2NvbXB1dGVkJztcbmltcG9ydCB7IGNvZXJjZSwgbWVyZ2VPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7IGFzc2lnbiwgaXNBcnJheSwgaXNQbGFpbk9iamVjdCwgaXNVbmRlZmluZWQgfSBmcm9tICd1aWtpdC11dGlsJztcblxubGV0IHVpZCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KGluc3RhbmNlLCBvcHRpb25zID0ge30pIHtcbiAgICBvcHRpb25zLmRhdGEgPSBub3JtYWxpemVEYXRhKG9wdGlvbnMsIGluc3RhbmNlLmNvbnN0cnVjdG9yLm9wdGlvbnMpO1xuXG4gICAgaW5zdGFuY2UuJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoaW5zdGFuY2UuY29uc3RydWN0b3Iub3B0aW9ucywgb3B0aW9ucywgaW5zdGFuY2UpO1xuXG4gICAgaW5zdGFuY2UuJHByb3BzID0ge307XG5cbiAgICBpbnN0YW5jZS5fdWlkID0gdWlkKys7XG4gICAgaW5pdERhdGEoaW5zdGFuY2UpO1xuICAgIGluaXRNZXRob2RzKGluc3RhbmNlKTtcbiAgICBpbml0Q29tcHV0ZWQoaW5zdGFuY2UpO1xuICAgIGNhbGxIb29rKGluc3RhbmNlLCAnY3JlYXRlZCcpO1xuXG4gICAgaWYgKG9wdGlvbnMuZWwpIHtcbiAgICAgICAgaW5zdGFuY2UuJG1vdW50KG9wdGlvbnMuZWwpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaW5pdERhdGEoaW5zdGFuY2UpIHtcbiAgICBjb25zdCB7IGRhdGEgPSB7fSB9ID0gaW5zdGFuY2UuJG9wdGlvbnM7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgICAgIGluc3RhbmNlLiRwcm9wc1trZXldID0gaW5zdGFuY2Vba2V5XSA9IGRhdGFba2V5XTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGluaXRNZXRob2RzKGluc3RhbmNlKSB7XG4gICAgY29uc3QgeyBtZXRob2RzIH0gPSBpbnN0YW5jZS4kb3B0aW9ucztcblxuICAgIGlmIChtZXRob2RzKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1ldGhvZHMpIHtcbiAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSBtZXRob2RzW2tleV0uYmluZChpbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGEoeyBkYXRhID0ge30gfSwgeyBhcmdzID0gW10sIHByb3BzID0ge30gfSkge1xuICAgIGlmIChpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIGFyZ3MubGVuZ3RoKS5yZWR1Y2UoKGRhdGEsIHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgYXNzaWduKGRhdGEsIHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YVthcmdzW2luZGV4XV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQoZGF0YVtrZXldKSkge1xuICAgICAgICAgICAgZGVsZXRlIGRhdGFba2V5XTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wc1trZXldKSB7XG4gICAgICAgICAgICBkYXRhW2tleV0gPSBjb2VyY2UocHJvcHNba2V5XSwgZGF0YVtrZXldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xufVxuIiwiaW1wb3J0IHsgaW5pdCB9IGZyb20gJy4vc3RhdGUnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICd1aWtpdC11dGlsJztcblxuY29uc3QgQXBwID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpbml0KHRoaXMsIG9wdGlvbnMpO1xufTtcblxuQXBwLnV0aWwgPSB1dGlsO1xuQXBwLm9wdGlvbnMgPSB7fTtcbkFwcC52ZXJzaW9uID0gVkVSU0lPTjtcblxuZXhwb3J0IGRlZmF1bHQgQXBwO1xuIiwiaW1wb3J0IEFwcCBmcm9tICcuL2FwcCc7XG5pbXBvcnQgeyAkJCwgY2FtZWxpemUsIGh5cGhlbmF0ZSwgaXNFbXB0eSwgaXNQbGFpbk9iamVjdCB9IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5jb25zdCBQUkVGSVggPSAndWstJztcbmNvbnN0IERBVEEgPSAnX191aWtpdF9fJztcblxuZXhwb3J0IGNvbnN0IGNvbXBvbmVudHMgPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvbmVudChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgaWQgPSBQUkVGSVggKyBoeXBoZW5hdGUobmFtZSk7XG5cbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoY29tcG9uZW50c1tpZF0pKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzW2lkXSA9IEFwcC5leHRlbmQoY29tcG9uZW50c1tpZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHNbaWRdO1xuICAgIH1cblxuICAgIG5hbWUgPSBjYW1lbGl6ZShuYW1lKTtcblxuICAgIEFwcFtuYW1lXSA9IChlbGVtZW50LCBkYXRhKSA9PiBjcmVhdGVDb21wb25lbnQobmFtZSwgZWxlbWVudCwgZGF0YSk7XG5cbiAgICBjb25zdCBvcHQgPSBpc1BsYWluT2JqZWN0KG9wdGlvbnMpID8geyAuLi5vcHRpb25zIH0gOiBvcHRpb25zLm9wdGlvbnM7XG5cbiAgICBvcHQuaWQgPSBpZDtcbiAgICBvcHQubmFtZSA9IG5hbWU7XG5cbiAgICBvcHQuaW5zdGFsbD8uKEFwcCwgb3B0LCBuYW1lKTtcblxuICAgIGlmIChBcHAuX2luaXRpYWxpemVkICYmICFvcHQuZnVuY3Rpb25hbCkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gY3JlYXRlQ29tcG9uZW50KG5hbWUsIGBbJHtpZH1dLFtkYXRhLSR7aWR9XWApKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGNvbXBvbmVudHNbaWRdID0gb3B0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudChuYW1lLCBlbGVtZW50LCBkYXRhLCAuLi5hcmdzKSB7XG4gICAgY29uc3QgQ29tcG9uZW50ID0gY29tcG9uZW50KG5hbWUpO1xuXG4gICAgcmV0dXJuIENvbXBvbmVudC5vcHRpb25zLmZ1bmN0aW9uYWxcbiAgICAgICAgPyBuZXcgQ29tcG9uZW50KHsgZGF0YTogaXNQbGFpbk9iamVjdChlbGVtZW50KSA/IGVsZW1lbnQgOiBbZWxlbWVudCwgZGF0YSwgLi4uYXJnc10gfSlcbiAgICAgICAgOiBlbGVtZW50XG4gICAgICAgID8gJCQoZWxlbWVudCkubWFwKGluaXQpWzBdXG4gICAgICAgIDogaW5pdCgpO1xuXG4gICAgZnVuY3Rpb24gaW5pdChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0Q29tcG9uZW50KGVsZW1lbnQsIG5hbWUpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS4kZGVzdHJveSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IENvbXBvbmVudCh7IGVsOiBlbGVtZW50LCBkYXRhIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbXBvbmVudHMoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50Py5bREFUQV0gfHwge307XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wb25lbnQoZWxlbWVudCwgbmFtZSkge1xuICAgIHJldHVybiBnZXRDb21wb25lbnRzKGVsZW1lbnQpW25hbWVdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoVG9FbGVtZW50KGVsZW1lbnQsIGluc3RhbmNlKSB7XG4gICAgaWYgKCFlbGVtZW50W0RBVEFdKSB7XG4gICAgICAgIGVsZW1lbnRbREFUQV0gPSB7fTtcbiAgICB9XG5cbiAgICBlbGVtZW50W0RBVEFdW2luc3RhbmNlLiRvcHRpb25zLm5hbWVdID0gaW5zdGFuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRhY2hGcm9tRWxlbWVudChlbGVtZW50LCBpbnN0YW5jZSkge1xuICAgIGRlbGV0ZSBlbGVtZW50W0RBVEFdPy5baW5zdGFuY2UuJG9wdGlvbnMubmFtZV07XG5cbiAgICBpZiAoIWlzRW1wdHkoZWxlbWVudFtEQVRBXSkpIHtcbiAgICAgICAgZGVsZXRlIGVsZW1lbnRbREFUQV07XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaW5pdCB9IGZyb20gJy4vc3RhdGUnO1xuaW1wb3J0IHsgY2FsbFVwZGF0ZSB9IGZyb20gJy4vdXBkYXRlJztcbmltcG9ydCB7IG1lcmdlT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBjb21wb25lbnQsIGdldENvbXBvbmVudCwgZ2V0Q29tcG9uZW50cyB9IGZyb20gJy4vY29tcG9uZW50JztcbmltcG9ydCB7ICQsIGFwcGx5LCBpc1N0cmluZywgcGFyZW50cywgdG9Ob2RlIH0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChBcHApIHtcbiAgICBBcHAuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgIEFwcC5nZXRDb21wb25lbnRzID0gZ2V0Q29tcG9uZW50cztcbiAgICBBcHAuZ2V0Q29tcG9uZW50ID0gZ2V0Q29tcG9uZW50O1xuICAgIEFwcC51cGRhdGUgPSB1cGRhdGU7XG5cbiAgICBBcHAudXNlID0gZnVuY3Rpb24gKHBsdWdpbikge1xuICAgICAgICBpZiAocGx1Z2luLmluc3RhbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcGx1Z2luLmNhbGwobnVsbCwgdGhpcyk7XG4gICAgICAgIHBsdWdpbi5pbnN0YWxsZWQgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBBcHAubWl4aW4gPSBmdW5jdGlvbiAobWl4aW4sIGNvbXBvbmVudCkge1xuICAgICAgICBjb21wb25lbnQgPSAoaXNTdHJpbmcoY29tcG9uZW50KSA/IHRoaXMuY29tcG9uZW50KGNvbXBvbmVudCkgOiBjb21wb25lbnQpIHx8IHRoaXM7XG4gICAgICAgIGNvbXBvbmVudC5vcHRpb25zID0gbWVyZ2VPcHRpb25zKGNvbXBvbmVudC5vcHRpb25zLCBtaXhpbik7XG4gICAgfTtcblxuICAgIEFwcC5leHRlbmQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgICBjb25zdCBTdXBlciA9IHRoaXM7XG4gICAgICAgIGNvbnN0IFN1YiA9IGZ1bmN0aW9uIFVJa2l0Q29tcG9uZW50KG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGluaXQodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgU3ViLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBlKTtcbiAgICAgICAgU3ViLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN1YjtcbiAgICAgICAgU3ViLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoU3VwZXIub3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgU3ViLnN1cGVyID0gU3VwZXI7XG4gICAgICAgIFN1Yi5leHRlbmQgPSBTdXBlci5leHRlbmQ7XG5cbiAgICAgICAgcmV0dXJuIFN1YjtcbiAgICB9O1xuXG4gICAgbGV0IGNvbnRhaW5lcjtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXBwLCAnY29udGFpbmVyJywge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGFpbmVyIHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lciA9ICQoZWxlbWVudCk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGUoZWxlbWVudCwgZSkge1xuICAgIGVsZW1lbnQgPSBlbGVtZW50ID8gdG9Ob2RlKGVsZW1lbnQpIDogZG9jdW1lbnQuYm9keTtcblxuICAgIGZvciAoY29uc3QgcGFyZW50RWwgb2YgcGFyZW50cyhlbGVtZW50KS5yZXZlcnNlKCkpIHtcbiAgICAgICAgdXBkYXRlRWxlbWVudChwYXJlbnRFbCwgZSk7XG4gICAgfVxuXG4gICAgYXBwbHkoZWxlbWVudCwgKGVsZW1lbnQpID0+IHVwZGF0ZUVsZW1lbnQoZWxlbWVudCwgZSkpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFbGVtZW50KGVsZW1lbnQsIGUpIHtcbiAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0Q29tcG9uZW50cyhlbGVtZW50KTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gY29tcG9uZW50cykge1xuICAgICAgICBjYWxsVXBkYXRlKGNvbXBvbmVudHNbbmFtZV0sIGUpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IHVwZGF0ZSB9IGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCB7IGNhbGxVcGRhdGUgfSBmcm9tICcuL3VwZGF0ZSc7XG5pbXBvcnQgeyAkLCByZW1vdmUsIHdpdGhpbiB9IGZyb20gJ3Vpa2l0LXV0aWwnO1xuaW1wb3J0IHsgY2FsbENvbm5lY3RlZCwgY2FsbERpc2Nvbm5lY3RlZCwgY2FsbEhvb2sgfSBmcm9tICcuL2hvb2tzJztcbmltcG9ydCB7IGF0dGFjaFRvRWxlbWVudCwgY3JlYXRlQ29tcG9uZW50LCBkZXRhY2hGcm9tRWxlbWVudCwgZ2V0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoQXBwKSB7XG4gICAgQXBwLnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzO1xuICAgICAgICBhdHRhY2hUb0VsZW1lbnQoZWwsIGluc3RhbmNlKTtcblxuICAgICAgICBpbnN0YW5jZS4kb3B0aW9ucy5lbCA9IGVsO1xuXG4gICAgICAgIGlmICh3aXRoaW4oZWwsIGRvY3VtZW50KSkge1xuICAgICAgICAgICAgY2FsbENvbm5lY3RlZChpbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgQXBwLnByb3RvdHlwZS4kZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVFbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcztcbiAgICAgICAgY29uc3QgeyBlbCB9ID0gaW5zdGFuY2UuJG9wdGlvbnM7XG5cbiAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgICBjYWxsRGlzY29ubmVjdGVkKGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGxIb29rKGluc3RhbmNlLCAnZGVzdHJveScpO1xuXG4gICAgICAgIGRldGFjaEZyb21FbGVtZW50KGVsLCBpbnN0YW5jZSk7XG5cbiAgICAgICAgaWYgKHJlbW92ZUVsKSB7XG4gICAgICAgICAgICByZW1vdmUoaW5zdGFuY2UuJGVsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBBcHAucHJvdG90eXBlLiRjcmVhdGUgPSBjcmVhdGVDb21wb25lbnQ7XG4gICAgQXBwLnByb3RvdHlwZS4kZW1pdCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGNhbGxVcGRhdGUodGhpcywgZSk7XG4gICAgfTtcblxuICAgIEFwcC5wcm90b3R5cGUuJHVwZGF0ZSA9IGZ1bmN0aW9uIChlbGVtZW50ID0gdGhpcy4kZWwsIGUpIHtcbiAgICAgICAgdXBkYXRlKGVsZW1lbnQsIGUpO1xuICAgIH07XG5cbiAgICBBcHAucHJvdG90eXBlLiRyZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbERpc2Nvbm5lY3RlZCh0aGlzKTtcbiAgICAgICAgY2FsbENvbm5lY3RlZCh0aGlzKTtcbiAgICB9O1xuXG4gICAgQXBwLnByb3RvdHlwZS4kZ2V0Q29tcG9uZW50ID0gZ2V0Q29tcG9uZW50O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXBwLnByb3RvdHlwZSwge1xuICAgICAgICAkZWw6IHtcbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kb3B0aW9ucy5lbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAgJGNvbnRhaW5lcjogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihBcHAsICdjb250YWluZXInKSxcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlSWQoaW5zdGFuY2UsIGVsID0gaW5zdGFuY2UuJGVsLCBwb3N0Zml4ID0gJycpIHtcbiAgICBpZiAoZWwuaWQpIHtcbiAgICAgICAgcmV0dXJuIGVsLmlkO1xuICAgIH1cblxuICAgIGxldCBpZCA9IGAke2luc3RhbmNlLiRvcHRpb25zLmlkfS0ke2luc3RhbmNlLl91aWR9JHtwb3N0Zml4fWA7XG5cbiAgICBpZiAoJChgIyR7aWR9YCkpIHtcbiAgICAgICAgaWQgPSBnZW5lcmF0ZUlkKGluc3RhbmNlLCBlbCwgYCR7cG9zdGZpeH0tMmApO1xuICAgIH1cblxuICAgIHJldHVybiBpZDtcbn1cbiIsImltcG9ydCBBcHAgZnJvbSAnLi9hcHAnO1xuaW1wb3J0IGdsb2JhbEFwaSBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgaW5zdGFuY2VBcGkgZnJvbSAnLi9pbnN0YW5jZSc7XG5cbmdsb2JhbEFwaShBcHApO1xuaW5zdGFuY2VBcGkoQXBwKTtcblxuZXhwb3J0IGRlZmF1bHQgQXBwO1xuIiwiaW1wb3J0IHsgY2FsbENvbm5lY3RlZCwgY2FsbERpc2Nvbm5lY3RlZCB9IGZyb20gJy4vaG9va3MnO1xuaW1wb3J0IHsgY29tcG9uZW50cywgY3JlYXRlQ29tcG9uZW50LCBnZXRDb21wb25lbnQsIGdldENvbXBvbmVudHMgfSBmcm9tICcuL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBhcHBseSwgaGFzQXR0ciwgaW5Ccm93c2VyLCBpc1BsYWluT2JqZWN0LCBzdGFydHNXaXRoLCB0cmlnZ2VyIH0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChBcHApIHtcbiAgICBpZiAoaW5Ccm93c2VyICYmIHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKSB7XG4gICAgICAgIGlmIChkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gaW5pdChBcHApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKChyZWNvcmRzLCBvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXQoQXBwKTtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaW5pdChBcHApIHtcbiAgICB0cmlnZ2VyKGRvY3VtZW50LCAndWlraXQ6aW5pdCcsIEFwcCk7XG5cbiAgICBpZiAoZG9jdW1lbnQuYm9keSkge1xuICAgICAgICBhcHBseShkb2N1bWVudC5ib2R5LCBjb25uZWN0KTtcbiAgICB9XG5cbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcigocmVjb3JkcykgPT4gcmVjb3Jkcy5mb3JFYWNoKGFwcGx5Q2hpbGRMaXN0TXV0YXRpb24pKS5vYnNlcnZlKGRvY3VtZW50LCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKChyZWNvcmRzKSA9PiByZWNvcmRzLmZvckVhY2goYXBwbHlBdHRyaWJ1dGVNdXRhdGlvbikpLm9ic2VydmUoZG9jdW1lbnQsIHtcbiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIEFwcC5faW5pdGlhbGl6ZWQgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBhcHBseUNoaWxkTGlzdE11dGF0aW9uKHsgYWRkZWROb2RlcywgcmVtb3ZlZE5vZGVzIH0pIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgYWRkZWROb2Rlcykge1xuICAgICAgICBhcHBseShub2RlLCBjb25uZWN0KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgcmVtb3ZlZE5vZGVzKSB7XG4gICAgICAgIGFwcGx5KG5vZGUsIGRpc2Nvbm5lY3QpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlBdHRyaWJ1dGVNdXRhdGlvbih7IHRhcmdldCwgYXR0cmlidXRlTmFtZSB9KSB7XG4gICAgY29uc3QgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoYXR0cmlidXRlTmFtZSk7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgICBpZiAoaGFzQXR0cih0YXJnZXQsIGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgICAgICBjcmVhdGVDb21wb25lbnQobmFtZSwgdGFyZ2V0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldENvbXBvbmVudCh0YXJnZXQsIG5hbWUpPy4kZGVzdHJveSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29ubmVjdChub2RlKSB7XG4gICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHMobm9kZSk7XG4gICAgZm9yIChjb25zdCBuYW1lIGluIGdldENvbXBvbmVudHMobm9kZSkpIHtcbiAgICAgICAgY2FsbENvbm5lY3RlZChjb21wb25lbnRzW25hbWVdKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZU5hbWUgb2Ygbm9kZS5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICBuYW1lICYmIGNyZWF0ZUNvbXBvbmVudChuYW1lLCBub2RlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3Qobm9kZSkge1xuICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRDb21wb25lbnRzKG5vZGUpO1xuICAgIGZvciAoY29uc3QgbmFtZSBpbiBnZXRDb21wb25lbnRzKG5vZGUpKSB7XG4gICAgICAgIGNhbGxEaXNjb25uZWN0ZWQoY29tcG9uZW50c1tuYW1lXSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKGF0dHJpYnV0ZSkge1xuICAgIGlmIChzdGFydHNXaXRoKGF0dHJpYnV0ZSwgJ2RhdGEtJykpIHtcbiAgICAgICAgYXR0cmlidXRlID0gYXR0cmlidXRlLnNsaWNlKDUpO1xuICAgIH1cblxuICAgIGNvbnN0IGNtcCA9IGNvbXBvbmVudHNbYXR0cmlidXRlXTtcbiAgICByZXR1cm4gY21wICYmIChpc1BsYWluT2JqZWN0KGNtcCkgPyBjbXAgOiBjbXAub3B0aW9ucykubmFtZTtcbn1cbiIsImltcG9ydCB7IGFkZENsYXNzIH0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb25uZWN0ZWQoKSB7XG4gICAgICAgIGFkZENsYXNzKHRoaXMuJGVsLCB0aGlzLiRvcHRpb25zLmlkKTtcbiAgICB9LFxufTtcbiIsImltcG9ydCB7XG4gICAgJCQsXG4gICAgYWRkQ2xhc3MsXG4gICAgQW5pbWF0aW9uLFxuICAgIGNzcyxcbiAgICBkaW1lbnNpb25zLFxuICAgIGhhc0NsYXNzLFxuICAgIGluY2x1ZGVzLFxuICAgIGlzQm9vbGVhbixcbiAgICBpc0Z1bmN0aW9uLFxuICAgIGlzVmlzaWJsZSxcbiAgICBub29wLFxuICAgIHJlbW92ZUNsYXNzLFxuICAgIHN0YXJ0c1dpdGgsXG4gICAgdG9GbG9hdCxcbiAgICB0b2dnbGVDbGFzcyxcbiAgICB0b05vZGUsXG4gICAgdG9Ob2RlcyxcbiAgICBUcmFuc2l0aW9uLFxuICAgIHRyaWdnZXIsXG4gICAgdW53cmFwLFxuICAgIHdyYXBJbm5lcixcbn0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgICBjbHM6IEJvb2xlYW4sXG4gICAgICAgIGFuaW1hdGlvbjogJ2xpc3QnLFxuICAgICAgICBkdXJhdGlvbjogTnVtYmVyLFxuICAgICAgICB2ZWxvY2l0eTogTnVtYmVyLFxuICAgICAgICBvcmlnaW46IFN0cmluZyxcbiAgICAgICAgdHJhbnNpdGlvbjogU3RyaW5nLFxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIGNsczogZmFsc2UsXG4gICAgICAgIGFuaW1hdGlvbjogW2ZhbHNlXSxcbiAgICAgICAgZHVyYXRpb246IDIwMCxcbiAgICAgICAgdmVsb2NpdHk6IDAuMixcbiAgICAgICAgb3JpZ2luOiBmYWxzZSxcbiAgICAgICAgdHJhbnNpdGlvbjogJ2Vhc2UnLFxuICAgICAgICBjbHNFbnRlcjogJ3VrLXRvZ2dsYWJlLWVudGVyJyxcbiAgICAgICAgY2xzTGVhdmU6ICd1ay10b2dnbGFiZS1sZWF2ZScsXG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIGhhc0FuaW1hdGlvbih7IGFuaW1hdGlvbiB9KSB7XG4gICAgICAgICAgICByZXR1cm4gISFhbmltYXRpb25bMF07XG4gICAgICAgIH0sXG5cbiAgICAgICAgaGFzVHJhbnNpdGlvbih7IGFuaW1hdGlvbiB9KSB7XG4gICAgICAgICAgICByZXR1cm4gWydzbGlkZScsICdyZXZlYWwnXS5zb21lKCh0cmFuc2l0aW9uKSA9PiBzdGFydHNXaXRoKGFuaW1hdGlvblswXSwgdHJhbnNpdGlvbikpO1xuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAgIHRvZ2dsZUVsZW1lbnQodGFyZ2V0cywgdG9nZ2xlLCBhbmltYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgIHRvTm9kZXModGFyZ2V0cykubWFwKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdyA9IGlzQm9vbGVhbih0b2dnbGUpID8gdG9nZ2xlIDogIXRoaXMuaXNUb2dnbGVkKGVsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0cmlnZ2VyKGVsLCBgYmVmb3JlJHtzaG93ID8gJ3Nob3cnIDogJ2hpZGUnfWAsIFt0aGlzXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Z1bmN0aW9uKGFuaW1hdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYW5pbWF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFuaW1hdGUgPT09IGZhbHNlIHx8ICF0aGlzLmhhc0FuaW1hdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRvZ2dsZUluc3RhbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmhhc1RyYW5zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0b2dnbGVUcmFuc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdG9nZ2xlQW5pbWF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICApKGVsLCBzaG93LCB0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xzID0gc2hvdyA/IHRoaXMuY2xzRW50ZXIgOiB0aGlzLmNsc0xlYXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyhlbCwgY2xzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcihlbCwgc2hvdyA/ICdzaG93JyA6ICdoaWRlJywgW3RoaXNdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyhlbCwgY2xzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKGVsLCBzaG93ID8gJ3Nob3duJyA6ICdoaWRkZW4nLCBbdGhpc10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHByb21pc2UudGhlbihkb25lLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoZWwsIGNscyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICkudGhlbihyZXNvbHZlLCBub29wKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcblxuICAgICAgICBpc1RvZ2dsZWQoZWwgPSB0aGlzLiRlbCkge1xuICAgICAgICAgICAgZWwgPSB0b05vZGUoZWwpO1xuICAgICAgICAgICAgcmV0dXJuIGhhc0NsYXNzKGVsLCB0aGlzLmNsc0VudGVyKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogaGFzQ2xhc3MoZWwsIHRoaXMuY2xzTGVhdmUpXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogdGhpcy5jbHNcbiAgICAgICAgICAgICAgICA/IGhhc0NsYXNzKGVsLCB0aGlzLmNscy5zcGxpdCgnICcpWzBdKVxuICAgICAgICAgICAgICAgIDogaXNWaXNpYmxlKGVsKTtcbiAgICAgICAgfSxcblxuICAgICAgICBfdG9nZ2xlKGVsLCB0b2dnbGVkKSB7XG4gICAgICAgICAgICBpZiAoIWVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b2dnbGVkID0gQm9vbGVhbih0b2dnbGVkKTtcblxuICAgICAgICAgICAgbGV0IGNoYW5nZWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5jbHMpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VkID0gaW5jbHVkZXModGhpcy5jbHMsICcgJykgfHwgdG9nZ2xlZCAhPT0gaGFzQ2xhc3MoZWwsIHRoaXMuY2xzKTtcbiAgICAgICAgICAgICAgICBjaGFuZ2VkICYmIHRvZ2dsZUNsYXNzKGVsLCB0aGlzLmNscywgaW5jbHVkZXModGhpcy5jbHMsICcgJykgPyB1bmRlZmluZWQgOiB0b2dnbGVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRvZ2dsZWQgPT09IGVsLmhpZGRlbjtcbiAgICAgICAgICAgICAgICBjaGFuZ2VkICYmIChlbC5oaWRkZW4gPSAhdG9nZ2xlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICQkKCdbYXV0b2ZvY3VzXScsIGVsKS5zb21lKChlbCkgPT4gKGlzVmlzaWJsZShlbCkgPyBlbC5mb2N1cygpIHx8IHRydWUgOiBlbC5ibHVyKCkpKTtcblxuICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKGVsLCAndG9nZ2xlZCcsIFt0b2dnbGVkLCB0aGlzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5cbmZ1bmN0aW9uIHRvZ2dsZUluc3RhbnQoZWwsIHNob3csIHsgX3RvZ2dsZSB9KSB7XG4gICAgQW5pbWF0aW9uLmNhbmNlbChlbCk7XG4gICAgVHJhbnNpdGlvbi5jYW5jZWwoZWwpO1xuICAgIHJldHVybiBfdG9nZ2xlKGVsLCBzaG93KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZVRyYW5zaXRpb24oXG4gICAgZWwsXG4gICAgc2hvdyxcbiAgICB7IGFuaW1hdGlvbiwgZHVyYXRpb24sIHZlbG9jaXR5LCB0cmFuc2l0aW9uLCBfdG9nZ2xlIH1cbikge1xuICAgIGNvbnN0IFttb2RlID0gJ3JldmVhbCcsIHN0YXJ0UHJvcCA9ICd0b3AnXSA9IGFuaW1hdGlvblswXT8uc3BsaXQoJy0nKSB8fCBbXTtcblxuICAgIGNvbnN0IGRpcnMgPSBbXG4gICAgICAgIFsnbGVmdCcsICdyaWdodCddLFxuICAgICAgICBbJ3RvcCcsICdib3R0b20nXSxcbiAgICBdO1xuICAgIGNvbnN0IGRpciA9IGRpcnNbaW5jbHVkZXMoZGlyc1swXSwgc3RhcnRQcm9wKSA/IDAgOiAxXTtcbiAgICBjb25zdCBlbmQgPSBkaXJbMV0gPT09IHN0YXJ0UHJvcDtcbiAgICBjb25zdCBwcm9wcyA9IFsnd2lkdGgnLCAnaGVpZ2h0J107XG4gICAgY29uc3QgZGltUHJvcCA9IHByb3BzW2RpcnMuaW5kZXhPZihkaXIpXTtcbiAgICBjb25zdCBtYXJnaW5Qcm9wID0gYG1hcmdpbi0ke2RpclswXX1gO1xuICAgIGNvbnN0IG1hcmdpblN0YXJ0UHJvcCA9IGBtYXJnaW4tJHtzdGFydFByb3B9YDtcblxuICAgIGxldCBjdXJyZW50RGltID0gZGltZW5zaW9ucyhlbClbZGltUHJvcF07XG5cbiAgICBjb25zdCBpblByb2dyZXNzID0gVHJhbnNpdGlvbi5pblByb2dyZXNzKGVsKTtcbiAgICBhd2FpdCBUcmFuc2l0aW9uLmNhbmNlbChlbCk7XG5cbiAgICBpZiAoc2hvdykge1xuICAgICAgICBfdG9nZ2xlKGVsLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2UHJvcHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwYWRkaW5nJyxcbiAgICAgICAgICAgICdib3JkZXInLFxuICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICdoZWlnaHQnLFxuICAgICAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgICAgICdtaW5IZWlnaHQnLFxuICAgICAgICAgICAgJ292ZXJmbG93WScsXG4gICAgICAgICAgICAnb3ZlcmZsb3dYJyxcbiAgICAgICAgICAgIG1hcmdpblByb3AsXG4gICAgICAgICAgICBtYXJnaW5TdGFydFByb3AsXG4gICAgICAgIF0ubWFwKChrZXkpID0+IFtrZXksIGVsLnN0eWxlW2tleV1dKVxuICAgICk7XG5cbiAgICBjb25zdCBkaW0gPSBkaW1lbnNpb25zKGVsKTtcbiAgICBjb25zdCBjdXJyZW50TWFyZ2luID0gdG9GbG9hdChjc3MoZWwsIG1hcmdpblByb3ApKTtcbiAgICBjb25zdCBtYXJnaW5TdGFydCA9IHRvRmxvYXQoY3NzKGVsLCBtYXJnaW5TdGFydFByb3ApKTtcbiAgICBjb25zdCBlbmREaW0gPSBkaW1bZGltUHJvcF0gKyBtYXJnaW5TdGFydDtcblxuICAgIGlmICghaW5Qcm9ncmVzcyAmJiAhc2hvdykge1xuICAgICAgICBjdXJyZW50RGltICs9IG1hcmdpblN0YXJ0O1xuICAgIH1cblxuICAgIGNvbnN0IFt3cmFwcGVyXSA9IHdyYXBJbm5lcihlbCwgJzxkaXY+Jyk7XG4gICAgY3NzKHdyYXBwZXIsIHtcbiAgICAgICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgICAgIGhlaWdodDogZGltLmhlaWdodCxcbiAgICAgICAgd2lkdGg6IGRpbS53aWR0aCxcbiAgICAgICAgLi4uY3NzKGVsLCBbXG4gICAgICAgICAgICAnb3ZlcmZsb3cnLFxuICAgICAgICAgICAgJ3BhZGRpbmcnLFxuICAgICAgICAgICAgJ2JvcmRlclRvcCcsXG4gICAgICAgICAgICAnYm9yZGVyUmlnaHQnLFxuICAgICAgICAgICAgJ2JvcmRlckJvdHRvbScsXG4gICAgICAgICAgICAnYm9yZGVyTGVmdCcsXG4gICAgICAgICAgICAnYm9yZGVySW1hZ2UnLFxuICAgICAgICAgICAgbWFyZ2luU3RhcnRQcm9wLFxuICAgICAgICBdKSxcbiAgICB9KTtcblxuICAgIGNzcyhlbCwge1xuICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICBib3JkZXI6IDAsXG4gICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICBtaW5IZWlnaHQ6IDAsXG4gICAgICAgIFttYXJnaW5TdGFydFByb3BdOiAwLFxuICAgICAgICB3aWR0aDogZGltLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGRpbS5oZWlnaHQsXG4gICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgW2RpbVByb3BdOiBjdXJyZW50RGltLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcGVyY2VudCA9IGN1cnJlbnREaW0gLyBlbmREaW07XG4gICAgZHVyYXRpb24gPSAodmVsb2NpdHkgKiBlbmREaW0gKyBkdXJhdGlvbikgKiAoc2hvdyA/IDEgLSBwZXJjZW50IDogcGVyY2VudCk7XG4gICAgY29uc3QgZW5kUHJvcHMgPSB7IFtkaW1Qcm9wXTogc2hvdyA/IGVuZERpbSA6IDAgfTtcblxuICAgIGlmIChlbmQpIHtcbiAgICAgICAgY3NzKGVsLCBtYXJnaW5Qcm9wLCBlbmREaW0gLSBjdXJyZW50RGltICsgY3VycmVudE1hcmdpbik7XG4gICAgICAgIGVuZFByb3BzW21hcmdpblByb3BdID0gc2hvdyA/IGN1cnJlbnRNYXJnaW4gOiBlbmREaW0gKyBjdXJyZW50TWFyZ2luO1xuICAgIH1cblxuICAgIGlmICghZW5kIF4gKG1vZGUgPT09ICdyZXZlYWwnKSkge1xuICAgICAgICBjc3Mod3JhcHBlciwgbWFyZ2luUHJvcCwgLWVuZERpbSArIGN1cnJlbnREaW0pO1xuICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KHdyYXBwZXIsIHsgW21hcmdpblByb3BdOiBzaG93ID8gMCA6IC1lbmREaW0gfSwgZHVyYXRpb24sIHRyYW5zaXRpb24pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IFRyYW5zaXRpb24uc3RhcnQoZWwsIGVuZFByb3BzLCBkdXJhdGlvbiwgdHJhbnNpdGlvbik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3NzKGVsLCBwcmV2UHJvcHMpO1xuICAgICAgICB1bndyYXAod3JhcHBlci5maXJzdENoaWxkKTtcblxuICAgICAgICBpZiAoIXNob3cpIHtcbiAgICAgICAgICAgIF90b2dnbGUoZWwsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9nZ2xlQW5pbWF0aW9uKGVsLCBzaG93LCBjbXApIHtcbiAgICBBbmltYXRpb24uY2FuY2VsKGVsKTtcblxuICAgIGNvbnN0IHsgYW5pbWF0aW9uLCBkdXJhdGlvbiwgX3RvZ2dsZSB9ID0gY21wO1xuXG4gICAgaWYgKHNob3cpIHtcbiAgICAgICAgX3RvZ2dsZShlbCwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBBbmltYXRpb24uaW4oZWwsIGFuaW1hdGlvblswXSwgZHVyYXRpb24sIGNtcC5vcmlnaW4pO1xuICAgIH1cblxuICAgIHJldHVybiBBbmltYXRpb24ub3V0KGVsLCBhbmltYXRpb25bMV0gfHwgYW5pbWF0aW9uWzBdLCBkdXJhdGlvbiwgY21wLm9yaWdpbikudGhlbigoKSA9PlxuICAgICAgICBfdG9nZ2xlKGVsLCBmYWxzZSlcbiAgICApO1xufVxuIiwiZXhwb3J0IGNvbnN0IGtleU1hcCA9IHtcbiAgICBUQUI6IDksXG4gICAgRVNDOiAyNyxcbiAgICBTUEFDRTogMzIsXG4gICAgRU5EOiAzNSxcbiAgICBIT01FOiAzNixcbiAgICBMRUZUOiAzNyxcbiAgICBVUDogMzgsXG4gICAgUklHSFQ6IDM5LFxuICAgIERPV046IDQwLFxufTtcbiIsImltcG9ydCB7XG4gICAgJCQsXG4gICAgZ2V0RXZlbnRQb3MsXG4gICAgaXNGdW5jdGlvbixcbiAgICBpc1RvdWNoLFxuICAgIG5vb3AsXG4gICAgb2JzZXJ2ZUludGVyc2VjdGlvbixcbiAgICBvYnNlcnZlTXV0YXRpb24sXG4gICAgb2JzZXJ2ZVJlc2l6ZSxcbiAgICBvbixcbiAgICBvbmNlLFxuICAgIHBhcmVudCxcbiAgICBwb2ludGVyQ2FuY2VsLFxuICAgIHBvaW50ZXJEb3duLFxuICAgIHBvaW50ZXJVcCxcbiAgICByZW1vdmVBdHRyLFxuICAgIHRvTm9kZXMsXG4gICAgdHJpZ2dlcixcbn0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNpemUob3B0aW9ucykge1xuICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVSZXNpemUsIG9wdGlvbnMsICdyZXNpemUnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9ic2VydmUob2JzZXJ2ZUludGVyc2VjdGlvbiwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtdXRhdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9ic2VydmUob2JzZXJ2ZU11dGF0aW9uLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhenlsb2FkKG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBpbnRlcnNlY3Rpb24oe1xuICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbiAoZW50cmllcywgb2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0cyA9IHRoaXMuJGVsLCBwcmVsb2FkID0gNSB9ID0gb3B0aW9ucztcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgdG9Ob2Rlcyhpc0Z1bmN0aW9uKHRhcmdldHMpID8gdGFyZ2V0cyh0aGlzKSA6IHRhcmdldHMpKSB7XG4gICAgICAgICAgICAgICAgJCQoJ1tsb2FkaW5nPVwibGF6eVwiXScsIGVsKVxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgcHJlbG9hZCAtIDEpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChlbCkgPT4gcmVtb3ZlQXR0cihlbCwgJ2xvYWRpbmcnKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgZW50cmllc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHsgaXNJbnRlcnNlY3RpbmcgfSkgPT4gaXNJbnRlcnNlY3RpbmcpXG4gICAgICAgICAgICAgICAgLm1hcCgoeyB0YXJnZXQgfSkgPT4gdGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLnVub2JzZXJ2ZShlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGwob3B0aW9ucykge1xuICAgIHJldHVybiBvYnNlcnZlKFxuICAgICAgICBmdW5jdGlvbiAodGFyZ2V0LCBoYW5kbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3Q6IG9uKHRhcmdldCwgJ3Njcm9sbCcsIGhhbmRsZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRhcmdldDogKCkgPT4gd2luZG93LFxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3Njcm9sbCdcbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3dpcGUob3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICAgIG9ic2VydmUodGFyZ2V0LCBoYW5kbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmU6IG5vb3AsXG4gICAgICAgICAgICAgICAgdW5vYnNlcnZlOiBub29wLFxuICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3Q6IG9uKHRhcmdldCwgcG9pbnRlckRvd24sIGhhbmRsZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXIoZSkge1xuICAgICAgICAgICAgaWYgKCFpc1RvdWNoKGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBIYW5kbGUgU3dpcGUgR2VzdHVyZVxuICAgICAgICAgICAgY29uc3QgcG9zID0gZ2V0RXZlbnRQb3MoZSk7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSAndGFnTmFtZScgaW4gZS50YXJnZXQgPyBlLnRhcmdldCA6IHBhcmVudChlLnRhcmdldCk7XG4gICAgICAgICAgICBvbmNlKGRvY3VtZW50LCBgJHtwb2ludGVyVXB9ICR7cG9pbnRlckNhbmNlbH0gc2Nyb2xsYCwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHgsIHkgfSA9IGdldEV2ZW50UG9zKGUpO1xuXG4gICAgICAgICAgICAgICAgLy8gc3dpcGVcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIChlLnR5cGUgIT09ICdzY3JvbGwnICYmIHRhcmdldCAmJiB4ICYmIE1hdGguYWJzKHBvcy54IC0geCkgPiAxMDApIHx8XG4gICAgICAgICAgICAgICAgICAgICh5ICYmIE1hdGguYWJzKHBvcy55IC0geSkgPiAxMDApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcih0YXJnZXQsICdzd2lwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcih0YXJnZXQsIGBzd2lwZSR7c3dpcGVEaXJlY3Rpb24ocG9zLngsIHBvcy55LCB4LCB5KX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gb2JzZXJ2ZShvYnNlcnZlLCBvcHRpb25zLCBlbWl0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb2JzZXJ2ZSxcbiAgICAgICAgaGFuZGxlcigpIHtcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoZW1pdCk7XG4gICAgICAgIH0sXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc3dpcGVEaXJlY3Rpb24oeDEsIHkxLCB4MiwgeTIpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeDEgLSB4MikgPj0gTWF0aC5hYnMoeTEgLSB5MilcbiAgICAgICAgPyB4MSAtIHgyID4gMFxuICAgICAgICAgICAgPyAnTGVmdCdcbiAgICAgICAgICAgIDogJ1JpZ2h0J1xuICAgICAgICA6IHkxIC0geTIgPiAwXG4gICAgICAgID8gJ1VwJ1xuICAgICAgICA6ICdEb3duJztcbn1cbiIsImltcG9ydCBDbGFzcyBmcm9tICcuLi9taXhpbi9jbGFzcyc7XG5pbXBvcnQgVG9nZ2xhYmxlIGZyb20gJy4uL21peGluL3RvZ2dsYWJsZSc7XG5pbXBvcnQgeyBrZXlNYXAgfSBmcm9tICcuLi91dGlsL2tleXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVJZCB9IGZyb20gJy4uL2FwaS9pbnN0YW5jZSc7XG5pbXBvcnQgeyBsYXp5bG9hZCB9IGZyb20gJy4uL2FwaS9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge1xuICAgICQsXG4gICAgJCQsXG4gICAgYXR0cixcbiAgICBjaGlsZHJlbixcbiAgICBjc3MsXG4gICAgZGltZW5zaW9ucyxcbiAgICBmaWx0ZXIsXG4gICAgZ2V0SW5kZXgsXG4gICAgaGFzQ2xhc3MsXG4gICAgaW5jbHVkZXMsXG4gICAgaW5kZXgsXG4gICAgaXNUYWcsXG4gICAgc2Nyb2xsUGFyZW50cyxcbiAgICBzdW1CeSxcbiAgICB0b0Zsb2F0LFxuICAgIHRvZ2dsZUNsYXNzLFxuICAgIFRyYW5zaXRpb24sXG4gICAgdW53cmFwLFxuICAgIHdpdGhpbixcbiAgICB3cmFwQWxsLFxufSBmcm9tICd1aWtpdC11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG1peGluczogW0NsYXNzLCBUb2dnbGFibGVdLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgICAgYW5pbWF0aW9uOiBCb29sZWFuLFxuICAgICAgICB0YXJnZXRzOiBTdHJpbmcsXG4gICAgICAgIGFjdGl2ZTogbnVsbCxcbiAgICAgICAgY29sbGFwc2libGU6IEJvb2xlYW4sXG4gICAgICAgIG11bHRpcGxlOiBCb29sZWFuLFxuICAgICAgICB0b2dnbGU6IFN0cmluZyxcbiAgICAgICAgY29udGVudDogU3RyaW5nLFxuICAgICAgICBvZmZzZXQ6IE51bWJlcixcbiAgICB9LFxuXG4gICAgZGF0YToge1xuICAgICAgICB0YXJnZXRzOiAnPiAqJyxcbiAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgYW5pbWF0aW9uOiB0cnVlLFxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcbiAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICBjbHNPcGVuOiAndWstb3BlbicsXG4gICAgICAgIHRvZ2dsZTogJz4gLnVrLWFjY29yZGlvbi10aXRsZScsXG4gICAgICAgIGNvbnRlbnQ6ICc+IC51ay1hY2NvcmRpb24tY29udGVudCcsXG4gICAgICAgIG9mZnNldDogMCxcbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgaXRlbXMoeyB0YXJnZXRzIH0sICRlbCkge1xuICAgICAgICAgICAgcmV0dXJuICQkKHRhcmdldHMsICRlbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9nZ2xlcyh7IHRvZ2dsZSB9KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5tYXAoKGl0ZW0pID0+ICQodG9nZ2xlLCBpdGVtKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY29udGVudHMoeyBjb250ZW50IH0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5fd3JhcHBlcj8uZmlyc3RFbGVtZW50Q2hpbGQgfHwgJChjb250ZW50LCBpdGVtKSk7XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHdhdGNoOiB7XG4gICAgICAgIGl0ZW1zKGl0ZW1zLCBwcmV2KSB7XG4gICAgICAgICAgICBpZiAocHJldiB8fCBoYXNDbGFzcyhpdGVtcywgdGhpcy5jbHNPcGVuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYWN0aXZlID1cbiAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUgIT09IGZhbHNlICYmIGl0ZW1zW051bWJlcih0aGlzLmFjdGl2ZSldKSB8fFxuICAgICAgICAgICAgICAgICghdGhpcy5jb2xsYXBzaWJsZSAmJiBpdGVtc1swXSk7XG5cbiAgICAgICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZShhY3RpdmUsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICB0b2dnbGVzKCkge1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbnRlbnRzKGl0ZW1zKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNPcGVuID0gaGFzQ2xhc3MoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuZmluZCgoaXRlbSkgPT4gd2l0aGluKGVsLCBpdGVtKSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xzT3BlblxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBoaWRlKGVsLCAhaXNPcGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuJGVtaXQoKTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgb2JzZXJ2ZTogbGF6eWxvYWQoKSxcblxuICAgIGV2ZW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnY2xpY2sga2V5ZG93bicsXG5cbiAgICAgICAgICAgIGRlbGVnYXRlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLnRhcmdldHN9ICR7dGhpcy4kcHJvcHMudG9nZ2xlfWA7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBhc3luYyBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS50eXBlID09PSAna2V5ZG93bicgJiYgZS5rZXlDb2RlICE9PSBrZXlNYXAuU1BBQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29mZj8uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb2ZmID0ga2VlcFNjcm9sbFBvc2l0aW9uKGUudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnRvZ2dsZShpbmRleCh0aGlzLnRvZ2dsZXMsIGUuY3VycmVudCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX29mZigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3Nob3duIGhpZGRlbicsXG5cbiAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgIGRlbGVnYXRlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRhcmdldHM7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgXSxcblxuICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlSXRlbXMgPSBmaWx0ZXIodGhpcy5pdGVtcywgYC4ke3RoaXMuY2xzT3Blbn1gKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IGluIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZSA9IHRoaXMudG9nZ2xlc1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50c1tpbmRleF07XG5cbiAgICAgICAgICAgIGlmICghdG9nZ2xlIHx8ICFjb250ZW50KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRvZ2dsZS5pZCA9IGdlbmVyYXRlSWQodGhpcywgdG9nZ2xlLCBgLXRpdGxlLSR7aW5kZXh9YCk7XG4gICAgICAgICAgICBjb250ZW50LmlkID0gZ2VuZXJhdGVJZCh0aGlzLCBjb250ZW50LCBgLWNvbnRlbnQtJHtpbmRleH1gKTtcblxuICAgICAgICAgICAgY29uc3QgYWN0aXZlID0gaW5jbHVkZXMoYWN0aXZlSXRlbXMsIHRoaXMuaXRlbXNbaW5kZXhdKTtcbiAgICAgICAgICAgIGF0dHIodG9nZ2xlLCB7XG4gICAgICAgICAgICAgICAgcm9sZTogaXNUYWcodG9nZ2xlLCAnYScpID8gJ2J1dHRvbicgOiBudWxsLFxuICAgICAgICAgICAgICAgICdhcmlhLWNvbnRyb2xzJzogY29udGVudC5pZCxcbiAgICAgICAgICAgICAgICAnYXJpYS1leHBhbmRlZCc6IGFjdGl2ZSxcbiAgICAgICAgICAgICAgICAnYXJpYS1kaXNhYmxlZCc6ICF0aGlzLmNvbGxhcHNpYmxlICYmIGFjdGl2ZUl0ZW1zLmxlbmd0aCA8IDIgJiYgYWN0aXZlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGF0dHIoY29udGVudCwgeyByb2xlOiAncmVnaW9uJywgJ2FyaWEtbGFiZWxsZWRieSc6IHRvZ2dsZS5pZCB9KTtcbiAgICAgICAgICAgIGlmIChpc1RhZyhjb250ZW50LCAndWwnKSkge1xuICAgICAgICAgICAgICAgIGF0dHIoY2hpbGRyZW4oY29udGVudCksICdyb2xlJywgJ3ByZXNlbnRhdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgYXN5bmMgdG9nZ2xlKGl0ZW0sIGFuaW1hdGUpIHtcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLml0ZW1zW2dldEluZGV4KGl0ZW0sIHRoaXMuaXRlbXMpXTtcbiAgICAgICAgICAgIGxldCBpdGVtcyA9IFtpdGVtXTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW1zID0gZmlsdGVyKHRoaXMuaXRlbXMsIGAuJHt0aGlzLmNsc09wZW59YCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiAhaW5jbHVkZXMoYWN0aXZlSXRlbXMsIGl0ZW1zWzBdKSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zID0gaXRlbXMuY29uY2F0KGFjdGl2ZUl0ZW1zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNpYmxlICYmIGFjdGl2ZUl0ZW1zLmxlbmd0aCA8IDIgJiYgaW5jbHVkZXMoYWN0aXZlSXRlbXMsIGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICBpdGVtcy5tYXAoKGVsKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUVsZW1lbnQoZWwsICFpbmNsdWRlcyhhY3RpdmVJdGVtcywgZWwpLCAoZWwsIHNob3cpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGVsLCB0aGlzLmNsc09wZW4sIHNob3cpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5pbWF0ZSA9PT0gZmFsc2UgfHwgIXRoaXMuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZSgkKHRoaXMuY29udGVudCwgZWwpLCAhc2hvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNpdGlvbihlbCwgc2hvdywgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxuZnVuY3Rpb24gaGlkZShlbCwgaGlkZSkge1xuICAgIGVsICYmIChlbC5oaWRkZW4gPSBoaWRlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdHJhbnNpdGlvbihlbCwgc2hvdywgeyBjb250ZW50LCBkdXJhdGlvbiwgdmVsb2NpdHksIHRyYW5zaXRpb24gfSkge1xuICAgIGNvbnRlbnQgPSBlbC5fd3JhcHBlcj8uZmlyc3RFbGVtZW50Q2hpbGQgfHwgJChjb250ZW50LCBlbCk7XG5cbiAgICBpZiAoIWVsLl93cmFwcGVyKSB7XG4gICAgICAgIGVsLl93cmFwcGVyID0gd3JhcEFsbChjb250ZW50LCAnPGRpdj4nKTtcbiAgICB9XG5cbiAgICBjb25zdCB3cmFwcGVyID0gZWwuX3dyYXBwZXI7XG4gICAgY3NzKHdyYXBwZXIsICdvdmVyZmxvdycsICdoaWRkZW4nKTtcbiAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gdG9GbG9hdChjc3Mod3JhcHBlciwgJ2hlaWdodCcpKTtcblxuICAgIGF3YWl0IFRyYW5zaXRpb24uY2FuY2VsKHdyYXBwZXIpO1xuICAgIGhpZGUoY29udGVudCwgZmFsc2UpO1xuXG4gICAgY29uc3QgZW5kSGVpZ2h0ID1cbiAgICAgICAgc3VtQnkoWydtYXJnaW5Ub3AnLCAnbWFyZ2luQm90dG9tJ10sIChwcm9wKSA9PiBjc3MoY29udGVudCwgcHJvcCkpICtcbiAgICAgICAgZGltZW5zaW9ucyhjb250ZW50KS5oZWlnaHQ7XG5cbiAgICBjb25zdCBwZXJjZW50ID0gY3VycmVudEhlaWdodCAvIGVuZEhlaWdodDtcbiAgICBkdXJhdGlvbiA9ICh2ZWxvY2l0eSAqIGVuZEhlaWdodCArIGR1cmF0aW9uKSAqIChzaG93ID8gMSAtIHBlcmNlbnQgOiBwZXJjZW50KTtcbiAgICBjc3Mod3JhcHBlciwgJ2hlaWdodCcsIGN1cnJlbnRIZWlnaHQpO1xuXG4gICAgYXdhaXQgVHJhbnNpdGlvbi5zdGFydCh3cmFwcGVyLCB7IGhlaWdodDogc2hvdyA/IGVuZEhlaWdodCA6IDAgfSwgZHVyYXRpb24sIHRyYW5zaXRpb24pO1xuXG4gICAgdW53cmFwKGNvbnRlbnQpO1xuICAgIGRlbGV0ZSBlbC5fd3JhcHBlcjtcblxuICAgIGlmICghc2hvdykge1xuICAgICAgICBoaWRlKGNvbnRlbnQsIHRydWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24ga2VlcFNjcm9sbFBvc2l0aW9uKGVsKSB7XG4gICAgY29uc3QgW3Njcm9sbFBhcmVudF0gPSBzY3JvbGxQYXJlbnRzKGVsLCB0cnVlKTtcbiAgICBsZXQgZnJhbWU7XG4gICAgKGZ1bmN0aW9uIHNjcm9sbCgpIHtcbiAgICAgICAgZnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB0b3AgfSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgaWYgKHRvcCA8IDApIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxQYXJlbnQuc2Nyb2xsVG9wICs9IHRvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcm9sbCgpO1xuICAgICAgICB9KTtcbiAgICB9KSgpO1xuXG4gICAgcmV0dXJuICgpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZSkpO1xufVxuIiwiaW1wb3J0IENsYXNzIGZyb20gJy4uL21peGluL2NsYXNzJztcbmltcG9ydCBUb2dnbGFibGUgZnJvbSAnLi4vbWl4aW4vdG9nZ2xhYmxlJztcbmltcG9ydCB7IGNzcywgdG9GbG9hdCwgVHJhbnNpdGlvbiB9IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbWl4aW5zOiBbQ2xhc3MsIFRvZ2dsYWJsZV0sXG5cbiAgICBhcmdzOiAnYW5pbWF0aW9uJyxcblxuICAgIHByb3BzOiB7XG4gICAgICAgIGFuaW1hdGlvbjogQm9vbGVhbixcbiAgICAgICAgY2xvc2U6IFN0cmluZyxcbiAgICB9LFxuXG4gICAgZGF0YToge1xuICAgICAgICBhbmltYXRpb246IHRydWUsXG4gICAgICAgIHNlbENsb3NlOiAnLnVrLWFsZXJ0LWNsb3NlJyxcbiAgICAgICAgZHVyYXRpb246IDE1MCxcbiAgICB9LFxuXG4gICAgZXZlbnRzOiB7XG4gICAgICAgIG5hbWU6ICdjbGljaycsXG5cbiAgICAgICAgZGVsZWdhdGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxDbG9zZTtcbiAgICAgICAgfSxcblxuICAgICAgICBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLiRlbCwgZmFsc2UsIGFuaW1hdGUpO1xuICAgICAgICAgICAgdGhpcy4kZGVzdHJveSh0cnVlKTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxuZnVuY3Rpb24gYW5pbWF0ZShlbCwgc2hvdywgeyBkdXJhdGlvbiwgdHJhbnNpdGlvbiwgdmVsb2NpdHkgfSkge1xuICAgIGNvbnN0IGhlaWdodCA9IHRvRmxvYXQoY3NzKGVsLCAnaGVpZ2h0JykpO1xuICAgIGNzcyhlbCwgJ2hlaWdodCcsIGhlaWdodCk7XG4gICAgcmV0dXJuIFRyYW5zaXRpb24uc3RhcnQoXG4gICAgICAgIGVsLFxuICAgICAgICB7XG4gICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICBtYXJnaW5Ub3A6IDAsXG4gICAgICAgICAgICBtYXJnaW5Cb3R0b206IDAsXG4gICAgICAgICAgICBwYWRkaW5nVG9wOiAwLFxuICAgICAgICAgICAgcGFkZGluZ0JvdHRvbTogMCxcbiAgICAgICAgICAgIGJvcmRlclRvcDogMCxcbiAgICAgICAgICAgIGJvcmRlckJvdHRvbTogMCxcbiAgICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHZlbG9jaXR5ICogaGVpZ2h0ICsgZHVyYXRpb24sXG4gICAgICAgIHRyYW5zaXRpb25cbiAgICApO1xufVxuIiwiaW1wb3J0IHsgaW50ZXJzZWN0aW9uIH0gZnJvbSAnLi4vYXBpL29ic2VydmFibGVzJztcbmltcG9ydCB7IGNzcywgaGFzQXR0ciwgaXNJblZpZXcsIGlzVGFnLCBpc1ZpZGVvLCBpc1Zpc2libGUsIG11dGUsIHBhdXNlLCBwbGF5IH0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBhcmdzOiAnYXV0b3BsYXknLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgICAgYXV0b211dGU6IEJvb2xlYW4sXG4gICAgICAgIGF1dG9wbGF5OiBCb29sZWFuLFxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIGF1dG9tdXRlOiBmYWxzZSxcbiAgICAgICAgYXV0b3BsYXk6IHRydWUsXG4gICAgfSxcblxuICAgIGNvbm5lY3RlZCgpIHtcbiAgICAgICAgdGhpcy5pblZpZXcgPSB0aGlzLmF1dG9wbGF5ID09PSAnaW52aWV3JztcblxuICAgICAgICBpZiAodGhpcy5pblZpZXcgJiYgIWhhc0F0dHIodGhpcy4kZWwsICdwcmVsb2FkJykpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsLnByZWxvYWQgPSAnbm9uZSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUYWcodGhpcy4kZWwsICdpZnJhbWUnKSAmJiAhaGFzQXR0cih0aGlzLiRlbCwgJ2FsbG93JykpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsLmFsbG93ID0gJ2F1dG9wbGF5JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmF1dG9tdXRlKSB7XG4gICAgICAgICAgICBtdXRlKHRoaXMuJGVsKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBvYnNlcnZlOiBpbnRlcnNlY3Rpb24oe1xuICAgICAgICBhcmdzOiB7IGludGVyc2VjdGluZzogZmFsc2UgfSxcbiAgICB9KSxcblxuICAgIHVwZGF0ZToge1xuICAgICAgICByZWFkKHsgdmlzaWJsZSB9KSB7XG4gICAgICAgICAgICBpZiAoIWlzVmlkZW8odGhpcy4kZWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByZXY6IHZpc2libGUsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogaXNWaXNpYmxlKHRoaXMuJGVsKSAmJiBjc3ModGhpcy4kZWwsICd2aXNpYmlsaXR5JykgIT09ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgIGluVmlldzogdGhpcy5pblZpZXcgJiYgaXNJblZpZXcodGhpcy4kZWwpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcblxuICAgICAgICB3cml0ZSh7IHByZXYsIHZpc2libGUsIGluVmlldyB9KSB7XG4gICAgICAgICAgICBpZiAoIXZpc2libGUgfHwgKHRoaXMuaW5WaWV3ICYmICFpblZpZXcpKSB7XG4gICAgICAgICAgICAgICAgcGF1c2UodGhpcy4kZWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgodGhpcy5hdXRvcGxheSA9PT0gdHJ1ZSAmJiAhcHJldikgfHwgKHRoaXMuaW5WaWV3ICYmIGluVmlldykpIHtcbiAgICAgICAgICAgICAgICBwbGF5KHRoaXMuJGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9LFxufTtcbiIsImltcG9ydCB7IHJlc2l6ZSB9IGZyb20gJy4uL2FwaS9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgVmlkZW8gZnJvbSAnLi92aWRlbyc7XG5pbXBvcnQgeyBjc3MsIERpbWVuc2lvbnMsIHBhcmVudCB9IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbWl4aW5zOiBbVmlkZW9dLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgICAgd2lkdGg6IE51bWJlcixcbiAgICAgICAgaGVpZ2h0OiBOdW1iZXIsXG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgYXV0b211dGU6IHRydWUsXG4gICAgfSxcblxuICAgIGV2ZW50czoge1xuICAgICAgICAnbG9hZCBsb2FkZWRtZXRhZGF0YScoKSB7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdyZXNpemUnKTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgb2JzZXJ2ZTogcmVzaXplKHtcbiAgICAgICAgdGFyZ2V0OiAoeyAkZWwgfSkgPT4gWyRlbCwgZ2V0UG9zaXRpb25lZFBhcmVudCgkZWwpIHx8IHBhcmVudCgkZWwpXSxcbiAgICB9KSxcblxuICAgIHVwZGF0ZToge1xuICAgICAgICByZWFkKCkge1xuICAgICAgICAgICAgY29uc3QgeyByYXRpbywgY292ZXIgfSA9IERpbWVuc2lvbnM7XG4gICAgICAgICAgICBjb25zdCB7ICRlbCwgd2lkdGgsIGhlaWdodCB9ID0gdGhpcztcblxuICAgICAgICAgICAgbGV0IGRpbSA9IHsgd2lkdGgsIGhlaWdodCB9O1xuXG4gICAgICAgICAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRyaW5zaWMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAkZWwubmF0dXJhbFdpZHRoIHx8ICRlbC52aWRlb1dpZHRoIHx8ICRlbC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAkZWwubmF0dXJhbEhlaWdodCB8fCAkZWwudmlkZW9IZWlnaHQgfHwgJGVsLmNsaWVudEhlaWdodCxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpbSA9IHJhdGlvKGludHJpbnNpYywgJ3dpZHRoJywgd2lkdGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpbSA9IHJhdGlvKGludHJpbnNpYywgJ2hlaWdodCcsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGltID0gaW50cmluc2ljO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgeyBvZmZzZXRIZWlnaHQ6IGNvdmVySGVpZ2h0LCBvZmZzZXRXaWR0aDogY292ZXJXaWR0aCB9ID1cbiAgICAgICAgICAgICAgICBnZXRQb3NpdGlvbmVkUGFyZW50KCRlbCkgfHwgcGFyZW50KCRlbCk7XG4gICAgICAgICAgICBjb25zdCBjb3ZlckRpbSA9IGNvdmVyKGRpbSwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjb3ZlcldpZHRoICsgKGNvdmVyV2lkdGggJSAyID8gMSA6IDApLFxuICAgICAgICAgICAgICAgIGhlaWdodDogY292ZXJIZWlnaHQgKyAoY292ZXJIZWlnaHQgJSAyID8gMSA6IDApLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghY292ZXJEaW0ud2lkdGggfHwgIWNvdmVyRGltLmhlaWdodCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvdmVyRGltO1xuICAgICAgICB9LFxuXG4gICAgICAgIHdyaXRlKHsgaGVpZ2h0LCB3aWR0aCB9KSB7XG4gICAgICAgICAgICBjc3ModGhpcy4kZWwsIHsgaGVpZ2h0LCB3aWR0aCB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IFsncmVzaXplJ10sXG4gICAgfSxcbn07XG5cbmZ1bmN0aW9uIGdldFBvc2l0aW9uZWRQYXJlbnQoZWwpIHtcbiAgICB3aGlsZSAoKGVsID0gcGFyZW50KGVsKSkpIHtcbiAgICAgICAgaWYgKGNzcyhlbCwgJ3Bvc2l0aW9uJykgIT09ICdzdGF0aWMnKSB7XG4gICAgICAgICAgICByZXR1cm4gZWw7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQge1xuICAgIGNzcyxcbiAgICBkaW1lbnNpb25zLFxuICAgIGZsaXBQb3NpdGlvbixcbiAgICBpbmNsdWRlcyxcbiAgICBpc1J0bCxcbiAgICBwb3NpdGlvbkF0LFxuICAgIHNjcm9sbFBhcmVudHMsXG4gICAgdG9QeCxcbn0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgICBwb3M6IFN0cmluZyxcbiAgICAgICAgb2Zmc2V0OiBudWxsLFxuICAgICAgICBmbGlwOiBCb29sZWFuLFxuICAgICAgICBzaGlmdDogQm9vbGVhbixcbiAgICAgICAgaW5zZXQ6IEJvb2xlYW4sXG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgcG9zOiBgYm90dG9tLSR7aXNSdGwgPyAncmlnaHQnIDogJ2xlZnQnfWAsXG4gICAgICAgIG9mZnNldDogZmFsc2UsXG4gICAgICAgIGZsaXA6IHRydWUsXG4gICAgICAgIHNoaWZ0OiB0cnVlLFxuICAgICAgICBpbnNldDogZmFsc2UsXG4gICAgfSxcblxuICAgIGNvbm5lY3RlZCgpIHtcbiAgICAgICAgdGhpcy5wb3MgPSB0aGlzLiRwcm9wcy5wb3Muc3BsaXQoJy0nKS5jb25jYXQoJ2NlbnRlcicpLnNsaWNlKDAsIDIpO1xuICAgICAgICBbdGhpcy5kaXIsIHRoaXMuYWxpZ25dID0gdGhpcy5wb3M7XG4gICAgICAgIHRoaXMuYXhpcyA9IGluY2x1ZGVzKFsndG9wJywgJ2JvdHRvbSddLCB0aGlzLmRpcikgPyAneScgOiAneCc7XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgcG9zaXRpb25BdChlbGVtZW50LCB0YXJnZXQsIGJvdW5kYXJ5KSB7XG4gICAgICAgICAgICBsZXQgb2Zmc2V0ID0gW3RoaXMuZ2V0UG9zaXRpb25PZmZzZXQoZWxlbWVudCksIHRoaXMuZ2V0U2hpZnRPZmZzZXQoZWxlbWVudCldO1xuICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gW3RoaXMuZmxpcCAmJiAnZmxpcCcsIHRoaXMuc2hpZnQgJiYgJ3NoaWZ0J107XG5cbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaCA9IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBbdGhpcy5pbnNldCA/IHRoaXMuZGlyIDogZmxpcFBvc2l0aW9uKHRoaXMuZGlyKSwgdGhpcy5hbGlnbl0sXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBbdGhpcy5kaXIsIHRoaXMuYWxpZ25dLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXhpcyA9PT0gJ3knKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGF0dGFjaCkge1xuICAgICAgICAgICAgICAgICAgICBhdHRhY2hbcHJvcF0ucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvZmZzZXQucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudC5yZXZlcnNlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3RvcmVTY3JvbGxQb3NpdGlvbiA9IHN0b3JlU2Nyb2xsUG9zaXRpb24oZWxlbWVudCk7XG5cbiAgICAgICAgICAgIC8vIEVuc3VyZSBub25lIHBvc2l0aW9uZWQgZWxlbWVudCBkb2VzIG5vdCBnZW5lcmF0ZSBzY3JvbGxiYXJzXG4gICAgICAgICAgICBjb25zdCBlbERpbSA9IGRpbWVuc2lvbnMoZWxlbWVudCk7XG4gICAgICAgICAgICBjc3MoZWxlbWVudCwgeyB0b3A6IC1lbERpbS5oZWlnaHQsIGxlZnQ6IC1lbERpbS53aWR0aCB9KTtcblxuICAgICAgICAgICAgcG9zaXRpb25BdChlbGVtZW50LCB0YXJnZXQsIHtcbiAgICAgICAgICAgICAgICBhdHRhY2gsXG4gICAgICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgICAgIGJvdW5kYXJ5LFxuICAgICAgICAgICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgICAgICAgICB2aWV3cG9ydE9mZnNldDogdGhpcy5nZXRWaWV3cG9ydE9mZnNldChlbGVtZW50KSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXN0b3JlU2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRQb3NpdGlvbk9mZnNldChlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRvUHgoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0ID09PSBmYWxzZSA/IGNzcyhlbGVtZW50LCAnLS11ay1wb3NpdGlvbi1vZmZzZXQnKSA6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF4aXMgPT09ICd4JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgICkgKlxuICAgICAgICAgICAgICAgIChpbmNsdWRlcyhbJ2xlZnQnLCAndG9wJ10sIHRoaXMuZGlyKSA/IC0xIDogMSkgKlxuICAgICAgICAgICAgICAgICh0aGlzLmluc2V0ID8gLTEgOiAxKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRTaGlmdE9mZnNldChlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGlnbiA9PT0gJ2NlbnRlcidcbiAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICA6IHRvUHgoXG4gICAgICAgICAgICAgICAgICAgICAgY3NzKGVsZW1lbnQsICctLXVrLXBvc2l0aW9uLXNoaWZ0LW9mZnNldCcpLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXhpcyA9PT0gJ3knID8gJ3dpZHRoJyA6ICdoZWlnaHQnLFxuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICkgKiAoaW5jbHVkZXMoWydsZWZ0JywgJ3RvcCddLCB0aGlzLmFsaWduKSA/IDEgOiAtMSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0Vmlld3BvcnRPZmZzZXQoZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRvUHgoY3NzKGVsZW1lbnQsICctLXVrLXBvc2l0aW9uLXZpZXdwb3J0LW9mZnNldCcpKTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxuZnVuY3Rpb24gc3RvcmVTY3JvbGxQb3NpdGlvbihlbGVtZW50KSB7XG4gICAgY29uc3QgW3Njcm9sbEVsZW1lbnRdID0gc2Nyb2xsUGFyZW50cyhlbGVtZW50KTtcbiAgICBjb25zdCB7IHNjcm9sbFRvcCB9ID0gc2Nyb2xsRWxlbWVudDtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxUb3AgIT09IHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICBzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgICAgfVxuICAgIH07XG59XG4iLCJpbXBvcnQgeyAkIH0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgICBjb250YWluZXI6IEJvb2xlYW4sXG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgY29udGFpbmVyOiB0cnVlLFxuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgICBjb250YWluZXIoeyBjb250YWluZXIgfSkge1xuICAgICAgICAgICAgcmV0dXJuIChjb250YWluZXIgPT09IHRydWUgJiYgdGhpcy4kY29udGFpbmVyKSB8fCAoY29udGFpbmVyICYmICQoY29udGFpbmVyKSk7XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG4iLCJpbXBvcnQgeyBjc3MsIG1hdGNoZXMsIG9uLCBzY3JvbGxQYXJlbnRzLCB3aWR0aCB9IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5sZXQgcHJldmVudGVkO1xuZXhwb3J0IGZ1bmN0aW9uIHByZXZlbnRCYWNrZ3JvdW5kU2Nyb2xsKGVsKSB7XG4gICAgLy8gJ292ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW4nIG9ubHkgd29ya3MgY29uc2lzdGVudGx5IGlmIGVsIG92ZXJmbG93cyAoU2FmYXJpKVxuICAgIGNvbnN0IG9mZiA9IG9uKFxuICAgICAgICBlbCxcbiAgICAgICAgJ3RvdWNobW92ZScsXG4gICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZS50YXJnZXRUb3VjaGVzLmxlbmd0aCAhPT0gMSB8fCBtYXRjaGVzKGUudGFyZ2V0LCAnaW5wdXRbdHlwZT1cInJhbmdlXCInKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IFt7IHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH1dID0gc2Nyb2xsUGFyZW50cyhlLnRhcmdldCk7XG5cbiAgICAgICAgICAgIGlmIChjbGllbnRIZWlnaHQgPj0gc2Nyb2xsSGVpZ2h0ICYmIGUuY2FuY2VsYWJsZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBwYXNzaXZlOiBmYWxzZSB9XG4gICAgKTtcblxuICAgIGlmIChwcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuIG9mZjtcbiAgICB9XG4gICAgcHJldmVudGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IHsgc2Nyb2xsaW5nRWxlbWVudCB9ID0gZG9jdW1lbnQ7XG4gICAgY3NzKHNjcm9sbGluZ0VsZW1lbnQsIHtcbiAgICAgICAgb3ZlcmZsb3dZOiBDU1Muc3VwcG9ydHMoJ292ZXJmbG93JywgJ2NsaXAnKSA/ICdjbGlwJyA6ICdoaWRkZW4nLFxuICAgICAgICB0b3VjaEFjdGlvbjogJ25vbmUnLFxuICAgICAgICBwYWRkaW5nUmlnaHQ6IHdpZHRoKHdpbmRvdykgLSBzY3JvbGxpbmdFbGVtZW50LmNsaWVudFdpZHRoIHx8ICcnLFxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHByZXZlbnRlZCA9IGZhbHNlO1xuICAgICAgICBvZmYoKTtcbiAgICAgICAgY3NzKHNjcm9sbGluZ0VsZW1lbnQsIHsgb3ZlcmZsb3dZOiAnJywgdG91Y2hBY3Rpb246ICcnLCBwYWRkaW5nUmlnaHQ6ICcnIH0pO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBsYXp5bG9hZCB9IGZyb20gJy4uL2FwaS9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgUG9zaXRpb24gZnJvbSAnLi4vbWl4aW4vcG9zaXRpb24nO1xuaW1wb3J0IENvbnRhaW5lciBmcm9tICcuLi9taXhpbi9jb250YWluZXInO1xuaW1wb3J0IFRvZ2dsYWJsZSBmcm9tICcuLi9taXhpbi90b2dnbGFibGUnO1xuaW1wb3J0IHsga2V5TWFwIH0gZnJvbSAnLi4vdXRpbC9rZXlzJztcbmltcG9ydCB7IHByZXZlbnRCYWNrZ3JvdW5kU2Nyb2xsIH0gZnJvbSAnLi4vbWl4aW4vaW50ZXJuYWwvc2Nyb2xsJztcbmltcG9ydCB7XG4gICAgYWRkQ2xhc3MsXG4gICAgYXBwZW5kLFxuICAgIGFwcGx5LFxuICAgIGF0dHIsXG4gICAgY3NzLFxuICAgIGhhc0NsYXNzLFxuICAgIGluY2x1ZGVzLFxuICAgIGlzU2FtZVNpdGVBbmNob3IsXG4gICAgaXNUb3VjaCxcbiAgICBtYXRjaGVzLFxuICAgIE1vdXNlVHJhY2tlcixcbiAgICBvYnNlcnZlUmVzaXplLFxuICAgIG9mZnNldCxcbiAgICBvZmZzZXRWaWV3cG9ydCxcbiAgICBvbixcbiAgICBvbmNlLFxuICAgIG92ZXJmbG93UGFyZW50cyxcbiAgICBwYXJlbnQsXG4gICAgcGljayxcbiAgICBwb2ludGVyQ2FuY2VsLFxuICAgIHBvaW50ZXJEb3duLFxuICAgIHBvaW50ZXJFbnRlcixcbiAgICBwb2ludGVyTGVhdmUsXG4gICAgcG9pbnRlclVwLFxuICAgIHF1ZXJ5LFxuICAgIHJlbW92ZUNsYXNzLFxuICAgIHdpdGhpbixcbn0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBsZXQgYWN0aXZlO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbWl4aW5zOiBbQ29udGFpbmVyLCBQb3NpdGlvbiwgVG9nZ2xhYmxlXSxcblxuICAgIGFyZ3M6ICdwb3MnLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgICAgbW9kZTogJ2xpc3QnLFxuICAgICAgICB0b2dnbGU6IEJvb2xlYW4sXG4gICAgICAgIGJvdW5kYXJ5OiBCb29sZWFuLFxuICAgICAgICBib3VuZGFyeVg6IEJvb2xlYW4sXG4gICAgICAgIGJvdW5kYXJ5WTogQm9vbGVhbixcbiAgICAgICAgdGFyZ2V0OiBCb29sZWFuLFxuICAgICAgICB0YXJnZXRYOiBCb29sZWFuLFxuICAgICAgICB0YXJnZXRZOiBCb29sZWFuLFxuICAgICAgICBzdHJldGNoOiBCb29sZWFuLFxuICAgICAgICBkZWxheVNob3c6IE51bWJlcixcbiAgICAgICAgZGVsYXlIaWRlOiBOdW1iZXIsXG4gICAgICAgIGF1dG9VcGRhdGU6IEJvb2xlYW4sXG4gICAgICAgIGNsc0Ryb3A6IFN0cmluZyxcbiAgICAgICAgYW5pbWF0ZU91dDogQm9vbGVhbixcbiAgICAgICAgYmdTY3JvbGw6IEJvb2xlYW4sXG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgbW9kZTogWydjbGljaycsICdob3ZlciddLFxuICAgICAgICB0b2dnbGU6ICctIConLFxuICAgICAgICBib3VuZGFyeTogZmFsc2UsXG4gICAgICAgIGJvdW5kYXJ5WDogZmFsc2UsXG4gICAgICAgIGJvdW5kYXJ5WTogZmFsc2UsXG4gICAgICAgIHRhcmdldDogZmFsc2UsXG4gICAgICAgIHRhcmdldFg6IGZhbHNlLFxuICAgICAgICB0YXJnZXRZOiBmYWxzZSxcbiAgICAgICAgc3RyZXRjaDogZmFsc2UsXG4gICAgICAgIGRlbGF5U2hvdzogMCxcbiAgICAgICAgZGVsYXlIaWRlOiA4MDAsXG4gICAgICAgIGF1dG9VcGRhdGU6IHRydWUsXG4gICAgICAgIGNsc0Ryb3A6IGZhbHNlLFxuICAgICAgICBhbmltYXRlT3V0OiBmYWxzZSxcbiAgICAgICAgYmdTY3JvbGw6IHRydWUsXG4gICAgICAgIGFuaW1hdGlvbjogWyd1ay1hbmltYXRpb24tZmFkZSddLFxuICAgICAgICBjbHM6ICd1ay1vcGVuJyxcbiAgICAgICAgY29udGFpbmVyOiBmYWxzZSxcbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgYm91bmRhcnkoeyBib3VuZGFyeSwgYm91bmRhcnlYLCBib3VuZGFyeVkgfSwgJGVsKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHF1ZXJ5KGJvdW5kYXJ5WCB8fCBib3VuZGFyeSwgJGVsKSB8fCB3aW5kb3csXG4gICAgICAgICAgICAgICAgcXVlcnkoYm91bmRhcnlZIHx8IGJvdW5kYXJ5LCAkZWwpIHx8IHdpbmRvdyxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH0sXG5cbiAgICAgICAgdGFyZ2V0KHsgdGFyZ2V0LCB0YXJnZXRYLCB0YXJnZXRZIH0sICRlbCkge1xuICAgICAgICAgICAgdGFyZ2V0WCA9IHRhcmdldFggfHwgdGFyZ2V0IHx8IHRoaXMudGFyZ2V0RWw7XG4gICAgICAgICAgICB0YXJnZXRZID0gdGFyZ2V0WSB8fCB0YXJnZXQgfHwgdGhpcy50YXJnZXRFbDtcblxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICB0YXJnZXRYID09PSB0cnVlID8gd2luZG93IDogcXVlcnkodGFyZ2V0WCwgJGVsKSxcbiAgICAgICAgICAgICAgICB0YXJnZXRZID09PSB0cnVlID8gd2luZG93IDogcXVlcnkodGFyZ2V0WSwgJGVsKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGNyZWF0ZWQoKSB7XG4gICAgICAgIHRoaXMudHJhY2tlciA9IG5ldyBNb3VzZVRyYWNrZXIoKTtcbiAgICB9LFxuXG4gICAgYmVmb3JlQ29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5jbHNEcm9wID0gdGhpcy4kcHJvcHMuY2xzRHJvcCB8fCBgdWstJHt0aGlzLiRvcHRpb25zLm5hbWV9YDtcbiAgICB9LFxuXG4gICAgY29ubmVjdGVkKCkge1xuICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgJ3VrLWRyb3AnLCB0aGlzLmNsc0Ryb3ApO1xuXG4gICAgICAgIGlmICh0aGlzLnRvZ2dsZSAmJiAhdGhpcy50YXJnZXRFbCkge1xuICAgICAgICAgICAgdGhpcy50YXJnZXRFbCA9IGNyZWF0ZVRvZ2dsZUNvbXBvbmVudCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N0eWxlID0gcGljayh0aGlzLiRlbC5zdHlsZSwgWyd3aWR0aCcsICdoZWlnaHQnXSk7XG4gICAgfSxcblxuICAgIGRpc2Nvbm5lY3RlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKGZhbHNlKTtcbiAgICAgICAgICAgIGFjdGl2ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY3NzKHRoaXMuJGVsLCB0aGlzLl9zdHlsZSk7XG4gICAgfSxcblxuICAgIG9ic2VydmU6IGxhenlsb2FkKHtcbiAgICAgICAgdGFyZ2V0OiAoeyB0b2dnbGUsICRlbCB9KSA9PiBxdWVyeSh0b2dnbGUsICRlbCksXG4gICAgICAgIHRhcmdldHM6ICh7ICRlbCB9KSA9PiAkZWwsXG4gICAgfSksXG5cbiAgICBldmVudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2NsaWNrJyxcblxuICAgICAgICAgICAgZGVsZWdhdGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcudWstZHJvcC1jbG9zZSc7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKGZhbHNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2NsaWNrJyxcblxuICAgICAgICAgICAgZGVsZWdhdGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdhW2hyZWYqPVwiI1wiXSc7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKHsgZGVmYXVsdFByZXZlbnRlZCwgY3VycmVudCB9KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBoYXNoIH0gPSBjdXJyZW50O1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHRQcmV2ZW50ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgaGFzaCAmJlxuICAgICAgICAgICAgICAgICAgICBpc1NhbWVTaXRlQW5jaG9yKGN1cnJlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICF3aXRoaW4oaGFzaCwgdGhpcy4kZWwpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnYmVmb3Jlc2Nyb2xsJyxcblxuICAgICAgICAgICAgaGFuZGxlcigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUoZmFsc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndG9nZ2xlJyxcblxuICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgaGFuZGxlcihlLCB0b2dnbGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1RvZ2dsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdyh0b2dnbGU/LiRlbCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3RvZ2dsZXNob3cnLFxuXG4gICAgICAgICAgICBzZWxmOiB0cnVlLFxuXG4gICAgICAgICAgICBoYW5kbGVyKGUsIHRvZ2dsZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3codG9nZ2xlPy4kZWwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndG9nZ2xlaGlkZScsXG5cbiAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgIGhhbmRsZXIoZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXModGhpcy4kZWwsICc6Zm9jdXMsOmhvdmVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBgJHtwb2ludGVyRW50ZXJ9IGZvY3VzaW5gLFxuXG4gICAgICAgICAgICBmaWx0ZXIoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluY2x1ZGVzKHRoaXMubW9kZSwgJ2hvdmVyJyk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVG91Y2goZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVycygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogYCR7cG9pbnRlckxlYXZlfSBmb2N1c291dGAsXG5cbiAgICAgICAgICAgIGZpbHRlcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5jbHVkZXModGhpcy5tb2RlLCAnaG92ZXInKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGhhbmRsZXIoZSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNUb3VjaChlKSAmJiBlLnJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndG9nZ2xlZCcsXG5cbiAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgIGhhbmRsZXIoZSwgdG9nZ2xlZCkge1xuICAgICAgICAgICAgICAgIGF0dHIodGhpcy50YXJnZXRFbCwgJ2FyaWEtZXhwYW5kZWQnLCB0b2dnbGVkID8gdHJ1ZSA6IG51bGwpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0b2dnbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyVGltZXJzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnc2hvdycsXG5cbiAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlID0gdGhpcztcblxuICAgICAgICAgICAgICAgIHRoaXMudHJhY2tlci5pbml0KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVycyA9IFtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuRm9yUmVzaXplKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5Gb3JFc2NDbG9zZSh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuRm9yQmFja2dyb3VuZENsb3NlKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9VcGRhdGUgJiYgbGlzdGVuRm9yU2Nyb2xsKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5iZ1Njcm9sbCAmJiBwcmV2ZW50QmFja2dyb3VuZFNjcm9sbCh0aGlzLiRlbCksXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIG9uY2UodGhpcy4kZWwsICdoaWRlJywgKCkgPT4gaGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlciAmJiBoYW5kbGVyKCkpLCB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGY6IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdiZWZvcmVoaWRlJyxcblxuICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgaGFuZGxlcigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyVGltZXJzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdoaWRlJyxcblxuICAgICAgICAgICAgaGFuZGxlcih7IHRhcmdldCB9KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJGVsICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9PT0gbnVsbCAmJiB3aXRoaW4odGFyZ2V0LCB0aGlzLiRlbCkgJiYgdGhpcy5pc1RvZ2dsZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYWN0aXZlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYWN0aXZlID0gdGhpcy5pc0FjdGl2ZSgpID8gbnVsbCA6IGFjdGl2ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNrZXIuY2FuY2VsKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF0sXG5cbiAgICB1cGRhdGU6IHtcbiAgICAgICAgd3JpdGUoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1RvZ2dsZWQoKSAmJiAhaGFzQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzRW50ZXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAgIHNob3codGFyZ2V0ID0gdGhpcy50YXJnZXRFbCwgZGVsYXkgPSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1RvZ2dsZWQoKSAmJiB0YXJnZXQgJiYgdGhpcy50YXJnZXRFbCAmJiB0YXJnZXQgIT09IHRoaXMudGFyZ2V0RWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50YXJnZXRFbCA9IHRhcmdldDtcblxuICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVycygpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlbGF5ICYmIGFjdGl2ZS5pc0RlbGF5aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiBtYXRjaGVzKHRhcmdldCwgJzpob3ZlcicpICYmIHRoaXMuc2hvdygpLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgcHJldjtcbiAgICAgICAgICAgICAgICB3aGlsZSAoYWN0aXZlICYmIHByZXYgIT09IGFjdGl2ZSAmJiAhd2l0aGluKHRoaXMuJGVsLCBhY3RpdmUuJGVsKSkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2ID0gYWN0aXZlO1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmUuaGlkZShmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyICYmIHBhcmVudCh0aGlzLiRlbCkgIT09IHRoaXMuY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgYXBwZW5kKHRoaXMuY29udGFpbmVyLCB0aGlzLiRlbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2hvd1RpbWVyID0gc2V0VGltZW91dChcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLnRvZ2dsZUVsZW1lbnQodGhpcy4kZWwsIHRydWUpLFxuICAgICAgICAgICAgICAgIChkZWxheSAmJiB0aGlzLmRlbGF5U2hvdykgfHwgMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcblxuICAgICAgICBoaWRlKGRlbGF5ID0gdHJ1ZSwgYW5pbWF0ZSA9IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGhpZGUgPSAoKSA9PiB0aGlzLnRvZ2dsZUVsZW1lbnQodGhpcy4kZWwsIGZhbHNlLCB0aGlzLmFuaW1hdGVPdXQgJiYgYW5pbWF0ZSk7XG5cbiAgICAgICAgICAgIHRoaXMuY2xlYXJUaW1lcnMoKTtcblxuICAgICAgICAgICAgdGhpcy5pc0RlbGF5aW5nID0gZ2V0UG9zaXRpb25lZEVsZW1lbnRzKHRoaXMuJGVsKS5zb21lKChlbCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNrZXIubW92ZXNUbyhlbClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChkZWxheSAmJiB0aGlzLmlzRGVsYXlpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVUaW1lciA9IHNldFRpbWVvdXQodGhpcy5oaWRlLCA1MCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlbGF5ICYmIHRoaXMuZGVsYXlIaWRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlVGltZXIgPSBzZXRUaW1lb3V0KGhpZGUsIHRoaXMuZGVsYXlIaWRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaGlkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGNsZWFyVGltZXJzKCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2hvd1RpbWVyKTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmhpZGVUaW1lcik7XG4gICAgICAgICAgICB0aGlzLnNob3dUaW1lciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhpZGVUaW1lciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmlzRGVsYXlpbmcgPSBmYWxzZTtcbiAgICAgICAgfSxcblxuICAgICAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3RpdmUgPT09IHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcG9zaXRpb24oKSB7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLiRlbCwgJ3VrLWRyb3Atc3RhY2snKTtcbiAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgdGhpcy5fc3R5bGUpO1xuXG4gICAgICAgICAgICAvLyBFbnN1cmUgbm9uZSBwb3NpdGlvbmVkIGVsZW1lbnQgZG9lcyBub3QgZ2VuZXJhdGUgc2Nyb2xsYmFyc1xuICAgICAgICAgICAgdGhpcy4kZWwuaGlkZGVuID0gdHJ1ZTtcblxuICAgICAgICAgICAgY29uc3Qgdmlld3BvcnRzID0gdGhpcy50YXJnZXQubWFwKCh0YXJnZXQpID0+IGdldFZpZXdwb3J0KHRoaXMuJGVsLCB0YXJnZXQpKTtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0T2Zmc2V0ID0gdGhpcy5nZXRWaWV3cG9ydE9mZnNldCh0aGlzLiRlbCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRpcnMgPSBbXG4gICAgICAgICAgICAgICAgWzAsIFsneCcsICd3aWR0aCcsICdsZWZ0JywgJ3JpZ2h0J11dLFxuICAgICAgICAgICAgICAgIFsxLCBbJ3knLCAnaGVpZ2h0JywgJ3RvcCcsICdib3R0b20nXV0sXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtpLCBbYXhpcywgcHJvcF1dIG9mIGRpcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5heGlzICE9PSBheGlzICYmIGluY2x1ZGVzKFtheGlzLCB0cnVlXSwgdGhpcy5zdHJldGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wXTogTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0KHRoaXMuYm91bmRhcnlbaV0pW3Byb3BdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0c1tpXVtwcm9wXSAtIDIgKiB2aWV3cG9ydE9mZnNldFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtgb3ZlcmZsb3ctJHtheGlzfWBdOiAnYXV0bycsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWF4V2lkdGggPSB2aWV3cG9ydHNbMF0ud2lkdGggLSAyICogdmlld3BvcnRPZmZzZXQ7XG5cbiAgICAgICAgICAgIHRoaXMuJGVsLmhpZGRlbiA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjc3ModGhpcy4kZWwsICdtYXhXaWR0aCcsICcnKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuJGVsLm9mZnNldFdpZHRoID4gbWF4V2lkdGgpIHtcbiAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgJ3VrLWRyb3Atc3RhY2snKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCAnbWF4V2lkdGgnLCBtYXhXaWR0aCk7XG5cbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25BdCh0aGlzLiRlbCwgdGhpcy50YXJnZXQsIHRoaXMuYm91bmRhcnkpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtpLCBbYXhpcywgcHJvcCwgc3RhcnQsIGVuZF1dIG9mIGRpcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5heGlzID09PSBheGlzICYmIGluY2x1ZGVzKFtheGlzLCB0cnVlXSwgdGhpcy5zdHJldGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbk9mZnNldCA9IE1hdGguYWJzKHRoaXMuZ2V0UG9zaXRpb25PZmZzZXQodGhpcy4kZWwpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0T2Zmc2V0ID0gb2Zmc2V0KHRoaXMudGFyZ2V0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxPZmZzZXQgPSBvZmZzZXQodGhpcy4kZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BdOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YXJnZXRPZmZzZXRbc3RhcnRdID4gZWxPZmZzZXRbc3RhcnRdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGFyZ2V0T2Zmc2V0W3N0YXJ0XSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCh0aGlzLmJvdW5kYXJ5W2ldKVtzdGFydF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0c1tpXVtzdGFydF0gKyB2aWV3cG9ydE9mZnNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0KHRoaXMuYm91bmRhcnlbaV0pW2VuZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0c1tpXVtlbmRdIC0gdmlld3BvcnRPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIC0gdGFyZ2V0T2Zmc2V0W2VuZF0pIC0gcG9zaXRpb25PZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBbYG92ZXJmbG93LSR7YXhpc31gXTogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uQXQodGhpcy4kZWwsIHRoaXMudGFyZ2V0LCB0aGlzLmJvdW5kYXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5cbmZ1bmN0aW9uIGdldFBvc2l0aW9uZWRFbGVtZW50cyhlbCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGFwcGx5KGVsLCAoZWwpID0+IGNzcyhlbCwgJ3Bvc2l0aW9uJykgIT09ICdzdGF0aWMnICYmIHJlc3VsdC5wdXNoKGVsKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2V0Vmlld3BvcnQoZWwsIHRhcmdldCkge1xuICAgIHJldHVybiBvZmZzZXRWaWV3cG9ydChvdmVyZmxvd1BhcmVudHModGFyZ2V0KS5maW5kKChwYXJlbnQpID0+IHdpdGhpbihlbCwgcGFyZW50KSkpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUb2dnbGVDb21wb25lbnQoZHJvcCkge1xuICAgIGNvbnN0IHsgJGVsIH0gPSBkcm9wLiRjcmVhdGUoJ3RvZ2dsZScsIHF1ZXJ5KGRyb3AudG9nZ2xlLCBkcm9wLiRlbCksIHtcbiAgICAgICAgdGFyZ2V0OiBkcm9wLiRlbCxcbiAgICAgICAgbW9kZTogZHJvcC5tb2RlLFxuICAgIH0pO1xuICAgIGF0dHIoJGVsLCAnYXJpYS1oYXNwb3B1cCcsIHRydWUpO1xuXG4gICAgcmV0dXJuICRlbDtcbn1cblxuZnVuY3Rpb24gbGlzdGVuRm9yUmVzaXplKGRyb3ApIHtcbiAgICBjb25zdCB1cGRhdGUgPSAoKSA9PiBkcm9wLiRlbWl0KCk7XG4gICAgY29uc3Qgb2ZmID0gb24od2luZG93LCAncmVzaXplJywgdXBkYXRlKTtcbiAgICBjb25zdCBvYnNlcnZlciA9IG9ic2VydmVSZXNpemUob3ZlcmZsb3dQYXJlbnRzKGRyb3AuJGVsKS5jb25jYXQoZHJvcC50YXJnZXQpLCB1cGRhdGUpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgb2ZmKCk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbGlzdGVuRm9yU2Nyb2xsKGRyb3ApIHtcbiAgICByZXR1cm4gb24oW2RvY3VtZW50LCAuLi5vdmVyZmxvd1BhcmVudHMoZHJvcC4kZWwpXSwgJ3Njcm9sbCcsICgpID0+IGRyb3AuJGVtaXQoKSwge1xuICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBsaXN0ZW5Gb3JFc2NDbG9zZShkcm9wKSB7XG4gICAgcmV0dXJuIG9uKGRvY3VtZW50LCAna2V5ZG93bicsIChlKSA9PiB7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IGtleU1hcC5FU0MpIHtcbiAgICAgICAgICAgIGRyb3AuaGlkZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbGlzdGVuRm9yQmFja2dyb3VuZENsb3NlKGRyb3ApIHtcbiAgICByZXR1cm4gb24oZG9jdW1lbnQsIHBvaW50ZXJEb3duLCAoeyB0YXJnZXQgfSkgPT4ge1xuICAgICAgICBpZiAoIXdpdGhpbih0YXJnZXQsIGRyb3AuJGVsKSkge1xuICAgICAgICAgICAgb25jZShcbiAgICAgICAgICAgICAgICBkb2N1bWVudCxcbiAgICAgICAgICAgICAgICBgJHtwb2ludGVyVXB9ICR7cG9pbnRlckNhbmNlbH0gc2Nyb2xsYCxcbiAgICAgICAgICAgICAgICAoeyBkZWZhdWx0UHJldmVudGVkLCB0eXBlLCB0YXJnZXQ6IG5ld1RhcmdldCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0UHJldmVudGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBwb2ludGVyVXAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9PT0gbmV3VGFyZ2V0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhKGRyb3AudGFyZ2V0RWwgJiYgd2l0aGluKHRhcmdldCwgZHJvcC50YXJnZXRFbCkpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZHJvcC5oaWRlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgYWN0aXZlIH0gZnJvbSAnLi9kcm9wJztcbmltcG9ydCBDbGFzcyBmcm9tICcuLi9taXhpbi9jbGFzcyc7XG5pbXBvcnQgQ29udGFpbmVyIGZyb20gJy4uL21peGluL2NvbnRhaW5lcic7XG5pbXBvcnQge1xuICAgICQsXG4gICAgJCQsXG4gICAgYWRkQ2xhc3MsXG4gICAgYWZ0ZXIsXG4gICAgY3NzLFxuICAgIGZpbmRJbmRleCxcbiAgICBnZXRJbmRleCxcbiAgICBoYXNBdHRyLFxuICAgIGhhc0NsYXNzLFxuICAgIGhlaWdodCxcbiAgICBpbmNsdWRlcyxcbiAgICBpc1J0bCxcbiAgICBtYXRjaGVzLFxuICAgIG5vb3AsXG4gICAgb2JzZXJ2ZVJlc2l6ZSxcbiAgICBvZmZzZXQsXG4gICAgb25jZSxcbiAgICBwYXJlbnRzLFxuICAgIHF1ZXJ5LFxuICAgIHJlbW92ZSxcbiAgICBzZWxGb2N1c2FibGUsXG4gICAgdG9GbG9hdCxcbiAgICBUcmFuc2l0aW9uLFxuICAgIHdpdGhpbixcbn0gZnJvbSAndWlraXQtdXRpbCc7XG5pbXBvcnQgeyBrZXlNYXAgfSBmcm9tICcuLi91dGlsL2tleXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbWl4aW5zOiBbQ2xhc3MsIENvbnRhaW5lcl0sXG5cbiAgICBwcm9wczoge1xuICAgICAgICBhbGlnbjogU3RyaW5nLFxuICAgICAgICBjbHNEcm9wOiBTdHJpbmcsXG4gICAgICAgIGJvdW5kYXJ5OiBCb29sZWFuLFxuICAgICAgICBkcm9wYmFyOiBCb29sZWFuLFxuICAgICAgICBkcm9wYmFyQW5jaG9yOiBCb29sZWFuLFxuICAgICAgICBkdXJhdGlvbjogTnVtYmVyLFxuICAgICAgICBtb2RlOiBCb29sZWFuLFxuICAgICAgICBvZmZzZXQ6IEJvb2xlYW4sXG4gICAgICAgIHN0cmV0Y2g6IEJvb2xlYW4sXG4gICAgICAgIGRlbGF5U2hvdzogQm9vbGVhbixcbiAgICAgICAgZGVsYXlIaWRlOiBCb29sZWFuLFxuICAgICAgICB0YXJnZXQ6IEJvb2xlYW4sXG4gICAgICAgIHRhcmdldFg6IEJvb2xlYW4sXG4gICAgICAgIHRhcmdldFk6IEJvb2xlYW4sXG4gICAgICAgIGFuaW1hdGlvbjogQm9vbGVhbixcbiAgICAgICAgYW5pbWF0ZU91dDogQm9vbGVhbixcbiAgICB9LFxuXG4gICAgZGF0YToge1xuICAgICAgICBhbGlnbjogaXNSdGwgPyAncmlnaHQnIDogJ2xlZnQnLFxuICAgICAgICBjbHNEcm9wOiAndWstZHJvcGRvd24nLFxuICAgICAgICBjbHNEcm9wYmFyOiAndWstZHJvcG5hdi1kcm9wYmFyJyxcbiAgICAgICAgYm91bmRhcnk6IHRydWUsXG4gICAgICAgIGRyb3BiYXI6IGZhbHNlLFxuICAgICAgICBkcm9wYmFyQW5jaG9yOiBmYWxzZSxcbiAgICAgICAgZHVyYXRpb246IDIwMCxcbiAgICAgICAgY29udGFpbmVyOiBmYWxzZSxcbiAgICAgICAgc2VsTmF2SXRlbTogJz4gbGkgPiBhLCA+IHVsID4gbGkgPiBhJyxcbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgZHJvcGJhckFuY2hvcih7IGRyb3BiYXJBbmNob3IgfSwgJGVsKSB7XG4gICAgICAgICAgICByZXR1cm4gcXVlcnkoZHJvcGJhckFuY2hvciwgJGVsKSB8fCAkZWw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZHJvcGJhcih7IGRyb3BiYXIgfSkge1xuICAgICAgICAgICAgaWYgKCFkcm9wYmFyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRyb3BiYXIgPVxuICAgICAgICAgICAgICAgIHRoaXMuX2Ryb3BiYXIgfHwgcXVlcnkoZHJvcGJhciwgdGhpcy4kZWwpIHx8ICQoYCsgLiR7dGhpcy5jbHNEcm9wYmFyfWAsIHRoaXMuJGVsKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRyb3BiYXIgPyBkcm9wYmFyIDogKHRoaXMuX2Ryb3BiYXIgPSAkKCc8ZGl2PjwvZGl2PicpKTtcbiAgICAgICAgfSxcblxuICAgICAgICBkcm9wQ29udGFpbmVyKF8sICRlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyIHx8ICRlbDtcbiAgICAgICAgfSxcblxuICAgICAgICBkcm9wZG93bnMoeyBjbHNEcm9wIH0sICRlbCkge1xuICAgICAgICAgICAgY29uc3QgZHJvcGRvd25zID0gJCQoYC4ke2Nsc0Ryb3B9YCwgJGVsKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZHJvcENvbnRhaW5lciAhPT0gJGVsKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiAkJChgLiR7Y2xzRHJvcH1gLCB0aGlzLmRyb3BDb250YWluZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZ2V0RHJvcGRvd24oZWwpPy50YXJnZXRFbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmNsdWRlcyhkcm9wZG93bnMsIGVsKSAmJiB0YXJnZXQgJiYgd2l0aGluKHRhcmdldCwgdGhpcy4kZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkcm9wZG93bnMucHVzaChlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBkcm9wZG93bnM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaXRlbXMoeyBzZWxOYXZJdGVtIH0sICRlbCkge1xuICAgICAgICAgICAgcmV0dXJuICQkKHNlbE5hdkl0ZW0sICRlbCk7XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHdhdGNoOiB7XG4gICAgICAgIGRyb3BiYXIoZHJvcGJhcikge1xuICAgICAgICAgICAgYWRkQ2xhc3MoXG4gICAgICAgICAgICAgICAgZHJvcGJhcixcbiAgICAgICAgICAgICAgICAndWstZHJvcGJhcicsXG4gICAgICAgICAgICAgICAgJ3VrLWRyb3BiYXItdG9wJyxcbiAgICAgICAgICAgICAgICB0aGlzLmNsc0Ryb3BiYXIsXG4gICAgICAgICAgICAgICAgYHVrLSR7dGhpcy4kb3B0aW9ucy5uYW1lfS1kcm9wYmFyYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcblxuICAgICAgICBkcm9wZG93bnMoZHJvcGRvd25zKSB7XG4gICAgICAgICAgICB0aGlzLiRjcmVhdGUoXG4gICAgICAgICAgICAgICAgJ2Ryb3AnLFxuICAgICAgICAgICAgICAgIGRyb3Bkb3ducy5maWx0ZXIoKGVsKSA9PiAhdGhpcy5nZXREcm9wZG93bihlbCkpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy4kcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIGZsaXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzaGlmdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcG9zOiBgYm90dG9tLSR7dGhpcy5hbGlnbn1gLFxuICAgICAgICAgICAgICAgICAgICBib3VuZGFyeTogdGhpcy5ib3VuZGFyeSA9PT0gdHJ1ZSA/IHRoaXMuJGVsIDogdGhpcy5ib3VuZGFyeSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBkaXNjb25uZWN0ZWQoKSB7XG4gICAgICAgIHJlbW92ZSh0aGlzLl9kcm9wYmFyKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2Ryb3BiYXI7XG4gICAgfSxcblxuICAgIGV2ZW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnbW91c2VvdmVyIGZvY3VzaW4nLFxuXG4gICAgICAgICAgICBkZWxlZ2F0ZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxOYXZJdGVtO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaGFuZGxlcih7IGN1cnJlbnQgfSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMoYWN0aXZlLm1vZGUsICdob3ZlcicpICYmXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZS50YXJnZXRFbCAmJlxuICAgICAgICAgICAgICAgICAgICAhd2l0aGluKGFjdGl2ZS50YXJnZXRFbCwgY3VycmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWFjdGl2ZS5pc0RlbGF5aW5nXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZS5oaWRlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdrZXlkb3duJyxcblxuICAgICAgICAgICAgZGVsZWdhdGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsTmF2SXRlbTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGhhbmRsZXIoZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY3VycmVudCwga2V5Q29kZSB9ID0gZTtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmdldEFjdGl2ZSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGtleUNvZGUgPT09IGtleU1hcC5ET1dOICYmIGhhc0F0dHIoY3VycmVudCwgJ2FyaWEtZXhwYW5kZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhY3RpdmUgfHwgYWN0aXZlLnRhcmdldEVsICE9PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbmNlKHRoaXMuZHJvcENvbnRhaW5lciwgJ3Nob3cnLCAoeyB0YXJnZXQgfSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c0ZpcnN0Rm9jdXNhYmxlRWxlbWVudCh0YXJnZXQpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNGaXJzdEZvY3VzYWJsZUVsZW1lbnQoYWN0aXZlLiRlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBoYW5kbGVOYXZJdGVtTmF2aWdhdGlvbihlLCB0aGlzLml0ZW1zLCBhY3RpdmUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAna2V5ZG93bicsXG5cbiAgICAgICAgICAgIGVsKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyb3BDb250YWluZXI7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBkZWxlZ2F0ZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYC4ke3RoaXMuY2xzRHJvcH1gO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaGFuZGxlcihlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjdXJyZW50LCBrZXlDb2RlIH0gPSBlO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFpbmNsdWRlcyh0aGlzLmRyb3Bkb3ducywgY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgbGV0IG5leHQgPSAtMTtcblxuICAgICAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSBrZXlNYXAuSE9NRSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0ID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT09IGtleU1hcC5FTkQpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9ICdsYXN0JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT09IGtleU1hcC5VUCkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0ID0gJ3ByZXZpb3VzJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT09IGtleU1hcC5ET1dOKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSAnbmV4dCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09PSBrZXlNYXAuRVNDKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZS50YXJnZXRFbD8uZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAofm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9ICQkKHNlbEZvY3VzYWJsZSwgY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kSW5kZXgoZWxlbWVudHMsIChlbCkgPT4gbWF0Y2hlcyhlbCwgJzpmb2N1cycpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaGFuZGxlTmF2SXRlbU5hdmlnYXRpb24oZSwgdGhpcy5pdGVtcywgYWN0aXZlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ21vdXNlbGVhdmUnLFxuXG4gICAgICAgICAgICBlbCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcm9wYmFyO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZmlsdGVyKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyb3BiYXI7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZSAmJlxuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyhhY3RpdmUubW9kZSwgJ2hvdmVyJykgJiZcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuZHJvcGRvd25zLnNvbWUoKGVsKSA9PiBtYXRjaGVzKGVsLCAnOmhvdmVyJykpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnYmVmb3Jlc2hvdycsXG5cbiAgICAgICAgICAgIGVsKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyb3BDb250YWluZXI7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBmaWx0ZXIoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJvcGJhcjtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGhhbmRsZXIoeyB0YXJnZXQgfSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0Ryb3BiYXJEcm9wKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyb3BiYXIucHJldmlvdXNFbGVtZW50U2libGluZyAhPT0gdGhpcy5kcm9wYmFyQW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGFmdGVyKHRoaXMuZHJvcGJhckFuY2hvciwgdGhpcy5kcm9wYmFyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhZGRDbGFzcyh0YXJnZXQsIGAke3RoaXMuY2xzRHJvcH0tZHJvcGJhcmApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnc2hvdycsXG5cbiAgICAgICAgICAgIGVsKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyb3BDb250YWluZXI7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBmaWx0ZXIoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJvcGJhcjtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGhhbmRsZXIoeyB0YXJnZXQgfSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0Ryb3BiYXJEcm9wKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRyb3AgPSB0aGlzLmdldERyb3Bkb3duKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqdXN0SGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRPZmZzZXRzID0gcGFyZW50cyh0YXJnZXQsIGAuJHt0aGlzLmNsc0Ryb3B9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQodGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoZWwpID0+IG9mZnNldChlbCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5Ub3AgPSBNYXRoLm1pbiguLi50YXJnZXRPZmZzZXRzLm1hcCgoeyB0b3AgfSkgPT4gdG9wKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heEJvdHRvbSA9IE1hdGgubWF4KC4uLnRhcmdldE9mZnNldHMubWFwKCh7IGJvdHRvbSB9KSA9PiBib3R0b20pKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZHJvcGJhck9mZnNldCA9IG9mZnNldCh0aGlzLmRyb3BiYXIpO1xuICAgICAgICAgICAgICAgICAgICBjc3ModGhpcy5kcm9wYmFyLCAndG9wJywgdGhpcy5kcm9wYmFyLm9mZnNldFRvcCAtIChkcm9wYmFyT2Zmc2V0LnRvcCAtIG1pblRvcCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25UbyhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdHRvbSAtIG1pblRvcCArIHRvRmxvYXQoY3NzKHRhcmdldCwgJ21hcmdpbkJvdHRvbScpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fb2JzZXJ2ZXIgPSBvYnNlcnZlUmVzaXplKFtkcm9wLiRlbCwgLi4uZHJvcC50YXJnZXRdLCBhZGp1c3RIZWlnaHQpO1xuICAgICAgICAgICAgICAgIGFkanVzdEhlaWdodCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnYmVmb3JlaGlkZScsXG5cbiAgICAgICAgICAgIGVsKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyb3BDb250YWluZXI7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBmaWx0ZXIoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJvcGJhcjtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGhhbmRsZXIoZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXModGhpcy5kcm9wYmFyLCAnOmhvdmVyJykgJiZcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlLiRlbCA9PT0gZS50YXJnZXQgJiZcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuaXRlbXMuc29tZSgoZWwpID0+IGFjdGl2ZS50YXJnZXRFbCAhPT0gZWwgJiYgbWF0Y2hlcyhlbCwgJzpmb2N1cycpKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnaGlkZScsXG5cbiAgICAgICAgICAgIGVsKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyb3BDb250YWluZXI7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBmaWx0ZXIoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJvcGJhcjtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGhhbmRsZXIoeyB0YXJnZXQgfSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0Ryb3BiYXJEcm9wKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX29ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmdldEFjdGl2ZSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFhY3RpdmUgfHwgYWN0aXZlLiRlbCA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgXSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgZ2V0QWN0aXZlKCkge1xuICAgICAgICAgICAgcmV0dXJuIGluY2x1ZGVzKHRoaXMuZHJvcGRvd25zLCBhY3RpdmU/LiRlbCkgJiYgYWN0aXZlO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIHRyYW5zaXRpb25UbyhuZXdIZWlnaHQsIGVsKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRyb3BiYXIgfSA9IHRoaXM7XG4gICAgICAgICAgICBjb25zdCBvbGRIZWlnaHQgPSBoZWlnaHQoZHJvcGJhcik7XG5cbiAgICAgICAgICAgIGVsID0gb2xkSGVpZ2h0IDwgbmV3SGVpZ2h0ICYmIGVsO1xuXG4gICAgICAgICAgICBhd2FpdCBUcmFuc2l0aW9uLmNhbmNlbChbZWwsIGRyb3BiYXJdKTtcblxuICAgICAgICAgICAgY3NzKGVsLCAnY2xpcFBhdGgnLCBgcG9seWdvbigwIDAsMTAwJSAwLDEwMCUgJHtvbGRIZWlnaHR9cHgsMCAke29sZEhlaWdodH1weClgKTtcbiAgICAgICAgICAgIGhlaWdodChkcm9wYmFyLCBvbGRIZWlnaHQpO1xuXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgVHJhbnNpdGlvbi5zdGFydChkcm9wYmFyLCB7IGhlaWdodDogbmV3SGVpZ2h0IH0sIHRoaXMuZHVyYXRpb24pLFxuICAgICAgICAgICAgICAgIFRyYW5zaXRpb24uc3RhcnQoXG4gICAgICAgICAgICAgICAgICAgIGVsLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGlwUGF0aDogYHBvbHlnb24oMCAwLDEwMCUgMCwxMDAlICR7bmV3SGVpZ2h0fXB4LDAgJHtuZXdIZWlnaHR9cHgpYCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kdXJhdGlvblxuICAgICAgICAgICAgICAgICkuZmluYWxseSgoKSA9PiBjc3MoZWwsIHsgY2xpcFBhdGg6ICcnIH0pKSxcbiAgICAgICAgICAgIF0pLmNhdGNoKG5vb3ApO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldERyb3Bkb3duKGVsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kZ2V0Q29tcG9uZW50KGVsLCAnZHJvcCcpIHx8IHRoaXMuJGdldENvbXBvbmVudChlbCwgJ2Ryb3Bkb3duJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaXNEcm9wYmFyRHJvcChlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJvcGRvd24oZWwpICYmIGhhc0NsYXNzKGVsLCB0aGlzLmNsc0Ryb3ApO1xuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVOYXZJdGVtTmF2aWdhdGlvbihlLCB0b2dnbGVzLCBhY3RpdmUpIHtcbiAgICBjb25zdCB7IGN1cnJlbnQsIGtleUNvZGUgfSA9IGU7XG4gICAgbGV0IG5leHQgPSAtMTtcblxuICAgIGlmIChrZXlDb2RlID09PSBrZXlNYXAuSE9NRSkge1xuICAgICAgICBuZXh0ID0gMDtcbiAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT09IGtleU1hcC5FTkQpIHtcbiAgICAgICAgbmV4dCA9ICdsYXN0JztcbiAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT09IGtleU1hcC5MRUZUKSB7XG4gICAgICAgIG5leHQgPSAncHJldmlvdXMnO1xuICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PT0ga2V5TWFwLlJJR0hUKSB7XG4gICAgICAgIG5leHQgPSAnbmV4dCc7XG4gICAgfSBlbHNlIGlmIChrZXlDb2RlID09PSBrZXlNYXAuVEFCKSB7XG4gICAgICAgIGFjdGl2ZS50YXJnZXRFbD8uZm9jdXMoKTtcbiAgICAgICAgYWN0aXZlLmhpZGU/LihmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKH5uZXh0KSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYWN0aXZlLmhpZGU/LihmYWxzZSk7XG4gICAgICAgIHRvZ2dsZXNbZ2V0SW5kZXgobmV4dCwgdG9nZ2xlcywgdG9nZ2xlcy5pbmRleE9mKGFjdGl2ZS50YXJnZXRFbCB8fCBjdXJyZW50KSldLmZvY3VzKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBmb2N1c0ZpcnN0Rm9jdXNhYmxlRWxlbWVudChlbCkge1xuICAgIGlmICghJCgnOmZvY3VzJywgZWwpKSB7XG4gICAgICAgICQoc2VsRm9jdXNhYmxlLCBlbCk/LmZvY3VzKCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IENsYXNzIGZyb20gJy4uL21peGluL2NsYXNzJztcbmltcG9ydCB7ICQsICQkLCBjbG9zZXN0LCBpc0lucHV0LCBtYXRjaGVzLCBwYXJlbnQsIHNlbElucHV0IH0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBtaXhpbnM6IFtDbGFzc10sXG5cbiAgICBhcmdzOiAndGFyZ2V0JyxcblxuICAgIHByb3BzOiB7XG4gICAgICAgIHRhcmdldDogQm9vbGVhbixcbiAgICB9LFxuXG4gICAgZGF0YToge1xuICAgICAgICB0YXJnZXQ6IGZhbHNlLFxuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgICBpbnB1dChfLCAkZWwpIHtcbiAgICAgICAgICAgIHJldHVybiAkKHNlbElucHV0LCAkZWwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHN0YXRlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRhcmdldCh7IHRhcmdldCB9LCAkZWwpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGFyZ2V0ICYmXG4gICAgICAgICAgICAgICAgKCh0YXJnZXQgPT09IHRydWUgJiYgcGFyZW50KHRoaXMuaW5wdXQpID09PSAkZWwgJiYgdGhpcy5pbnB1dC5uZXh0RWxlbWVudFNpYmxpbmcpIHx8XG4gICAgICAgICAgICAgICAgICAgICQodGFyZ2V0LCAkZWwpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgdXBkYXRlKCkge1xuICAgICAgICBjb25zdCB7IHRhcmdldCwgaW5wdXQgfSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcHRpb247XG4gICAgICAgIGNvbnN0IHByb3AgPSBpc0lucHV0KHRhcmdldCkgPyAndmFsdWUnIDogJ3RleHRDb250ZW50JztcbiAgICAgICAgY29uc3QgcHJldiA9IHRhcmdldFtwcm9wXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dC5maWxlcz8uWzBdXG4gICAgICAgICAgICA/IGlucHV0LmZpbGVzWzBdLm5hbWVcbiAgICAgICAgICAgIDogbWF0Y2hlcyhpbnB1dCwgJ3NlbGVjdCcpICYmXG4gICAgICAgICAgICAgIChvcHRpb24gPSAkJCgnb3B0aW9uJywgaW5wdXQpLmZpbHRlcigoZWwpID0+IGVsLnNlbGVjdGVkKVswXSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICAgICAgPyBvcHRpb24udGV4dENvbnRlbnRcbiAgICAgICAgICAgIDogaW5wdXQudmFsdWU7XG5cbiAgICAgICAgaWYgKHByZXYgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBldmVudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2NoYW5nZScsXG5cbiAgICAgICAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAncmVzZXQnLFxuXG4gICAgICAgICAgICBlbCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VzdCh0aGlzLiRlbCwgJ2Zvcm0nKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdLFxufTtcbiIsImltcG9ydCB7IGNoaWxkcmVuLCBpc1J0bCwgaXNWaXNpYmxlLCBvZmZzZXRQb3NpdGlvbiwgdG9nZ2xlQ2xhc3MgfSBmcm9tICd1aWtpdC11dGlsJztcbmltcG9ydCB7IG11dGF0aW9uLCByZXNpemUgfSBmcm9tICcuLi9hcGkvb2JzZXJ2YWJsZXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgICAgbWFyZ2luOiBTdHJpbmcsXG4gICAgICAgIGZpcnN0Q29sdW1uOiBCb29sZWFuLFxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIG1hcmdpbjogJ3VrLW1hcmdpbi1zbWFsbC10b3AnLFxuICAgICAgICBmaXJzdENvbHVtbjogJ3VrLWZpcnN0LWNvbHVtbicsXG4gICAgfSxcblxuICAgIG9ic2VydmU6IFtcbiAgICAgICAgbXV0YXRpb24oe1xuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydzdHlsZSddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHJlc2l6ZSh7XG4gICAgICAgICAgICB0YXJnZXQ6ICh7ICRlbCB9KSA9PiBbJGVsLCAuLi5jaGlsZHJlbigkZWwpXSxcbiAgICAgICAgfSksXG4gICAgXSxcblxuICAgIHVwZGF0ZToge1xuICAgICAgICByZWFkKCkge1xuICAgICAgICAgICAgY29uc3Qgcm93cyA9IGdldFJvd3ModGhpcy4kZWwuY2hpbGRyZW4pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJvd3MsXG4gICAgICAgICAgICAgICAgY29sdW1uczogZ2V0Q29sdW1ucyhyb3dzKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgd3JpdGUoeyBjb2x1bW5zLCByb3dzIH0pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiByb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoY29sdW1uLCB0aGlzLm1hcmdpbiwgcm93c1swXSAhPT0gcm93KTtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoY29sdW1uLCB0aGlzLmZpcnN0Q29sdW1uLCBjb2x1bW5zWzBdLmluY2x1ZGVzKGNvbHVtbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IFsncmVzaXplJ10sXG4gICAgfSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3dzKGl0ZW1zKSB7XG4gICAgcmV0dXJuIHNvcnRCeShpdGVtcywgJ3RvcCcsICdib3R0b20nKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29sdW1ucyhyb3dzKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgICBjb25zdCBzb3J0ZWQgPSBzb3J0Qnkocm93LCAnbGVmdCcsICdyaWdodCcpO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNvcnRlZC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29sdW1uc1tqXSA9IGNvbHVtbnNbal0gPyBjb2x1bW5zW2pdLmNvbmNhdChzb3J0ZWRbal0pIDogc29ydGVkW2pdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzUnRsID8gY29sdW1ucy5yZXZlcnNlKCkgOiBjb2x1bW5zO1xufVxuXG5mdW5jdGlvbiBzb3J0QnkoaXRlbXMsIHN0YXJ0UHJvcCwgZW5kUHJvcCkge1xuICAgIGNvbnN0IHNvcnRlZCA9IFtbXV07XG5cbiAgICBmb3IgKGNvbnN0IGVsIG9mIGl0ZW1zKSB7XG4gICAgICAgIGlmICghaXNWaXNpYmxlKGVsKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGltID0gZ2V0T2Zmc2V0KGVsKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gc29ydGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gc29ydGVkW2ldO1xuXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRbMF0pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50LnB1c2goZWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgc3RhcnREaW07XG4gICAgICAgICAgICBpZiAoY3VycmVudFswXS5vZmZzZXRQYXJlbnQgPT09IGVsLm9mZnNldFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0RGltID0gZ2V0T2Zmc2V0KGN1cnJlbnRbMF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaW0gPSBnZXRPZmZzZXQoZWwsIHRydWUpO1xuICAgICAgICAgICAgICAgIHN0YXJ0RGltID0gZ2V0T2Zmc2V0KGN1cnJlbnRbMF0sIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGltW3N0YXJ0UHJvcF0gPj0gc3RhcnREaW1bZW5kUHJvcF0gLSAxICYmIGRpbVtzdGFydFByb3BdICE9PSBzdGFydERpbVtzdGFydFByb3BdKSB7XG4gICAgICAgICAgICAgICAgc29ydGVkLnB1c2goW2VsXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkaW1bZW5kUHJvcF0gLSAxID4gc3RhcnREaW1bc3RhcnRQcm9wXSB8fCBkaW1bc3RhcnRQcm9wXSA9PT0gc3RhcnREaW1bc3RhcnRQcm9wXSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQucHVzaChlbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc29ydGVkLnVuc2hpZnQoW2VsXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc29ydGVkO1xufVxuXG5mdW5jdGlvbiBnZXRPZmZzZXQoZWxlbWVudCwgb2Zmc2V0ID0gZmFsc2UpIHtcbiAgICBsZXQgeyBvZmZzZXRUb3AsIG9mZnNldExlZnQsIG9mZnNldEhlaWdodCwgb2Zmc2V0V2lkdGggfSA9IGVsZW1lbnQ7XG5cbiAgICBpZiAob2Zmc2V0KSB7XG4gICAgICAgIFtvZmZzZXRUb3AsIG9mZnNldExlZnRdID0gb2Zmc2V0UG9zaXRpb24oZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiBvZmZzZXRUb3AsXG4gICAgICAgIGxlZnQ6IG9mZnNldExlZnQsXG4gICAgICAgIGJvdHRvbTogb2Zmc2V0VG9wICsgb2Zmc2V0SGVpZ2h0LFxuICAgICAgICByaWdodDogb2Zmc2V0TGVmdCArIG9mZnNldFdpZHRoLFxuICAgIH07XG59XG4iLCJpbXBvcnQgeyBzY3JvbGwgfSBmcm9tICcuLi9hcGkvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IE1hcmdpbiBmcm9tICcuL21hcmdpbic7XG5pbXBvcnQgQ2xhc3MgZnJvbSAnLi4vbWl4aW4vY2xhc3MnO1xuaW1wb3J0IHtcbiAgICBhZGRDbGFzcyxcbiAgICBjaGlsZHJlbixcbiAgICBjc3MsXG4gICAgaGFzQ2xhc3MsXG4gICAgc2Nyb2xsZWRPdmVyLFxuICAgIHNvcnRCeSxcbiAgICBzdW1CeSxcbiAgICB0b0Zsb2F0LFxuICAgIHRvZ2dsZUNsYXNzLFxufSBmcm9tICd1aWtpdC11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGV4dGVuZHM6IE1hcmdpbixcblxuICAgIG1peGluczogW0NsYXNzXSxcblxuICAgIG5hbWU6ICdncmlkJyxcblxuICAgIHByb3BzOiB7XG4gICAgICAgIG1hc29ucnk6IEJvb2xlYW4sXG4gICAgICAgIHBhcmFsbGF4OiBOdW1iZXIsXG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgbWFyZ2luOiAndWstZ3JpZC1tYXJnaW4nLFxuICAgICAgICBjbHNTdGFjazogJ3VrLWdyaWQtc3RhY2snLFxuICAgICAgICBtYXNvbnJ5OiBmYWxzZSxcbiAgICAgICAgcGFyYWxsYXg6IDAsXG4gICAgfSxcblxuICAgIGNvbm5lY3RlZCgpIHtcbiAgICAgICAgdGhpcy5tYXNvbnJ5ICYmIGFkZENsYXNzKHRoaXMuJGVsLCAndWstZmxleC10b3AgdWstZmxleC13cmFwLXRvcCcpO1xuICAgIH0sXG5cbiAgICBvYnNlcnZlOiBzY3JvbGwoeyBmaWx0ZXI6ICh7IHBhcmFsbGF4IH0pID0+IHBhcmFsbGF4IH0pLFxuXG4gICAgdXBkYXRlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdyaXRlKHsgY29sdW1ucyB9KSB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzU3RhY2ssIGNvbHVtbnMubGVuZ3RoIDwgMik7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBldmVudHM6IFsncmVzaXplJ10sXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgcmVhZChkYXRhKSB7XG4gICAgICAgICAgICAgICAgbGV0IHsgY29sdW1ucywgcm93cyB9ID0gZGF0YTtcblxuICAgICAgICAgICAgICAgIC8vIEZpbHRlciBjb21wb25lbnQgbWFrZXMgZWxlbWVudHMgcG9zaXRpb25lZCBhYnNvbHV0ZVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWNvbHVtbnMubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgICAgICghdGhpcy5tYXNvbnJ5ICYmICF0aGlzLnBhcmFsbGF4KSB8fFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmVkQWJzb2x1dGUodGhpcy4kZWwpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEudHJhbnNsYXRlcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHRyYW5zbGF0ZXMgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gY2hpbGRyZW4odGhpcy4kZWwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkhlaWdodHMgPSBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBzdW1CeShjb2x1bW4sICdvZmZzZXRIZWlnaHQnKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFyZ2luID0gZ2V0TWFyZ2luVG9wKG5vZGVzLCB0aGlzLm1hcmdpbikgKiAocm93cy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbEhlaWdodCA9IE1hdGgubWF4KC4uLmNvbHVtbkhlaWdodHMpICsgbWFyZ2luO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWFzb25yeSkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gc29ydEJ5KGNvbHVtbiwgJ29mZnNldFRvcCcpKTtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlcyA9IGdldFRyYW5zbGF0ZXMocm93cywgY29sdW1ucyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHBhZGRpbmcgPSBNYXRoLmFicyh0aGlzLnBhcmFsbGF4KTtcbiAgICAgICAgICAgICAgICBpZiAocGFkZGluZykge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nID0gY29sdW1uSGVpZ2h0cy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAobmV3UGFkZGluZywgaGd0LCBpKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYWRkaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZ3QgKyBtYXJnaW4gKyAoaSAlIDIgPyBwYWRkaW5nIDogcGFkZGluZyAvIDgpIC0gZWxIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7IHBhZGRpbmcsIGNvbHVtbnMsIHRyYW5zbGF0ZXMsIGhlaWdodDogdHJhbnNsYXRlcyA/IGVsSGVpZ2h0IDogJycgfTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHdyaXRlKHsgaGVpZ2h0LCBwYWRkaW5nIH0pIHtcbiAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsICdwYWRkaW5nQm90dG9tJywgcGFkZGluZyB8fCAnJyk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0ICE9PSBmYWxzZSAmJiBjc3ModGhpcy4kZWwsICdoZWlnaHQnLCBoZWlnaHQpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZSddLFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlYWQoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyYWxsYXggJiYgcG9zaXRpb25lZEFic29sdXRlKHRoaXMuJGVsKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWQ6IHRoaXMucGFyYWxsYXhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2Nyb2xsZWRPdmVyKHRoaXMuJGVsKSAqIE1hdGguYWJzKHRoaXMucGFyYWxsYXgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB3cml0ZSh7IGNvbHVtbnMsIHNjcm9sbGVkLCB0cmFuc2xhdGVzIH0pIHtcbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsZWQgPT09IGZhbHNlICYmICF0cmFuc2xhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaSkgPT5cbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvckVhY2goKGVsLCBqKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgY3NzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzY3JvbGxlZCAmJiAhdHJhbnNsYXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYHRyYW5zbGF0ZVkoJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRyYW5zbGF0ZXMgJiYgLXRyYW5zbGF0ZXNbaV1bal0pICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjcm9sbGVkID8gKGkgJSAyID8gc2Nyb2xsZWQgOiBzY3JvbGxlZCAvIDgpIDogMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9cHgpYFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGV2ZW50czogWydzY3JvbGwnLCAncmVzaXplJ10sXG4gICAgICAgIH0sXG4gICAgXSxcbn07XG5cbmZ1bmN0aW9uIHBvc2l0aW9uZWRBYnNvbHV0ZShlbCkge1xuICAgIHJldHVybiBjaGlsZHJlbihlbCkuc29tZSgoZWwpID0+IGNzcyhlbCwgJ3Bvc2l0aW9uJykgPT09ICdhYnNvbHV0ZScpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2xhdGVzKHJvd3MsIGNvbHVtbnMpIHtcbiAgICBjb25zdCByb3dIZWlnaHRzID0gcm93cy5tYXAoKHJvdykgPT4gTWF0aC5tYXgoLi4ucm93Lm1hcCgoZWwpID0+IGVsLm9mZnNldEhlaWdodCkpKTtcblxuICAgIHJldHVybiBjb2x1bW5zLm1hcCgoZWxlbWVudHMpID0+IHtcbiAgICAgICAgbGV0IHByZXYgPSAwO1xuICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKFxuICAgICAgICAgICAgKGVsZW1lbnQsIHJvdykgPT5cbiAgICAgICAgICAgICAgICAocHJldiArPSByb3cgPyByb3dIZWlnaHRzW3JvdyAtIDFdIC0gZWxlbWVudHNbcm93IC0gMV0ub2Zmc2V0SGVpZ2h0IDogMClcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TWFyZ2luVG9wKG5vZGVzLCBjbHMpIHtcbiAgICBjb25zdCBbbm9kZV0gPSBub2Rlcy5maWx0ZXIoKGVsKSA9PiBoYXNDbGFzcyhlbCwgY2xzKSk7XG5cbiAgICByZXR1cm4gdG9GbG9hdChub2RlID8gY3NzKG5vZGUsICdtYXJnaW5Ub3AnKSA6IGNzcyhub2Rlc1swXSwgJ3BhZGRpbmdMZWZ0JykpO1xufVxuIiwiaW1wb3J0IHsgZ2V0Um93cyB9IGZyb20gJy4vbWFyZ2luJztcbmltcG9ydCB7IHJlc2l6ZSB9IGZyb20gJy4uL2FwaS9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyAkJCwgYm94TW9kZWxBZGp1c3QsIGNzcywgZGltZW5zaW9ucywgaXNWaXNpYmxlLCBwaWNrIH0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBhcmdzOiAndGFyZ2V0JyxcblxuICAgIHByb3BzOiB7XG4gICAgICAgIHRhcmdldDogU3RyaW5nLFxuICAgICAgICByb3c6IEJvb2xlYW4sXG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgdGFyZ2V0OiAnPiAqJyxcbiAgICAgICAgcm93OiB0cnVlLFxuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgICBlbGVtZW50cyh7IHRhcmdldCB9LCAkZWwpIHtcbiAgICAgICAgICAgIHJldHVybiAkJCh0YXJnZXQsICRlbCk7XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIG9ic2VydmU6IHJlc2l6ZSh7XG4gICAgICAgIHRhcmdldDogKHsgJGVsLCBlbGVtZW50cyB9KSA9PiBbJGVsLCAuLi5lbGVtZW50c10sXG4gICAgfSksXG5cbiAgICB1cGRhdGU6IHtcbiAgICAgICAgcmVhZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcm93czogKHRoaXMucm93ID8gZ2V0Um93cyh0aGlzLmVsZW1lbnRzKSA6IFt0aGlzLmVsZW1lbnRzXSkubWFwKG1hdGNoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgd3JpdGUoeyByb3dzIH0pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBoZWlnaHRzLCBlbGVtZW50cyB9IG9mIHJvd3MpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5mb3JFYWNoKChlbCwgaSkgPT4gY3NzKGVsLCAnbWluSGVpZ2h0JywgaGVpZ2h0c1tpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGV2ZW50czogWydyZXNpemUnXSxcbiAgICB9LFxufTtcblxuZnVuY3Rpb24gbWF0Y2goZWxlbWVudHMpIHtcbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4geyBoZWlnaHRzOiBbJyddLCBlbGVtZW50cyB9O1xuICAgIH1cblxuICAgIGxldCBoZWlnaHRzID0gZWxlbWVudHMubWFwKGdldEhlaWdodCk7XG4gICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoLi4uaGVpZ2h0cyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHRzOiBlbGVtZW50cy5tYXAoKGVsLCBpKSA9PiAoaGVpZ2h0c1tpXS50b0ZpeGVkKDIpID09PSBtYXgudG9GaXhlZCgyKSA/ICcnIDogbWF4KSksXG4gICAgICAgIGVsZW1lbnRzLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdldEhlaWdodChlbGVtZW50KSB7XG4gICAgY29uc3Qgc3R5bGUgPSBwaWNrKGVsZW1lbnQuc3R5bGUsIFsnZGlzcGxheScsICdtaW5IZWlnaHQnXSk7XG5cbiAgICBpZiAoIWlzVmlzaWJsZShlbGVtZW50KSkge1xuICAgICAgICBjc3MoZWxlbWVudCwgJ2Rpc3BsYXknLCAnYmxvY2snLCAnaW1wb3J0YW50Jyk7XG4gICAgfVxuICAgIGNzcyhlbGVtZW50LCAnbWluSGVpZ2h0JywgJycpO1xuICAgIGNvbnN0IGhlaWdodCA9IGRpbWVuc2lvbnMoZWxlbWVudCkuaGVpZ2h0IC0gYm94TW9kZWxBZGp1c3QoZWxlbWVudCwgJ2hlaWdodCcsICdjb250ZW50LWJveCcpO1xuICAgIGNzcyhlbGVtZW50LCBzdHlsZSk7XG4gICAgcmV0dXJuIGhlaWdodDtcbn1cbiIsImltcG9ydCB7XG4gICAgYm94TW9kZWxBZGp1c3QsXG4gICAgY3NzLFxuICAgIGRpbWVuc2lvbnMsXG4gICAgZW5kc1dpdGgsXG4gICAgaXNOdW1lcmljLFxuICAgIGlzU3RyaW5nLFxuICAgIGlzVmlzaWJsZSxcbiAgICBvZmZzZXRQb3NpdGlvbixcbiAgICBvZmZzZXRWaWV3cG9ydCxcbiAgICBxdWVyeSxcbiAgICBzY3JvbGxQYXJlbnRzLFxuICAgIHRvRmxvYXQsXG59IGZyb20gJ3Vpa2l0LXV0aWwnO1xuaW1wb3J0IHsgcmVzaXplIH0gZnJvbSAnLi4vYXBpL29ic2VydmFibGVzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHByb3BzOiB7XG4gICAgICAgIGV4cGFuZDogQm9vbGVhbixcbiAgICAgICAgb2Zmc2V0VG9wOiBCb29sZWFuLFxuICAgICAgICBvZmZzZXRCb3R0b206IEJvb2xlYW4sXG4gICAgICAgIG1pbkhlaWdodDogTnVtYmVyLFxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIGV4cGFuZDogZmFsc2UsXG4gICAgICAgIG9mZnNldFRvcDogZmFsc2UsXG4gICAgICAgIG9mZnNldEJvdHRvbTogZmFsc2UsXG4gICAgICAgIG1pbkhlaWdodDogMCxcbiAgICB9LFxuXG4gICAgLy8gY2hlY2sgZm9yIG9mZnNldFRvcCBjaGFuZ2VcbiAgICBvYnNlcnZlOiByZXNpemUoe1xuICAgICAgICB0YXJnZXQ6ICh7ICRlbCB9KSA9PiBbJGVsLCAuLi5zY3JvbGxQYXJlbnRzKCRlbCldLFxuICAgIH0pLFxuXG4gICAgdXBkYXRlOiB7XG4gICAgICAgIHJlYWQoeyBtaW5IZWlnaHQ6IHByZXYgfSkge1xuICAgICAgICAgICAgaWYgKCFpc1Zpc2libGUodGhpcy4kZWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbWluSGVpZ2h0ID0gJyc7XG4gICAgICAgICAgICBjb25zdCBib3ggPSBib3hNb2RlbEFkanVzdCh0aGlzLiRlbCwgJ2hlaWdodCcsICdjb250ZW50LWJveCcpO1xuXG4gICAgICAgICAgICBjb25zdCB7IGJvZHksIHNjcm9sbGluZ0VsZW1lbnQgfSA9IGRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgW3Njcm9sbEVsZW1lbnRdID0gc2Nyb2xsUGFyZW50cyh0aGlzLiRlbCk7XG4gICAgICAgICAgICBjb25zdCB7IGhlaWdodDogdmlld3BvcnRIZWlnaHQgfSA9IG9mZnNldFZpZXdwb3J0KFxuICAgICAgICAgICAgICAgIHNjcm9sbEVsZW1lbnQgPT09IGJvZHkgPyBzY3JvbGxpbmdFbGVtZW50IDogc2Nyb2xsRWxlbWVudFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgbWluSGVpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0IC1cbiAgICAgICAgICAgICAgICAgICAgICAgIChkaW1lbnNpb25zKHNjcm9sbEVsZW1lbnQpLmhlaWdodCAtIGRpbWVuc2lvbnModGhpcy4kZWwpLmhlaWdodCkgLVxuICAgICAgICAgICAgICAgICAgICAgICAgYm94LFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdFbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nRWxlbWVudCA9PT0gc2Nyb2xsRWxlbWVudCB8fCBib2R5ID09PSBzY3JvbGxFbGVtZW50O1xuXG4gICAgICAgICAgICAgICAgLy8gb24gbW9iaWxlIGRldmljZXMgKGlPUyBhbmQgQW5kcm9pZCkgd2luZG93LmlubmVySGVpZ2h0ICE9PSAxMDB2aFxuICAgICAgICAgICAgICAgIG1pbkhlaWdodCA9IGBjYWxjKCR7aXNTY3JvbGxpbmdFbGVtZW50ID8gJzEwMHZoJyA6IGAke3ZpZXdwb3J0SGVpZ2h0fXB4YH1gO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub2Zmc2V0VG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Njcm9sbGluZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvcCA9IG9mZnNldFBvc2l0aW9uKHRoaXMuJGVsKVswXSAtIG9mZnNldFBvc2l0aW9uKHNjcm9sbEVsZW1lbnQpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0ICs9IHRvcCA+IDAgJiYgdG9wIDwgdmlld3BvcnRIZWlnaHQgLyAyID8gYCAtICR7dG9wfXB4YCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0ICs9IGAgLSAke2NzcyhzY3JvbGxFbGVtZW50LCAncGFkZGluZ1RvcCcpfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vZmZzZXRCb3R0b20gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0ICs9IGAgLSAke2RpbWVuc2lvbnModGhpcy4kZWwubmV4dEVsZW1lbnRTaWJsaW5nKS5oZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1lcmljKHRoaXMub2Zmc2V0Qm90dG9tKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQgKz0gYCAtICR7dGhpcy5vZmZzZXRCb3R0b219dmhgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vZmZzZXRCb3R0b20gJiYgZW5kc1dpdGgodGhpcy5vZmZzZXRCb3R0b20sICdweCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodCArPSBgIC0gJHt0b0Zsb2F0KHRoaXMub2Zmc2V0Qm90dG9tKX1weGA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZyh0aGlzLm9mZnNldEJvdHRvbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0ICs9IGAgLSAke2RpbWVuc2lvbnMocXVlcnkodGhpcy5vZmZzZXRCb3R0b20sIHRoaXMuJGVsKSkuaGVpZ2h0fXB4YDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBtaW5IZWlnaHQgKz0gYCR7Ym94ID8gYCAtICR7Ym94fXB4YCA6ICcnfSlgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyBtaW5IZWlnaHQsIHByZXYgfTtcbiAgICAgICAgfSxcblxuICAgICAgICB3cml0ZSh7IG1pbkhlaWdodCB9KSB7XG4gICAgICAgICAgICBjc3ModGhpcy4kZWwsIHsgbWluSGVpZ2h0IH0pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5taW5IZWlnaHQgJiYgdG9GbG9hdChjc3ModGhpcy4kZWwsICdtaW5IZWlnaHQnKSkgPCB0aGlzLm1pbkhlaWdodCkge1xuICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ21pbkhlaWdodCcsIHRoaXMubWluSGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IFsncmVzaXplJ10sXG4gICAgfSxcbn07XG4iLCJpbXBvcnQgeyBhZnRlciwgYXBwZW5kLCBhdHRyLCBpc1RhZywgaXNWb2lkRWxlbWVudCwgbm9vcCwgcmVtb3ZlLCB0b0Zsb2F0IH0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBhcmdzOiAnc3JjJyxcblxuICAgIHByb3BzOiB7XG4gICAgICAgIHdpZHRoOiBOdW1iZXIsXG4gICAgICAgIGhlaWdodDogTnVtYmVyLFxuICAgICAgICByYXRpbzogTnVtYmVyLFxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIHJhdGlvOiAxLFxuICAgIH0sXG5cbiAgICBjb25uZWN0ZWQoKSB7XG4gICAgICAgIHRoaXMuc3ZnID0gdGhpcy5nZXRTdmcoKS50aGVuKChlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN2ZyA9IGluc2VydFNWRyhlbCwgdGhpcy4kZWwpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zdmdFbCAmJiBzdmcgIT09IHRoaXMuc3ZnRWwpIHtcbiAgICAgICAgICAgICAgICByZW1vdmUodGhpcy5zdmdFbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGx5V2lkdGhBbmRIZWlnaHQuY2FsbCh0aGlzLCBzdmcsIGVsKTtcblxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnN2Z0VsID0gc3ZnKTtcbiAgICAgICAgfSwgbm9vcCk7XG4gICAgfSxcblxuICAgIGRpc2Nvbm5lY3RlZCgpIHtcbiAgICAgICAgdGhpcy5zdmcudGhlbigoc3ZnKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNWb2lkRWxlbWVudCh0aGlzLiRlbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVtb3ZlKHN2Zyk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsID0gbnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdmcgPSBudWxsO1xuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGFzeW5jIGdldFN2ZygpIHt9LFxuICAgIH0sXG59O1xuXG5mdW5jdGlvbiBpbnNlcnRTVkcoZWwsIHJvb3QpIHtcbiAgICBpZiAoaXNWb2lkRWxlbWVudChyb290KSB8fCBpc1RhZyhyb290LCAnY2FudmFzJykpIHtcbiAgICAgICAgcm9vdC5oaWRkZW4gPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IG5leHQgPSByb290Lm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgcmV0dXJuIGVxdWFscyhlbCwgbmV4dCkgPyBuZXh0IDogYWZ0ZXIocm9vdCwgZWwpO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3QgPSByb290Lmxhc3RFbGVtZW50Q2hpbGQ7XG4gICAgcmV0dXJuIGVxdWFscyhlbCwgbGFzdCkgPyBsYXN0IDogYXBwZW5kKHJvb3QsIGVsKTtcbn1cblxuZnVuY3Rpb24gZXF1YWxzKGVsLCBvdGhlcikge1xuICAgIHJldHVybiBpc1RhZyhlbCwgJ3N2ZycpICYmIGlzVGFnKG90aGVyLCAnc3ZnJykgJiYgZWwuaW5uZXJIVE1MID09PSBvdGhlci5pbm5lckhUTUw7XG59XG5cbmZ1bmN0aW9uIGFwcGx5V2lkdGhBbmRIZWlnaHQoZWwsIHJlZikge1xuICAgIGNvbnN0IHByb3BzID0gWyd3aWR0aCcsICdoZWlnaHQnXTtcbiAgICBsZXQgZGltZW5zaW9ucyA9IHByb3BzLm1hcCgocHJvcCkgPT4gdGhpc1twcm9wXSk7XG5cbiAgICBpZiAoIWRpbWVuc2lvbnMuc29tZSgodmFsKSA9PiB2YWwpKSB7XG4gICAgICAgIGRpbWVuc2lvbnMgPSBwcm9wcy5tYXAoKHByb3ApID0+IGF0dHIocmVmLCBwcm9wKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgdmlld0JveCA9IGF0dHIocmVmLCAndmlld0JveCcpO1xuICAgIGlmICh2aWV3Qm94ICYmICFkaW1lbnNpb25zLnNvbWUoKHZhbCkgPT4gdmFsKSkge1xuICAgICAgICBkaW1lbnNpb25zID0gdmlld0JveC5zcGxpdCgnICcpLnNsaWNlKDIpO1xuICAgIH1cblxuICAgIGRpbWVuc2lvbnMuZm9yRWFjaCgodmFsLCBpKSA9PiBhdHRyKGVsLCBwcm9wc1tpXSwgdG9GbG9hdCh2YWwpICogdGhpcy5yYXRpbyB8fCBudWxsKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgICAgaTE4bjogT2JqZWN0LFxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIGkxOG46IG51bGwsXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgdChrZXksIC4uLnBhcmFtcykge1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAodGhpcy5pMThuPy5ba2V5XSB8fCB0aGlzLiRvcHRpb25zLmkxOG4/LltrZXldKT8ucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgLyVzL2csXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHBhcmFtc1tpKytdIHx8ICcnXG4gICAgICAgICAgICAgICAgKSB8fCAnJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbiIsImltcG9ydCBTdmcgZnJvbSAnLi4vbWl4aW4vc3ZnJztcbmltcG9ydCBJMThuIGZyb20gJy4uL21peGluL2kxOG4nO1xuaW1wb3J0IGNsb3NlSWNvbiBmcm9tICcuLi8uLi9pbWFnZXMvY29tcG9uZW50cy9jbG9zZS1pY29uLnN2Zyc7XG5pbXBvcnQgY2xvc2VMYXJnZSBmcm9tICcuLi8uLi9pbWFnZXMvY29tcG9uZW50cy9jbG9zZS1sYXJnZS5zdmcnO1xuaW1wb3J0IGRyb3BQYXJlbnRJY29uIGZyb20gJy4uLy4uL2ltYWdlcy9jb21wb25lbnRzL2Ryb3AtcGFyZW50LWljb24uc3ZnJztcbmltcG9ydCBtYXJrZXIgZnJvbSAnLi4vLi4vaW1hZ2VzL2NvbXBvbmVudHMvbWFya2VyLnN2Zyc7XG5pbXBvcnQgbmF2UGFyZW50SWNvbiBmcm9tICcuLi8uLi9pbWFnZXMvY29tcG9uZW50cy9uYXYtcGFyZW50LWljb24uc3ZnJztcbmltcG9ydCBuYXZQYXJlbnRJY29uTGFyZ2UgZnJvbSAnLi4vLi4vaW1hZ2VzL2NvbXBvbmVudHMvbmF2LXBhcmVudC1pY29uLWxhcmdlLnN2Zyc7XG5pbXBvcnQgbmF2YmFyUGFyZW50SWNvbiBmcm9tICcuLi8uLi9pbWFnZXMvY29tcG9uZW50cy9uYXZiYXItcGFyZW50LWljb24uc3ZnJztcbmltcG9ydCBuYXZiYXJUb2dnbGVJY29uIGZyb20gJy4uLy4uL2ltYWdlcy9jb21wb25lbnRzL25hdmJhci10b2dnbGUtaWNvbi5zdmcnO1xuaW1wb3J0IG92ZXJsYXlJY29uIGZyb20gJy4uLy4uL2ltYWdlcy9jb21wb25lbnRzL292ZXJsYXktaWNvbi5zdmcnO1xuaW1wb3J0IHBhZ2luYXRpb25OZXh0IGZyb20gJy4uLy4uL2ltYWdlcy9jb21wb25lbnRzL3BhZ2luYXRpb24tbmV4dC5zdmcnO1xuaW1wb3J0IHBhZ2luYXRpb25QcmV2aW91cyBmcm9tICcuLi8uLi9pbWFnZXMvY29tcG9uZW50cy9wYWdpbmF0aW9uLXByZXZpb3VzLnN2Zyc7XG5pbXBvcnQgc2VhcmNoSWNvbiBmcm9tICcuLi8uLi9pbWFnZXMvY29tcG9uZW50cy9zZWFyY2gtaWNvbi5zdmcnO1xuaW1wb3J0IHNlYXJjaExhcmdlIGZyb20gJy4uLy4uL2ltYWdlcy9jb21wb25lbnRzL3NlYXJjaC1sYXJnZS5zdmcnO1xuaW1wb3J0IHNlYXJjaE5hdmJhciBmcm9tICcuLi8uLi9pbWFnZXMvY29tcG9uZW50cy9zZWFyY2gtbmF2YmFyLnN2Zyc7XG5pbXBvcnQgc2xpZGVuYXZOZXh0IGZyb20gJy4uLy4uL2ltYWdlcy9jb21wb25lbnRzL3NsaWRlbmF2LW5leHQuc3ZnJztcbmltcG9ydCBzbGlkZW5hdk5leHRMYXJnZSBmcm9tICcuLi8uLi9pbWFnZXMvY29tcG9uZW50cy9zbGlkZW5hdi1uZXh0LWxhcmdlLnN2Zyc7XG5pbXBvcnQgc2xpZGVuYXZQcmV2aW91cyBmcm9tICcuLi8uLi9pbWFnZXMvY29tcG9uZW50cy9zbGlkZW5hdi1wcmV2aW91cy5zdmcnO1xuaW1wb3J0IHNsaWRlbmF2UHJldmlvdXNMYXJnZSBmcm9tICcuLi8uLi9pbWFnZXMvY29tcG9uZW50cy9zbGlkZW5hdi1wcmV2aW91cy1sYXJnZS5zdmcnO1xuaW1wb3J0IHNwaW5uZXIgZnJvbSAnLi4vLi4vaW1hZ2VzL2NvbXBvbmVudHMvc3Bpbm5lci5zdmcnO1xuaW1wb3J0IHRvdG9wIGZyb20gJy4uLy4uL2ltYWdlcy9jb21wb25lbnRzL3RvdG9wLnN2Zyc7XG5pbXBvcnQge1xuICAgICQsXG4gICAgYWRkQ2xhc3MsXG4gICAgYXBwbHksXG4gICAgYXR0cixcbiAgICBjbG9zZXN0LFxuICAgIGNzcyxcbiAgICBlYWNoLFxuICAgIGhhc0F0dHIsXG4gICAgaGFzQ2xhc3MsXG4gICAgaHlwaGVuYXRlLFxuICAgIGlzUnRsLFxuICAgIGlzU3RyaW5nLFxuICAgIGlzVGFnLFxuICAgIHBhcmVudHMsXG4gICAgc3dhcCxcbn0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmNvbnN0IGljb25zID0ge1xuICAgIHNwaW5uZXIsXG4gICAgdG90b3AsXG4gICAgbWFya2VyLFxuICAgICdjbG9zZS1pY29uJzogY2xvc2VJY29uLFxuICAgICdjbG9zZS1sYXJnZSc6IGNsb3NlTGFyZ2UsXG4gICAgJ2Ryb3AtcGFyZW50LWljb24nOiBkcm9wUGFyZW50SWNvbixcbiAgICAnbmF2LXBhcmVudC1pY29uJzogbmF2UGFyZW50SWNvbixcbiAgICAnbmF2LXBhcmVudC1pY29uLWxhcmdlJzogbmF2UGFyZW50SWNvbkxhcmdlLFxuICAgICduYXZiYXItcGFyZW50LWljb24nOiBuYXZiYXJQYXJlbnRJY29uLFxuICAgICduYXZiYXItdG9nZ2xlLWljb24nOiBuYXZiYXJUb2dnbGVJY29uLFxuICAgICdvdmVybGF5LWljb24nOiBvdmVybGF5SWNvbixcbiAgICAncGFnaW5hdGlvbi1uZXh0JzogcGFnaW5hdGlvbk5leHQsXG4gICAgJ3BhZ2luYXRpb24tcHJldmlvdXMnOiBwYWdpbmF0aW9uUHJldmlvdXMsXG4gICAgJ3NlYXJjaC1pY29uJzogc2VhcmNoSWNvbixcbiAgICAnc2VhcmNoLWxhcmdlJzogc2VhcmNoTGFyZ2UsXG4gICAgJ3NlYXJjaC1uYXZiYXInOiBzZWFyY2hOYXZiYXIsXG4gICAgJ3NsaWRlbmF2LW5leHQnOiBzbGlkZW5hdk5leHQsXG4gICAgJ3NsaWRlbmF2LW5leHQtbGFyZ2UnOiBzbGlkZW5hdk5leHRMYXJnZSxcbiAgICAnc2xpZGVuYXYtcHJldmlvdXMnOiBzbGlkZW5hdlByZXZpb3VzLFxuICAgICdzbGlkZW5hdi1wcmV2aW91cy1sYXJnZSc6IHNsaWRlbmF2UHJldmlvdXNMYXJnZSxcbn07XG5cbmNvbnN0IEljb24gPSB7XG4gICAgaW5zdGFsbCxcblxuICAgIG1peGluczogW1N2Z10sXG5cbiAgICBhcmdzOiAnaWNvbicsXG5cbiAgICBwcm9wczogeyBpY29uOiBTdHJpbmcgfSxcblxuICAgIGlzSWNvbjogdHJ1ZSxcblxuICAgIGJlZm9yZUNvbm5lY3QoKSB7XG4gICAgICAgIGFkZENsYXNzKHRoaXMuJGVsLCAndWstaWNvbicpO1xuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGFzeW5jIGdldFN2ZygpIHtcbiAgICAgICAgICAgIGNvbnN0IGljb24gPSBnZXRJY29uKHRoaXMuaWNvbik7XG5cbiAgICAgICAgICAgIGlmICghaWNvbikge1xuICAgICAgICAgICAgICAgIHRocm93ICdJY29uIG5vdCBmb3VuZC4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaWNvbjtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcblxuZXhwb3J0IGNvbnN0IEljb25Db21wb25lbnQgPSB7XG4gICAgYXJnczogZmFsc2UsXG5cbiAgICBleHRlbmRzOiBJY29uLFxuXG4gICAgZGF0YTogKHZtKSA9PiAoe1xuICAgICAgICBpY29uOiBoeXBoZW5hdGUodm0uY29uc3RydWN0b3Iub3B0aW9ucy5uYW1lKSxcbiAgICB9KSxcblxuICAgIGJlZm9yZUNvbm5lY3QoKSB7XG4gICAgICAgIGFkZENsYXNzKHRoaXMuJGVsLCB0aGlzLiRvcHRpb25zLmlkKTtcbiAgICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IE5hdlBhcmVudEljb24gPSB7XG4gICAgZXh0ZW5kczogSWNvbkNvbXBvbmVudCxcblxuICAgIGJlZm9yZUNvbm5lY3QoKSB7XG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLiRwcm9wcy5pY29uO1xuICAgICAgICB0aGlzLmljb24gPSBjbG9zZXN0KHRoaXMuJGVsLCAnLnVrLW5hdi1wcmltYXJ5JykgPyBgJHtpY29ufS1sYXJnZWAgOiBpY29uO1xuICAgIH0sXG59O1xuXG5leHBvcnQgY29uc3QgU2VhcmNoID0ge1xuICAgIGV4dGVuZHM6IEljb25Db21wb25lbnQsXG5cbiAgICBiZWZvcmVDb25uZWN0KCkge1xuICAgICAgICB0aGlzLmljb24gPVxuICAgICAgICAgICAgaGFzQ2xhc3ModGhpcy4kZWwsICd1ay1zZWFyY2gtaWNvbicpICYmIHBhcmVudHModGhpcy4kZWwsICcudWstc2VhcmNoLWxhcmdlJykubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyAnc2VhcmNoLWxhcmdlJ1xuICAgICAgICAgICAgICAgIDogcGFyZW50cyh0aGlzLiRlbCwgJy51ay1zZWFyY2gtbmF2YmFyJykubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyAnc2VhcmNoLW5hdmJhcidcbiAgICAgICAgICAgICAgICA6IHRoaXMuJHByb3BzLmljb247XG4gICAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBTcGlubmVyID0ge1xuICAgIGV4dGVuZHM6IEljb25Db21wb25lbnQsXG5cbiAgICBiZWZvcmVDb25uZWN0KCkge1xuICAgICAgICBhdHRyKHRoaXMuJGVsLCAncm9sZScsICdzdGF0dXMnKTtcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgICBhc3luYyBnZXRTdmcoKSB7XG4gICAgICAgICAgICBjb25zdCBpY29uID0gYXdhaXQgSWNvbi5tZXRob2RzLmdldFN2Zy5jYWxsKHRoaXMpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5yYXRpbyAhPT0gMSkge1xuICAgICAgICAgICAgICAgIGNzcygkKCdjaXJjbGUnLCBpY29uKSwgJ3N0cm9rZVdpZHRoJywgMSAvIHRoaXMucmF0aW8pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaWNvbjtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxuY29uc3QgQnV0dG9uQ29tcG9uZW50ID0ge1xuICAgIGV4dGVuZHM6IEljb25Db21wb25lbnQsXG5cbiAgICBtaXhpbnM6IFtJMThuXSxcblxuICAgIGJlZm9yZUNvbm5lY3QoKSB7XG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IGNsb3Nlc3QodGhpcy4kZWwsICdhLGJ1dHRvbicpO1xuXG4gICAgICAgIGF0dHIoYnV0dG9uLCAncm9sZScsIHRoaXMucm9sZSAhPT0gbnVsbCAmJiBpc1RhZyhidXR0b24sICdhJykgPyAnYnV0dG9uJyA6IHRoaXMucm9sZSk7XG5cbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnQoJ2xhYmVsJyk7XG4gICAgICAgIGlmIChsYWJlbCAmJiAhaGFzQXR0cihidXR0b24sICdhcmlhLWxhYmVsJykpIHtcbiAgICAgICAgICAgIGF0dHIoYnV0dG9uLCAnYXJpYS1sYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuXG5leHBvcnQgY29uc3QgU2xpZGVuYXYgPSB7XG4gICAgZXh0ZW5kczogQnV0dG9uQ29tcG9uZW50LFxuXG4gICAgYmVmb3JlQ29ubmVjdCgpIHtcbiAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsICd1ay1zbGlkZW5hdicpO1xuICAgICAgICBjb25zdCBpY29uID0gdGhpcy4kcHJvcHMuaWNvbjtcbiAgICAgICAgdGhpcy5pY29uID0gaGFzQ2xhc3ModGhpcy4kZWwsICd1ay1zbGlkZW5hdi1sYXJnZScpID8gYCR7aWNvbn0tbGFyZ2VgIDogaWNvbjtcbiAgICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IE5hdmJhclRvZ2dsZUljb24gPSB7XG4gICAgZXh0ZW5kczogQnV0dG9uQ29tcG9uZW50LFxuICAgIGkxOG46IHsgbGFiZWw6ICdPcGVuIG1lbnUnIH0sXG59O1xuXG5leHBvcnQgY29uc3QgQ2xvc2UgPSB7XG4gICAgZXh0ZW5kczogQnV0dG9uQ29tcG9uZW50LFxuXG4gICAgaTE4bjogeyBsYWJlbDogJ0Nsb3NlJyB9LFxuXG4gICAgYmVmb3JlQ29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5pY29uID0gYGNsb3NlLSR7aGFzQ2xhc3ModGhpcy4kZWwsICd1ay1jbG9zZS1sYXJnZScpID8gJ2xhcmdlJyA6ICdpY29uJ31gO1xuICAgIH0sXG59O1xuXG5leHBvcnQgY29uc3QgTWFya2VyID0ge1xuICAgIGV4dGVuZHM6IEJ1dHRvbkNvbXBvbmVudCxcbiAgICBpMThuOiB7IGxhYmVsOiAnT3BlbicgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBUb3RvcCA9IHtcbiAgICBleHRlbmRzOiBCdXR0b25Db21wb25lbnQsXG4gICAgaTE4bjogeyBsYWJlbDogJ0JhY2sgdG8gdG9wJyB9LFxufTtcblxuZXhwb3J0IGNvbnN0IFBhZ2luYXRpb25OZXh0ID0ge1xuICAgIGV4dGVuZHM6IEJ1dHRvbkNvbXBvbmVudCxcbiAgICBpMThuOiB7IGxhYmVsOiAnTmV4dCBwYWdlJyB9LFxuICAgIGRhdGE6IHsgcm9sZTogbnVsbCB9LFxufTtcblxuZXhwb3J0IGNvbnN0IFBhZ2luYXRpb25QcmV2aW91cyA9IHtcbiAgICBleHRlbmRzOiBCdXR0b25Db21wb25lbnQsXG4gICAgaTE4bjogeyBsYWJlbDogJ1ByZXZpb3VzIHBhZ2UnIH0sXG4gICAgZGF0YTogeyByb2xlOiBudWxsIH0sXG59O1xuXG5jb25zdCBwYXJzZWQgPSB7fTtcbmZ1bmN0aW9uIGluc3RhbGwoVUlraXQpIHtcbiAgICBVSWtpdC5pY29uLmFkZCA9IChuYW1lLCBzdmcpID0+IHtcbiAgICAgICAgY29uc3QgYWRkZWQgPSBpc1N0cmluZyhuYW1lKSA/IHsgW25hbWVdOiBzdmcgfSA6IG5hbWU7XG4gICAgICAgIGVhY2goYWRkZWQsIChzdmcsIG5hbWUpID0+IHtcbiAgICAgICAgICAgIGljb25zW25hbWVdID0gc3ZnO1xuICAgICAgICAgICAgZGVsZXRlIHBhcnNlZFtuYW1lXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKFVJa2l0Ll9pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgYXBwbHkoZG9jdW1lbnQuYm9keSwgKGVsKSA9PlxuICAgICAgICAgICAgICAgIGVhY2goVUlraXQuZ2V0Q29tcG9uZW50cyhlbCksIChjbXApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY21wLiRvcHRpb25zLmlzSWNvbiAmJiBjbXAuaWNvbiBpbiBhZGRlZCAmJiBjbXAuJHJlc2V0KCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRJY29uKGljb24pIHtcbiAgICBpZiAoIWljb25zW2ljb25dKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VkW2ljb25dKSB7XG4gICAgICAgIHBhcnNlZFtpY29uXSA9ICQoKGljb25zW2FwcGx5UnRsKGljb24pXSB8fCBpY29uc1tpY29uXSkudHJpbSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkW2ljb25dLmNsb25lTm9kZSh0cnVlKTtcbn1cblxuZnVuY3Rpb24gYXBwbHlSdGwoaWNvbikge1xuICAgIHJldHVybiBpc1J0bCA/IHN3YXAoc3dhcChpY29uLCAnbGVmdCcsICdyaWdodCcpLCAncHJldmlvdXMnLCAnbmV4dCcpIDogaWNvbjtcbn1cbiIsImltcG9ydCB7IHBhcnNlT3B0aW9ucyB9IGZyb20gJy4uL2FwaS9vcHRpb25zJztcbmltcG9ydCB7IGludGVyc2VjdGlvbiB9IGZyb20gJy4uL2FwaS9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge1xuICAgIGFwcGVuZCxcbiAgICBhdHRyLFxuICAgIGNoaWxkcmVuLFxuICAgIGNyZWF0ZUV2ZW50LFxuICAgIGNzcyxcbiAgICBkYXRhLFxuICAgIGVzY2FwZSxcbiAgICBmcmFnbWVudCxcbiAgICBoYXNBdHRyLFxuICAgIGluQnJvd3NlcixcbiAgICBpbmNsdWRlcyxcbiAgICBpc0FycmF5LFxuICAgIGlzRW1wdHksXG4gICAgaXNUYWcsXG4gICAgcGFyZW50LFxuICAgIHF1ZXJ5QWxsLFxuICAgIHJlbW92ZUF0dHIsXG4gICAgc3RhcnRzV2l0aCxcbiAgICB0cmlnZ2VyLFxufSBmcm9tICd1aWtpdC11dGlsJztcblxuY29uc3QgbmF0aXZlTGF6eUxvYWQgPSBpbkJyb3dzZXIgJiYgJ2xvYWRpbmcnIGluIEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgYXJnczogJ2RhdGFTcmMnLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YVNyYzogU3RyaW5nLFxuICAgICAgICBzb3VyY2VzOiBTdHJpbmcsXG4gICAgICAgIG1hcmdpbjogU3RyaW5nLFxuICAgICAgICB0YXJnZXQ6IFN0cmluZyxcbiAgICAgICAgbG9hZGluZzogU3RyaW5nLFxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIGRhdGFTcmM6ICcnLFxuICAgICAgICBzb3VyY2VzOiBmYWxzZSxcbiAgICAgICAgbWFyZ2luOiAnNTAlJyxcbiAgICAgICAgdGFyZ2V0OiBmYWxzZSxcbiAgICAgICAgbG9hZGluZzogJ2xhenknLFxuICAgIH0sXG5cbiAgICBjb25uZWN0ZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcgIT09ICdsYXp5Jykge1xuICAgICAgICAgICAgdGhpcy5sb2FkKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF0aXZlTGF6eUxvYWQgJiYgaXNJbWcodGhpcy4kZWwpKSB7XG4gICAgICAgICAgICB0aGlzLiRlbC5sb2FkaW5nID0gJ2xhenknO1xuICAgICAgICAgICAgc2V0U3JjQXR0cnModGhpcy4kZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5zdXJlU3JjQXR0cmlidXRlKHRoaXMuJGVsKTtcbiAgICB9LFxuXG4gICAgZGlzY29ubmVjdGVkKCkge1xuICAgICAgICBpZiAodGhpcy5pbWcpIHtcbiAgICAgICAgICAgIHRoaXMuaW1nLm9ubG9hZCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLmltZztcbiAgICB9LFxuXG4gICAgb2JzZXJ2ZTogaW50ZXJzZWN0aW9uKHtcbiAgICAgICAgdGFyZ2V0OiAoeyAkZWwsICRwcm9wcyB9KSA9PiBbJGVsLCAuLi5xdWVyeUFsbCgkcHJvcHMudGFyZ2V0LCAkZWwpXSxcbiAgICAgICAgaGFuZGxlcihlbnRyaWVzLCBvYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5sb2FkKCk7XG4gICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnM6ICh7IG1hcmdpbiB9KSA9PiAoeyByb290TWFyZ2luOiBtYXJnaW4gfSksXG4gICAgICAgIGZpbHRlcjogKHsgbG9hZGluZyB9KSA9PiBsb2FkaW5nID09PSAnbGF6eScsXG4gICAgfSksXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGxvYWQoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbWcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbWc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGltYWdlID0gaXNJbWcodGhpcy4kZWwpXG4gICAgICAgICAgICAgICAgPyB0aGlzLiRlbFxuICAgICAgICAgICAgICAgIDogZ2V0SW1hZ2VGcm9tRWxlbWVudCh0aGlzLiRlbCwgdGhpcy5kYXRhU3JjLCB0aGlzLnNvdXJjZXMpO1xuXG4gICAgICAgICAgICByZW1vdmVBdHRyKGltYWdlLCAnbG9hZGluZycpO1xuICAgICAgICAgICAgc2V0U3JjQXR0cnModGhpcy4kZWwsIGltYWdlLmN1cnJlbnRTcmMpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLmltZyA9IGltYWdlKTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxuZnVuY3Rpb24gc2V0U3JjQXR0cnMoZWwsIHNyYykge1xuICAgIGlmIChpc0ltZyhlbCkpIHtcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHBhcmVudChlbCk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gaXNUYWcocGFyZW50Tm9kZSwgJ3BpY3R1cmUnKSA/IGNoaWxkcmVuKHBhcmVudE5vZGUpIDogW2VsXTtcbiAgICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWwpID0+IHNldFNvdXJjZVByb3BzKGVsLCBlbCkpO1xuICAgIH0gZWxzZSBpZiAoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZSA9ICFpbmNsdWRlcyhlbC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UsIHNyYyk7XG4gICAgICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgICAgICAgIGNzcyhlbCwgJ2JhY2tncm91bmRJbWFnZScsIGB1cmwoJHtlc2NhcGUoc3JjKX0pYCk7XG4gICAgICAgICAgICB0cmlnZ2VyKGVsLCBjcmVhdGVFdmVudCgnbG9hZCcsIGZhbHNlKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IHNyY1Byb3BzID0gWydkYXRhLXNyYycsICdkYXRhLXNyY3NldCcsICdzaXplcyddO1xuZnVuY3Rpb24gc2V0U291cmNlUHJvcHMoc291cmNlRWwsIHRhcmdldEVsKSB7XG4gICAgc3JjUHJvcHMuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGEoc291cmNlRWwsIHByb3ApO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGF0dHIodGFyZ2V0RWwsIHByb3AucmVwbGFjZSgvXihkYXRhLSkrLywgJycpLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0SW1hZ2VGcm9tRWxlbWVudChlbCwgc3JjLCBzb3VyY2VzKSB7XG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG5cbiAgICB3cmFwSW5QaWN0dXJlKGltZywgc291cmNlcyk7XG4gICAgc2V0U291cmNlUHJvcHMoZWwsIGltZyk7XG4gICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgc2V0U3JjQXR0cnMoZWwsIGltZy5jdXJyZW50U3JjKTtcbiAgICB9O1xuICAgIGF0dHIoaW1nLCAnc3JjJywgc3JjKTtcbiAgICByZXR1cm4gaW1nO1xufVxuXG5mdW5jdGlvbiB3cmFwSW5QaWN0dXJlKGltZywgc291cmNlcykge1xuICAgIHNvdXJjZXMgPSBwYXJzZVNvdXJjZXMoc291cmNlcyk7XG5cbiAgICBpZiAoc291cmNlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcGljdHVyZSA9IGZyYWdtZW50KCc8cGljdHVyZT4nKTtcbiAgICAgICAgZm9yIChjb25zdCBhdHRycyBvZiBzb3VyY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBmcmFnbWVudCgnPHNvdXJjZT4nKTtcbiAgICAgICAgICAgIGF0dHIoc291cmNlLCBhdHRycyk7XG4gICAgICAgICAgICBhcHBlbmQocGljdHVyZSwgc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBhcHBlbmQocGljdHVyZSwgaW1nKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU291cmNlcyhzb3VyY2VzKSB7XG4gICAgaWYgKCFzb3VyY2VzKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRzV2l0aChzb3VyY2VzLCAnWycpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzb3VyY2VzID0gSlNPTi5wYXJzZShzb3VyY2VzKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgc291cmNlcyA9IFtdO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc291cmNlcyA9IHBhcnNlT3B0aW9ucyhzb3VyY2VzKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzQXJyYXkoc291cmNlcykpIHtcbiAgICAgICAgc291cmNlcyA9IFtzb3VyY2VzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gIWlzRW1wdHkoc291cmNlKSk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZVNyY0F0dHJpYnV0ZShlbCkge1xuICAgIGlmIChpc0ltZyhlbCkgJiYgIWhhc0F0dHIoZWwsICdzcmMnKSkge1xuICAgICAgICBhdHRyKGVsLCAnc3JjJywgJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjwvc3ZnPicpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNJbWcoZWwpIHtcbiAgICByZXR1cm4gaXNUYWcoZWwsICdpbWcnKTtcbn1cbiIsImltcG9ydCB7XG4gICAgY3JlYXRlRXZlbnQsXG4gICAgY3NzLFxuICAgIGlzTnVtZXJpYyxcbiAgICBpc1N0cmluZyxcbiAgICBvbixcbiAgICBzdGFydHNXaXRoLFxuICAgIHRvRmxvYXQsXG4gICAgdHJpZ2dlcixcbn0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgICBtZWRpYTogQm9vbGVhbixcbiAgICB9LFxuXG4gICAgZGF0YToge1xuICAgICAgICBtZWRpYTogZmFsc2UsXG4gICAgfSxcblxuICAgIGNvbm5lY3RlZCgpIHtcbiAgICAgICAgY29uc3QgbWVkaWEgPSB0b01lZGlhKHRoaXMubWVkaWEsIHRoaXMuJGVsKTtcbiAgICAgICAgdGhpcy5tYXRjaE1lZGlhID0gdHJ1ZTtcbiAgICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgICAgICB0aGlzLm1lZGlhT2JqID0gd2luZG93Lm1hdGNoTWVkaWEobWVkaWEpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoTWVkaWEgPSB0aGlzLm1lZGlhT2JqLm1hdGNoZXM7XG4gICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgY3JlYXRlRXZlbnQoJ21lZGlhY2hhbmdlJywgZmFsc2UsIHRydWUsIFt0aGlzLm1lZGlhT2JqXSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMub2ZmTWVkaWFPYmogPSBvbih0aGlzLm1lZGlhT2JqLCAnY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdyZXNpemUnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaGFuZGxlcigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGRpc2Nvbm5lY3RlZCgpIHtcbiAgICAgICAgdGhpcy5vZmZNZWRpYU9iaj8uKCk7XG4gICAgfSxcbn07XG5cbmZ1bmN0aW9uIHRvTWVkaWEodmFsdWUsIGVsZW1lbnQpIHtcbiAgICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIGlmIChzdGFydHNXaXRoKHZhbHVlLCAnQCcpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRvRmxvYXQoY3NzKGVsZW1lbnQsIGAtLXVrLWJyZWFrcG9pbnQtJHt2YWx1ZS5zdWJzdHIoMSl9YCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlICYmIGlzTnVtZXJpYyh2YWx1ZSkgPyBgKG1pbi13aWR0aDogJHt2YWx1ZX1weClgIDogJyc7XG59XG4iLCJpbXBvcnQgQ2xhc3MgZnJvbSAnLi4vbWl4aW4vY2xhc3MnO1xuaW1wb3J0IE1lZGlhIGZyb20gJy4uL21peGluL21lZGlhJztcbmltcG9ydCB7IHJlc2l6ZSB9IGZyb20gJy4uL2FwaS9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBhdHRyLCBjc3MsIHRvZ2dsZUNsYXNzLCB1bndyYXAsIHdyYXBJbm5lciB9IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbWl4aW5zOiBbQ2xhc3MsIE1lZGlhXSxcblxuICAgIHByb3BzOiB7XG4gICAgICAgIGZpbGw6IFN0cmluZyxcbiAgICB9LFxuXG4gICAgZGF0YToge1xuICAgICAgICBmaWxsOiAnJyxcbiAgICAgICAgY2xzV3JhcHBlcjogJ3VrLWxlYWRlci1maWxsJyxcbiAgICAgICAgY2xzSGlkZTogJ3VrLWxlYWRlci1oaWRlJyxcbiAgICAgICAgYXR0ckZpbGw6ICdkYXRhLWZpbGwnLFxuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgICBmaWxsKHsgZmlsbCB9KSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsbCB8fCBjc3ModGhpcy4kZWwsICctLXVrLWxlYWRlci1maWxsLWNvbnRlbnQnKTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgY29ubmVjdGVkKCkge1xuICAgICAgICBbdGhpcy53cmFwcGVyXSA9IHdyYXBJbm5lcih0aGlzLiRlbCwgYDxzcGFuIGNsYXNzPVwiJHt0aGlzLmNsc1dyYXBwZXJ9XCI+YCk7XG4gICAgfSxcblxuICAgIGRpc2Nvbm5lY3RlZCgpIHtcbiAgICAgICAgdW53cmFwKHRoaXMud3JhcHBlci5jaGlsZE5vZGVzKTtcbiAgICB9LFxuXG4gICAgb2JzZXJ2ZTogcmVzaXplKCksXG5cbiAgICB1cGRhdGU6IHtcbiAgICAgICAgcmVhZCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC50cnVuYyh0aGlzLiRlbC5vZmZzZXRXaWR0aCAvIDIpO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgIGZpbGw6IHRoaXMuZmlsbCxcbiAgICAgICAgICAgICAgICBoaWRlOiAhdGhpcy5tYXRjaE1lZGlhLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcblxuICAgICAgICB3cml0ZSh7IHdpZHRoLCBmaWxsLCBoaWRlIH0pIHtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHRoaXMud3JhcHBlciwgdGhpcy5jbHNIaWRlLCBoaWRlKTtcbiAgICAgICAgICAgIGF0dHIodGhpcy53cmFwcGVyLCB0aGlzLmF0dHJGaWxsLCBuZXcgQXJyYXkod2lkdGgpLmpvaW4oZmlsbCkpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGV2ZW50czogWydyZXNpemUnXSxcbiAgICB9LFxufTtcbiIsImltcG9ydCBDbGFzcyBmcm9tICcuL2NsYXNzJztcbmltcG9ydCBDb250YWluZXIgZnJvbSAnLi9jb250YWluZXInO1xuaW1wb3J0IFRvZ2dsYWJsZSBmcm9tICcuL3RvZ2dsYWJsZSc7XG5pbXBvcnQge1xuICAgICQsXG4gICAgYWRkQ2xhc3MsXG4gICAgYXBwZW5kLFxuICAgIGF0dHIsXG4gICAgY3NzLFxuICAgIGVuZHNXaXRoLFxuICAgIGluY2x1ZGVzLFxuICAgIGlzRm9jdXNhYmxlLFxuICAgIGlzU2FtZVNpdGVBbmNob3IsXG4gICAgbGFzdCxcbiAgICBtYXRjaGVzLFxuICAgIG9uLFxuICAgIG9uY2UsXG4gICAgcGFyZW50LFxuICAgIHBvaW50ZXJDYW5jZWwsXG4gICAgcG9pbnRlckRvd24sXG4gICAgcG9pbnRlclVwLFxuICAgIHJlbW92ZUNsYXNzLFxuICAgIHRvRmxvYXQsXG4gICAgd2l0aGluLFxufSBmcm9tICd1aWtpdC11dGlsJztcbmltcG9ydCB7IHByZXZlbnRCYWNrZ3JvdW5kU2Nyb2xsIH0gZnJvbSAnLi9pbnRlcm5hbC9zY3JvbGwnO1xuXG5jb25zdCBhY3RpdmUgPSBbXTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG1peGluczogW0NsYXNzLCBDb250YWluZXIsIFRvZ2dsYWJsZV0sXG5cbiAgICBwcm9wczoge1xuICAgICAgICBzZWxQYW5lbDogU3RyaW5nLFxuICAgICAgICBzZWxDbG9zZTogU3RyaW5nLFxuICAgICAgICBlc2NDbG9zZTogQm9vbGVhbixcbiAgICAgICAgYmdDbG9zZTogQm9vbGVhbixcbiAgICAgICAgc3RhY2s6IEJvb2xlYW4sXG4gICAgICAgIHJvbGU6IFN0cmluZyxcbiAgICB9LFxuXG4gICAgZGF0YToge1xuICAgICAgICBjbHM6ICd1ay1vcGVuJyxcbiAgICAgICAgZXNjQ2xvc2U6IHRydWUsXG4gICAgICAgIGJnQ2xvc2U6IHRydWUsXG4gICAgICAgIG92ZXJsYXk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBmYWxzZSxcbiAgICAgICAgcm9sZTogJ2RpYWxvZycsXG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIHBhbmVsKHsgc2VsUGFuZWwgfSwgJGVsKSB7XG4gICAgICAgICAgICByZXR1cm4gJChzZWxQYW5lbCwgJGVsKTtcbiAgICAgICAgfSxcblxuICAgICAgICB0cmFuc2l0aW9uRWxlbWVudCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhbmVsO1xuICAgICAgICB9LFxuXG4gICAgICAgIGJnQ2xvc2UoeyBiZ0Nsb3NlIH0pIHtcbiAgICAgICAgICAgIHJldHVybiBiZ0Nsb3NlICYmIHRoaXMucGFuZWw7XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGNvbm5lY3RlZCgpIHtcbiAgICAgICAgYXR0cih0aGlzLnBhbmVsIHx8IHRoaXMuJGVsLCAncm9sZScsIHRoaXMucm9sZSk7XG5cbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheSkge1xuICAgICAgICAgICAgYXR0cih0aGlzLnBhbmVsIHx8IHRoaXMuJGVsLCAnYXJpYS1tb2RhbCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGJlZm9yZURpc2Nvbm5lY3QoKSB7XG4gICAgICAgIGlmIChpbmNsdWRlcyhhY3RpdmUsIHRoaXMpKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUVsZW1lbnQodGhpcy4kZWwsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZXZlbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdjbGljaycsXG5cbiAgICAgICAgICAgIGRlbGVnYXRlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLnNlbENsb3NlfSxhW2hyZWYqPVwiI1wiXWA7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGN1cnJlbnQsIGRlZmF1bHRQcmV2ZW50ZWQgfSA9IGU7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBoYXNoIH0gPSBjdXJyZW50O1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHRQcmV2ZW50ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgaGFzaCAmJlxuICAgICAgICAgICAgICAgICAgICBpc1NhbWVTaXRlQW5jaG9yKGN1cnJlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICF3aXRoaW4oaGFzaCwgdGhpcy4kZWwpICYmXG4gICAgICAgICAgICAgICAgICAgICQoaGFzaCwgZG9jdW1lbnQuYm9keSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaGVzKGN1cnJlbnQsIHRoaXMuc2VsQ2xvc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndG9nZ2xlJyxcblxuICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgaGFuZGxlcihlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNUb2dnbGVkKCkgPT09IGluY2x1ZGVzKGFjdGl2ZSwgdGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdiZWZvcmVzaG93JyxcblxuICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgaGFuZGxlcihlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVzKGFjdGl2ZSwgdGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdGFjayAmJiBhY3RpdmUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKGFjdGl2ZS5tYXAoKG1vZGFsKSA9PiBtb2RhbC5oaWRlKCkpKS50aGVuKHRoaXMuc2hvdyk7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmUucHVzaCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdzaG93JyxcblxuICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgaGFuZGxlcigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjaykge1xuICAgICAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsICd6SW5kZXgnLCB0b0Zsb2F0KGNzcyh0aGlzLiRlbCwgJ3pJbmRleCcpKSArIGFjdGl2ZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJzID0gW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXkgJiYgcHJldmVudEJhY2tncm91bmRGb2N1cyh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5ICYmIHByZXZlbnRCYWNrZ3JvdW5kU2Nyb2xsKHRoaXMuJGVsKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iZ0Nsb3NlICYmIGxpc3RlbkZvckJhY2tncm91bmRDbG9zZSh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lc2NDbG9zZSAmJiBsaXN0ZW5Gb3JFc2NDbG9zZSh0aGlzKSxcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgb25jZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWwsXG4gICAgICAgICAgICAgICAgICAgICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiBoYW5kbGVycy5mb3JFYWNoKChoYW5kbGVyKSA9PiBoYW5kbGVyICYmIGhhbmRsZXIoKSksXG4gICAgICAgICAgICAgICAgICAgIHsgc2VsZjogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGFkZENsYXNzKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhpcy5jbHNQYWdlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3Nob3duJyxcblxuICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgaGFuZGxlcigpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRm9jdXNhYmxlKHRoaXMuJGVsKSkge1xuICAgICAgICAgICAgICAgICAgICBhdHRyKHRoaXMuJGVsLCAndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXModGhpcy4kZWwsICc6Zm9jdXMtd2l0aGluJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWwuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdoaWRkZW4nLFxuXG4gICAgICAgICAgICBzZWxmOiB0cnVlLFxuXG4gICAgICAgICAgICBoYW5kbGVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlcyhhY3RpdmUsIHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZS5zcGxpY2UoYWN0aXZlLmluZGV4T2YodGhpcyksIDEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ3pJbmRleCcsICcnKTtcblxuICAgICAgICAgICAgICAgIGlmICghYWN0aXZlLnNvbWUoKG1vZGFsKSA9PiBtb2RhbC5jbHNQYWdlID09PSB0aGlzLmNsc1BhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhpcy5jbHNQYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAgIHRvZ2dsZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVG9nZ2xlZCgpID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3coKTtcbiAgICAgICAgfSxcblxuICAgICAgICBzaG93KCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyICYmIHBhcmVudCh0aGlzLiRlbCkgIT09IHRoaXMuY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgYXBwZW5kKHRoaXMuY29udGFpbmVyLCB0aGlzLiRlbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5zaG93KCkudGhlbihyZXNvbHZlKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b2dnbGVFbGVtZW50KHRoaXMuJGVsLCB0cnVlLCBhbmltYXRlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBoaWRlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLiRlbCwgZmFsc2UsIGFuaW1hdGUpO1xuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG5mdW5jdGlvbiBhbmltYXRlKGVsLCBzaG93LCB7IHRyYW5zaXRpb25FbGVtZW50LCBfdG9nZ2xlIH0pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgICAgb25jZShlbCwgJ3Nob3cgaGlkZScsICgpID0+IHtcbiAgICAgICAgICAgIGVsLl9yZWplY3Q/LigpO1xuICAgICAgICAgICAgZWwuX3JlamVjdCA9IHJlamVjdDtcblxuICAgICAgICAgICAgX3RvZ2dsZShlbCwgc2hvdyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9mZiA9IG9uY2UoXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbkVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ3RyYW5zaXRpb25zdGFydCcsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvbmNlKHRyYW5zaXRpb25FbGVtZW50LCAndHJhbnNpdGlvbmVuZCB0cmFuc2l0aW9uY2FuY2VsJywgcmVzb2x2ZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7IHNlbGY6IHRydWUgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBvZmYoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCB0b01zKGNzcyh0cmFuc2l0aW9uRWxlbWVudCwgJ3RyYW5zaXRpb25EdXJhdGlvbicpKSk7XG4gICAgICAgIH0pXG4gICAgKS50aGVuKCgpID0+IGRlbGV0ZSBlbC5fcmVqZWN0KTtcbn1cblxuZnVuY3Rpb24gdG9Ncyh0aW1lKSB7XG4gICAgcmV0dXJuIHRpbWUgPyAoZW5kc1dpdGgodGltZSwgJ21zJykgPyB0b0Zsb2F0KHRpbWUpIDogdG9GbG9hdCh0aW1lKSAqIDEwMDApIDogMDtcbn1cblxuZnVuY3Rpb24gcHJldmVudEJhY2tncm91bmRGb2N1cyhtb2RhbCkge1xuICAgIHJldHVybiBvbihkb2N1bWVudCwgJ2ZvY3VzaW4nLCAoZSkgPT4ge1xuICAgICAgICBpZiAobGFzdChhY3RpdmUpID09PSBtb2RhbCAmJiAhd2l0aGluKGUudGFyZ2V0LCBtb2RhbC4kZWwpKSB7XG4gICAgICAgICAgICBtb2RhbC4kZWwuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBsaXN0ZW5Gb3JCYWNrZ3JvdW5kQ2xvc2UobW9kYWwpIHtcbiAgICByZXR1cm4gb24oZG9jdW1lbnQsIHBvaW50ZXJEb3duLCAoeyB0YXJnZXQgfSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBsYXN0KGFjdGl2ZSkgIT09IG1vZGFsIHx8XG4gICAgICAgICAgICAobW9kYWwub3ZlcmxheSAmJiAhd2l0aGluKHRhcmdldCwgbW9kYWwuJGVsKSkgfHxcbiAgICAgICAgICAgIHdpdGhpbih0YXJnZXQsIG1vZGFsLnBhbmVsKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9uY2UoXG4gICAgICAgICAgICBkb2N1bWVudCxcbiAgICAgICAgICAgIGAke3BvaW50ZXJVcH0gJHtwb2ludGVyQ2FuY2VsfSBzY3JvbGxgLFxuICAgICAgICAgICAgKHsgZGVmYXVsdFByZXZlbnRlZCwgdHlwZSwgdGFyZ2V0OiBuZXdUYXJnZXQgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCAmJiB0eXBlID09PSBwb2ludGVyVXAgJiYgdGFyZ2V0ID09PSBuZXdUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGxpc3RlbkZvckVzY0Nsb3NlKG1vZGFsKSB7XG4gICAgcmV0dXJuIG9uKGRvY3VtZW50LCAna2V5ZG93bicsIChlKSA9PiB7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3ICYmIGxhc3QoYWN0aXZlKSA9PT0gbW9kYWwpIHtcbiAgICAgICAgICAgIG1vZGFsLmhpZGUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0IE1vZGFsIGZyb20gJy4uL21peGluL21vZGFsJztcbmltcG9ydCB7XG4gICAgJCxcbiAgICBhZGRDbGFzcyxcbiAgICBjc3MsXG4gICAgRGVmZXJyZWQsXG4gICAgaGFzQ2xhc3MsXG4gICAgaGVpZ2h0LFxuICAgIGh0bWwsXG4gICAgaXNTdHJpbmcsXG4gICAgb24sXG4gICAgcmVtb3ZlQ2xhc3MsXG59IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgaW5zdGFsbCxcblxuICAgIG1peGluczogW01vZGFsXSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgY2xzUGFnZTogJ3VrLW1vZGFsLXBhZ2UnLFxuICAgICAgICBzZWxQYW5lbDogJy51ay1tb2RhbC1kaWFsb2cnLFxuICAgICAgICBzZWxDbG9zZTpcbiAgICAgICAgICAgICcudWstbW9kYWwtY2xvc2UsIC51ay1tb2RhbC1jbG9zZS1kZWZhdWx0LCAudWstbW9kYWwtY2xvc2Utb3V0c2lkZSwgLnVrLW1vZGFsLWNsb3NlLWZ1bGwnLFxuICAgIH0sXG5cbiAgICBldmVudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3Nob3cnLFxuXG4gICAgICAgICAgICBzZWxmOiB0cnVlLFxuXG4gICAgICAgICAgICBoYW5kbGVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChoYXNDbGFzcyh0aGlzLnBhbmVsLCAndWstbWFyZ2luLWF1dG8tdmVydGljYWwnKSkge1xuICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgJ3VrLWZsZXgnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaGVpZ2h0KHRoaXMuJGVsKTsgLy8gZm9yY2UgcmVmbG93XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdoaWRkZW4nLFxuXG4gICAgICAgICAgICBzZWxmOiB0cnVlLFxuXG4gICAgICAgICAgICBoYW5kbGVyKCkge1xuICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ2Rpc3BsYXknLCAnJyk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy4kZWwsICd1ay1mbGV4Jyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF0sXG59O1xuXG5mdW5jdGlvbiBpbnN0YWxsKHsgbW9kYWwgfSkge1xuICAgIG1vZGFsLmRpYWxvZyA9IGZ1bmN0aW9uIChjb250ZW50LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IG1vZGFsKFxuICAgICAgICAgICAgYDxkaXYgY2xhc3M9XCJ1ay1tb2RhbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1ay1tb2RhbC1kaWFsb2dcIj4ke2NvbnRlbnR9PC9kaXY+XG4gICAgICAgICAgICAgPC9kaXY+YCxcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcblxuICAgICAgICBkaWFsb2cuc2hvdygpO1xuXG4gICAgICAgIG9uKFxuICAgICAgICAgICAgZGlhbG9nLiRlbCxcbiAgICAgICAgICAgICdoaWRkZW4nLFxuICAgICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIGRpYWxvZy4kZGVzdHJveSh0cnVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IHNlbGY6IHRydWUgfVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBkaWFsb2c7XG4gICAgfTtcblxuICAgIG1vZGFsLmFsZXJ0ID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG9wZW5EaWFsb2coXG4gICAgICAgICAgICAoeyBpMThuIH0pID0+IGA8ZGl2IGNsYXNzPVwidWstbW9kYWwtYm9keVwiPiR7XG4gICAgICAgICAgICAgICAgaXNTdHJpbmcobWVzc2FnZSkgPyBtZXNzYWdlIDogaHRtbChtZXNzYWdlKVxuICAgICAgICAgICAgfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVrLW1vZGFsLWZvb3RlciB1ay10ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeSB1ay1tb2RhbC1jbG9zZVwiIGF1dG9mb2N1cz4ke1xuICAgICAgICAgICAgICAgICAgICBpMThuLm9rXG4gICAgICAgICAgICAgICAgfTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+YCxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAoZGVmZXJyZWQpID0+IGRlZmVycmVkLnJlc29sdmUoKVxuICAgICAgICApO1xuICAgIH07XG5cbiAgICBtb2RhbC5jb25maXJtID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG9wZW5EaWFsb2coXG4gICAgICAgICAgICAoeyBpMThuIH0pID0+IGA8Zm9ybT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWstbW9kYWwtYm9keVwiPiR7aXNTdHJpbmcobWVzc2FnZSkgPyBtZXNzYWdlIDogaHRtbChtZXNzYWdlKX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWstbW9kYWwtZm9vdGVyIHVrLXRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInVrLWJ1dHRvbiB1ay1idXR0b24tZGVmYXVsdCB1ay1tb2RhbC1jbG9zZVwiIHR5cGU9XCJidXR0b25cIj4ke1xuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bi5jYW5jZWxcbiAgICAgICAgICAgICAgICAgICAgfTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidWstYnV0dG9uIHVrLWJ1dHRvbi1wcmltYXJ5XCIgYXV0b2ZvY3VzPiR7aTE4bi5va308L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZm9ybT5gLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIChkZWZlcnJlZCkgPT4gZGVmZXJyZWQucmVqZWN0KClcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgbW9kYWwucHJvbXB0ID0gZnVuY3Rpb24gKG1lc3NhZ2UsIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBvcGVuRGlhbG9nKFxuICAgICAgICAgICAgKHsgaTE4biB9KSA9PiBgPGZvcm0gY2xhc3M9XCJ1ay1mb3JtLXN0YWNrZWRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWstbW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JHtpc1N0cmluZyhtZXNzYWdlKSA/IG1lc3NhZ2UgOiBodG1sKG1lc3NhZ2UpfTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInVrLWlucHV0XCIgdmFsdWU9XCIke3ZhbHVlIHx8ICcnfVwiIGF1dG9mb2N1cz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWstbW9kYWwtZm9vdGVyIHVrLXRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInVrLWJ1dHRvbiB1ay1idXR0b24tZGVmYXVsdCB1ay1tb2RhbC1jbG9zZVwiIHR5cGU9XCJidXR0b25cIj4ke1xuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bi5jYW5jZWxcbiAgICAgICAgICAgICAgICAgICAgfTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidWstYnV0dG9uIHVrLWJ1dHRvbi1wcmltYXJ5XCI+JHtpMThuLm9rfTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPmAsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgKGRlZmVycmVkKSA9PiBkZWZlcnJlZC5yZXNvbHZlKG51bGwpLFxuICAgICAgICAgICAgKGRpYWxvZykgPT4gJCgnaW5wdXQnLCBkaWFsb2cuJGVsKS52YWx1ZVxuICAgICAgICApO1xuICAgIH07XG5cbiAgICBtb2RhbC5pMThuID0ge1xuICAgICAgICBvazogJ09rJyxcbiAgICAgICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb3BlbkRpYWxvZyh0bXBsLCBvcHRpb25zLCBoaWRlRm4sIHN1Ym1pdEZuKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBiZ0Nsb3NlOiBmYWxzZSxcbiAgICAgICAgICAgIGVzY0Nsb3NlOiB0cnVlLFxuICAgICAgICAgICAgcm9sZTogJ2FsZXJ0ZGlhbG9nJyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBpMThuOiB7IC4uLm1vZGFsLmkxOG4sIC4uLm9wdGlvbnM/LmkxOG4gfSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBkaWFsb2cgPSBtb2RhbC5kaWFsb2codG1wbChvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG5cbiAgICAgICAgbGV0IHJlc29sdmVkID0gZmFsc2U7XG5cbiAgICAgICAgb24oZGlhbG9nLiRlbCwgJ3N1Ym1pdCcsICdmb3JtJywgKGUpID0+IHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoc3VibWl0Rm4/LihkaWFsb2cpKTtcbiAgICAgICAgICAgIHJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGRpYWxvZy5oaWRlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG9uKGRpYWxvZy4kZWwsICdoaWRlJywgKCkgPT4gIXJlc29sdmVkICYmIGhpZGVGbihkZWZlcnJlZCkpO1xuXG4gICAgICAgIGRlZmVycmVkLnByb21pc2UuZGlhbG9nID0gZGlhbG9nO1xuXG4gICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlO1xuICAgIH1cbn1cbiIsImltcG9ydCBBY2NvcmRpb24gZnJvbSAnLi9hY2NvcmRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgZXh0ZW5kczogQWNjb3JkaW9uLFxuXG4gICAgZGF0YToge1xuICAgICAgICB0YXJnZXRzOiAnPiAudWstcGFyZW50JyxcbiAgICAgICAgdG9nZ2xlOiAnPiBhJyxcbiAgICAgICAgY29udGVudDogJz4gdWwnLFxuICAgIH0sXG59O1xuIiwiaW1wb3J0IERyb3BuYXYgZnJvbSAnLi9kcm9wbmF2JztcbmltcG9ydCB7ICQkLCBjc3MsIGhhc0NsYXNzIH0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBleHRlbmRzOiBEcm9wbmF2LFxuXG4gICAgZGF0YToge1xuICAgICAgICBjbHNEcm9wOiAndWstbmF2YmFyLWRyb3Bkb3duJyxcbiAgICAgICAgc2VsTmF2SXRlbTpcbiAgICAgICAgICAgICcudWstbmF2YmFyLW5hdiA+IGxpID4gYSxhLnVrLW5hdmJhci1pdGVtLGJ1dHRvbi51ay1uYXZiYXItaXRlbSwudWstbmF2YmFyLWl0ZW0gYSwudWstbmF2YmFyLWl0ZW0gYnV0dG9uLC51ay1uYXZiYXItdG9nZ2xlJywgLy8gU2ltcGxpZnkgd2l0aCA6d2hlcmUoKSBzZWxlY3RvciBvbmNlIGJyb3dzZXIgdGFyZ2V0IGlzIFNhZmFyaSAxNCtcbiAgICB9LFxuXG4gICAgd2F0Y2g6IHtcbiAgICAgICAgaXRlbXMoKSB7XG4gICAgICAgICAgICBjb25zdCBqdXN0aWZ5ID0gaGFzQ2xhc3ModGhpcy4kZWwsICd1ay1uYXZiYXItanVzdGlmeScpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgJCQoXG4gICAgICAgICAgICAgICAgJy51ay1uYXZiYXItbmF2LCAudWstbmF2YmFyLWxlZnQsIC51ay1uYXZiYXItcmlnaHQnLFxuICAgICAgICAgICAgICAgIHRoaXMuJGVsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgY3NzKFxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICdmbGV4R3JvdycsXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJCQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLnVrLW5hdmJhci1uYXYgPiBsaSA+IGEsIC51ay1uYXZiYXItaXRlbSwgLnVrLW5hdmJhci10b2dnbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9LFxufTtcbiIsImltcG9ydCBNb2RhbCBmcm9tICcuLi9taXhpbi9tb2RhbCc7XG5pbXBvcnQgeyBzd2lwZSB9IGZyb20gJy4uL2FwaS9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge1xuICAgICQsXG4gICAgYWRkQ2xhc3MsXG4gICAgYXBwZW5kLFxuICAgIGNzcyxcbiAgICBlbmRzV2l0aCxcbiAgICBoYXNDbGFzcyxcbiAgICBoZWlnaHQsXG4gICAgaXNWaXNpYmxlLFxuICAgIHBhcmVudCxcbiAgICByZW1vdmVDbGFzcyxcbiAgICB1bndyYXAsXG4gICAgd3JhcEFsbCxcbn0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBtaXhpbnM6IFtNb2RhbF0sXG5cbiAgICBhcmdzOiAnbW9kZScsXG5cbiAgICBwcm9wczoge1xuICAgICAgICBtb2RlOiBTdHJpbmcsXG4gICAgICAgIGZsaXA6IEJvb2xlYW4sXG4gICAgICAgIG92ZXJsYXk6IEJvb2xlYW4sXG4gICAgICAgIHN3aXBpbmc6IEJvb2xlYW4sXG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgbW9kZTogJ3NsaWRlJyxcbiAgICAgICAgZmxpcDogZmFsc2UsXG4gICAgICAgIG92ZXJsYXk6IGZhbHNlLFxuICAgICAgICBjbHNQYWdlOiAndWstb2ZmY2FudmFzLXBhZ2UnLFxuICAgICAgICBjbHNDb250YWluZXI6ICd1ay1vZmZjYW52YXMtY29udGFpbmVyJyxcbiAgICAgICAgc2VsUGFuZWw6ICcudWstb2ZmY2FudmFzLWJhcicsXG4gICAgICAgIGNsc0ZsaXA6ICd1ay1vZmZjYW52YXMtZmxpcCcsXG4gICAgICAgIGNsc0NvbnRhaW5lckFuaW1hdGlvbjogJ3VrLW9mZmNhbnZhcy1jb250YWluZXItYW5pbWF0aW9uJyxcbiAgICAgICAgY2xzU2lkZWJhckFuaW1hdGlvbjogJ3VrLW9mZmNhbnZhcy1iYXItYW5pbWF0aW9uJyxcbiAgICAgICAgY2xzTW9kZTogJ3VrLW9mZmNhbnZhcycsXG4gICAgICAgIGNsc092ZXJsYXk6ICd1ay1vZmZjYW52YXMtb3ZlcmxheScsXG4gICAgICAgIHNlbENsb3NlOiAnLnVrLW9mZmNhbnZhcy1jbG9zZScsXG4gICAgICAgIGNvbnRhaW5lcjogZmFsc2UsXG4gICAgICAgIHN3aXBpbmc6IHRydWUsXG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIGNsc0ZsaXAoeyBmbGlwLCBjbHNGbGlwIH0pIHtcbiAgICAgICAgICAgIHJldHVybiBmbGlwID8gY2xzRmxpcCA6ICcnO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNsc092ZXJsYXkoeyBvdmVybGF5LCBjbHNPdmVybGF5IH0pIHtcbiAgICAgICAgICAgIHJldHVybiBvdmVybGF5ID8gY2xzT3ZlcmxheSA6ICcnO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNsc01vZGUoeyBtb2RlLCBjbHNNb2RlIH0pIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtjbHNNb2RlfS0ke21vZGV9YDtcbiAgICAgICAgfSxcblxuICAgICAgICBjbHNTaWRlYmFyQW5pbWF0aW9uKHsgbW9kZSwgY2xzU2lkZWJhckFuaW1hdGlvbiB9KSB7XG4gICAgICAgICAgICByZXR1cm4gbW9kZSA9PT0gJ25vbmUnIHx8IG1vZGUgPT09ICdyZXZlYWwnID8gJycgOiBjbHNTaWRlYmFyQW5pbWF0aW9uO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNsc0NvbnRhaW5lckFuaW1hdGlvbih7IG1vZGUsIGNsc0NvbnRhaW5lckFuaW1hdGlvbiB9KSB7XG4gICAgICAgICAgICByZXR1cm4gbW9kZSAhPT0gJ3B1c2gnICYmIG1vZGUgIT09ICdyZXZlYWwnID8gJycgOiBjbHNDb250YWluZXJBbmltYXRpb247XG4gICAgICAgIH0sXG5cbiAgICAgICAgdHJhbnNpdGlvbkVsZW1lbnQoeyBtb2RlIH0pIHtcbiAgICAgICAgICAgIHJldHVybiBtb2RlID09PSAncmV2ZWFsJyA/IHBhcmVudCh0aGlzLnBhbmVsKSA6IHRoaXMucGFuZWw7XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIG9ic2VydmU6IHN3aXBlKHsgZmlsdGVyOiAoeyBzd2lwaW5nIH0pID0+IHN3aXBpbmcgfSksXG5cbiAgICB1cGRhdGU6IHtcbiAgICAgICAgcmVhZCgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVG9nZ2xlZCgpICYmICFpc1Zpc2libGUodGhpcy4kZWwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZSddLFxuICAgIH0sXG5cbiAgICBldmVudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3RvdWNobW92ZScsXG5cbiAgICAgICAgICAgIHNlbGY6IHRydWUsXG4gICAgICAgICAgICBwYXNzaXZlOiBmYWxzZSxcblxuICAgICAgICAgICAgZmlsdGVyKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgICAgICBlLmNhbmNlbGFibGUgJiYgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnc2hvdycsXG5cbiAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3JldmVhbCcgJiYgIWhhc0NsYXNzKHBhcmVudCh0aGlzLnBhbmVsKSwgdGhpcy5jbHNNb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICB3cmFwQWxsKHRoaXMucGFuZWwsICc8ZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyhwYXJlbnQodGhpcy5wYW5lbCksIHRoaXMuY2xzTW9kZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgeyBib2R5LCBzY3JvbGxpbmdFbGVtZW50IH0gPSBkb2N1bWVudDtcblxuICAgICAgICAgICAgICAgIGFkZENsYXNzKGJvZHksIHRoaXMuY2xzQ29udGFpbmVyLCB0aGlzLmNsc0ZsaXApO1xuICAgICAgICAgICAgICAgIGNzcyhib2R5LCAndG91Y2gtYWN0aW9uJywgJ3Bhbi15IHBpbmNoLXpvb20nKTtcbiAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgICAgICAgICAgY3NzKHRoaXMucGFuZWwsICdtYXhXaWR0aCcsIHNjcm9sbGluZ0VsZW1lbnQuY2xpZW50V2lkdGgpO1xuICAgICAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc092ZXJsYXkpO1xuICAgICAgICAgICAgICAgIGFkZENsYXNzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhbmVsLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsc1NpZGViYXJBbmltYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZSA9PT0gJ3JldmVhbCcgPyAnJyA6IHRoaXMuY2xzTW9kZVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBoZWlnaHQoYm9keSk7IC8vIGZvcmNlIHJlZmxvd1xuICAgICAgICAgICAgICAgIGFkZENsYXNzKGJvZHksIHRoaXMuY2xzQ29udGFpbmVyQW5pbWF0aW9uKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY2xzQ29udGFpbmVyQW5pbWF0aW9uICYmIHN1cHByZXNzVXNlclNjYWxlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdoaWRlJyxcblxuICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgaGFuZGxlcigpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmNsc0NvbnRhaW5lckFuaW1hdGlvbik7XG4gICAgICAgICAgICAgICAgY3NzKGRvY3VtZW50LmJvZHksICd0b3VjaC1hY3Rpb24nLCAnJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdoaWRkZW4nLFxuXG4gICAgICAgICAgICBzZWxmOiB0cnVlLFxuXG4gICAgICAgICAgICBoYW5kbGVyKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xzQ29udGFpbmVyQW5pbWF0aW9uICYmIHJlc3VtZVVzZXJTY2FsZSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3JldmVhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdW53cmFwKHRoaXMucGFuZWwpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMucGFuZWwsIHRoaXMuY2xzU2lkZWJhckFuaW1hdGlvbiwgdGhpcy5jbHNNb2RlKTtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLiRlbCwgdGhpcy5jbHNPdmVybGF5KTtcbiAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsICdkaXNwbGF5JywgJycpO1xuICAgICAgICAgICAgICAgIGNzcyh0aGlzLnBhbmVsLCAnbWF4V2lkdGgnLCAnJyk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5jbHNDb250YWluZXIsIHRoaXMuY2xzRmxpcCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdzd2lwZUxlZnQgc3dpcGVSaWdodCcsXG5cbiAgICAgICAgICAgIGhhbmRsZXIoZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVG9nZ2xlZCgpICYmIGVuZHNXaXRoKGUudHlwZSwgJ0xlZnQnKSBeIHRoaXMuZmxpcCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF0sXG59O1xuXG4vLyBDaHJvbWUgaW4gcmVzcG9uc2l2ZSBtb2RlIHpvb21zIHBhZ2UgdXBvbiBvcGVuaW5nIG9mZmNhbnZhc1xuZnVuY3Rpb24gc3VwcHJlc3NVc2VyU2NhbGUoKSB7XG4gICAgZ2V0Vmlld3BvcnQoKS5jb250ZW50ICs9ICcsdXNlci1zY2FsYWJsZT0wJztcbn1cblxuZnVuY3Rpb24gcmVzdW1lVXNlclNjYWxlKCkge1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2V0Vmlld3BvcnQoKTtcbiAgICB2aWV3cG9ydC5jb250ZW50ID0gdmlld3BvcnQuY29udGVudC5yZXBsYWNlKC8sdXNlci1zY2FsYWJsZT0wJC8sICcnKTtcbn1cblxuZnVuY3Rpb24gZ2V0Vmlld3BvcnQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgJCgnbWV0YVtuYW1lPVwidmlld3BvcnRcIl0nLCBkb2N1bWVudC5oZWFkKSB8fCBhcHBlbmQoZG9jdW1lbnQuaGVhZCwgJzxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiPicpXG4gICAgKTtcbn1cbiIsImltcG9ydCBDbGFzcyBmcm9tICcuLi9taXhpbi9jbGFzcyc7XG5pbXBvcnQgeyByZXNpemUgfSBmcm9tICcuLi9hcGkvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgY2xvc2VzdCwgY3NzLCBkaW1lbnNpb25zLCBoZWlnaHQsIGlzVmlzaWJsZSB9IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbWl4aW5zOiBbQ2xhc3NdLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgICAgc2VsQ29udGFpbmVyOiBTdHJpbmcsXG4gICAgICAgIHNlbENvbnRlbnQ6IFN0cmluZyxcbiAgICAgICAgbWluSGVpZ2h0OiBOdW1iZXIsXG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgc2VsQ29udGFpbmVyOiAnLnVrLW1vZGFsJyxcbiAgICAgICAgc2VsQ29udGVudDogJy51ay1tb2RhbC1kaWFsb2cnLFxuICAgICAgICBtaW5IZWlnaHQ6IDE1MCxcbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgY29udGFpbmVyKHsgc2VsQ29udGFpbmVyIH0sICRlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3QoJGVsLCBzZWxDb250YWluZXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbnRlbnQoeyBzZWxDb250ZW50IH0sICRlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3QoJGVsLCBzZWxDb250ZW50KTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgb2JzZXJ2ZTogcmVzaXplKHtcbiAgICAgICAgdGFyZ2V0OiAoeyBjb250YWluZXIsIGNvbnRlbnQgfSkgPT4gW2NvbnRhaW5lciwgY29udGVudF0sXG4gICAgfSksXG5cbiAgICB1cGRhdGU6IHtcbiAgICAgICAgcmVhZCgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250ZW50IHx8ICF0aGlzLmNvbnRhaW5lciB8fCAhaXNWaXNpYmxlKHRoaXMuJGVsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtYXg6IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbkhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KHRoaXMuY29udGFpbmVyKSAtIChkaW1lbnNpb25zKHRoaXMuY29udGVudCkuaGVpZ2h0IC0gaGVpZ2h0KHRoaXMuJGVsKSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcblxuICAgICAgICB3cml0ZSh7IG1heCB9KSB7XG4gICAgICAgICAgICBjc3ModGhpcy4kZWwsIHsgbWluSGVpZ2h0OiB0aGlzLm1pbkhlaWdodCwgbWF4SGVpZ2h0OiBtYXggfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZSddLFxuICAgIH0sXG59O1xuIiwiaW1wb3J0IHsgcmVzaXplIH0gZnJvbSAnLi4vYXBpL29ic2VydmFibGVzJztcbmltcG9ydCB7IGFkZENsYXNzLCBEaW1lbnNpb25zLCBoZWlnaHQsIGlzVmlzaWJsZSwgcGFyZW50LCB3aWR0aCB9IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IFsnd2lkdGgnLCAnaGVpZ2h0J10sXG5cbiAgICBjb25uZWN0ZWQoKSB7XG4gICAgICAgIGFkZENsYXNzKHRoaXMuJGVsLCAndWstcmVzcG9uc2l2ZS13aWR0aCcpO1xuICAgIH0sXG5cbiAgICBvYnNlcnZlOiByZXNpemUoe1xuICAgICAgICB0YXJnZXQ6ICh7ICRlbCB9KSA9PiBbJGVsLCBwYXJlbnQoJGVsKV0sXG4gICAgfSksXG5cbiAgICB1cGRhdGU6IHtcbiAgICAgICAgcmVhZCgpIHtcbiAgICAgICAgICAgIHJldHVybiBpc1Zpc2libGUodGhpcy4kZWwpICYmIHRoaXMud2lkdGggJiYgdGhpcy5oZWlnaHRcbiAgICAgICAgICAgICAgICA/IHsgd2lkdGg6IHdpZHRoKHBhcmVudCh0aGlzLiRlbCkpLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0IH1cbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICB9LFxuXG4gICAgICAgIHdyaXRlKGRpbSkge1xuICAgICAgICAgICAgaGVpZ2h0KFxuICAgICAgICAgICAgICAgIHRoaXMuJGVsLFxuICAgICAgICAgICAgICAgIERpbWVuc2lvbnMuY29udGFpbihcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkaW1cbiAgICAgICAgICAgICAgICApLmhlaWdodFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IFsncmVzaXplJ10sXG4gICAgfSxcbn07XG4iLCJpbXBvcnQge1xuICAgICQsXG4gICAgZ2V0VGFyZ2V0ZWRFbGVtZW50LFxuICAgIGlzU2FtZVNpdGVBbmNob3IsXG4gICAgb2ZmLFxuICAgIG9uLFxuICAgIHNjcm9sbEludG9WaWV3LFxuICAgIHRyaWdnZXIsXG4gICAgd2l0aGluLFxufSBmcm9tICd1aWtpdC11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHByb3BzOiB7XG4gICAgICAgIG9mZnNldDogTnVtYmVyLFxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIG9mZnNldDogMCxcbiAgICB9LFxuXG4gICAgY29ubmVjdGVkKCkge1xuICAgICAgICByZWdpc3RlckNsaWNrKHRoaXMpO1xuICAgIH0sXG5cbiAgICBkaXNjb25uZWN0ZWQoKSB7XG4gICAgICAgIHVucmVnaXN0ZXJDbGljayh0aGlzKTtcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgICBhc3luYyBzY3JvbGxUbyhlbCkge1xuICAgICAgICAgICAgZWwgPSAoZWwgJiYgJChlbCkpIHx8IGRvY3VtZW50LmJvZHk7XG5cbiAgICAgICAgICAgIGlmICh0cmlnZ2VyKHRoaXMuJGVsLCAnYmVmb3Jlc2Nyb2xsJywgW3RoaXMsIGVsXSkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBzY3JvbGxJbnRvVmlldyhlbCwgeyBvZmZzZXQ6IHRoaXMub2Zmc2V0IH0pO1xuICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdzY3JvbGxlZCcsIFt0aGlzLCBlbF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG5jb25zdCBpbnN0YW5jZXMgPSBuZXcgU2V0KCk7XG5mdW5jdGlvbiByZWdpc3RlckNsaWNrKGNtcCkge1xuICAgIGlmICghaW5zdGFuY2VzLnNpemUpIHtcbiAgICAgICAgb24oZG9jdW1lbnQsICdjbGljaycsIGNsaWNrSGFuZGxlcik7XG4gICAgfVxuXG4gICAgaW5zdGFuY2VzLmFkZChjbXApO1xufVxuXG5mdW5jdGlvbiB1bnJlZ2lzdGVyQ2xpY2soY21wKSB7XG4gICAgaW5zdGFuY2VzLmRlbGV0ZShjbXApO1xuXG4gICAgaWYgKCFpbnN0YW5jZXMuc2l6ZSkge1xuICAgICAgICBvZmYoZG9jdW1lbnQsICdjbGljaycsIGNsaWNrSGFuZGxlcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjbGlja0hhbmRsZXIoZSkge1xuICAgIGlmIChlLmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7XG4gICAgICAgIGlmICh3aXRoaW4oZS50YXJnZXQsIGluc3RhbmNlLiRlbCkgJiYgaXNTYW1lU2l0ZUFuY2hvcihpbnN0YW5jZS4kZWwpKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYgIT09IGluc3RhbmNlLiRlbC5ocmVmKSB7XG4gICAgICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt9LCAnJywgaW5zdGFuY2UuJGVsLmhyZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5zdGFuY2Uuc2Nyb2xsVG8oZ2V0VGFyZ2V0ZWRFbGVtZW50KGluc3RhbmNlLiRlbCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaW50ZXJzZWN0aW9uIH0gZnJvbSAnLi4vYXBpL29ic2VydmFibGVzJztcbmltcG9ydCB7XG4gICAgJCQsXG4gICAgY3NzLFxuICAgIGZpbHRlcixcbiAgICBkYXRhIGFzIGdldERhdGEsXG4gICAgb25jZSxcbiAgICByZW1vdmVDbGFzcyxcbiAgICByZW1vdmVDbGFzc2VzLFxuICAgIHRvZ2dsZUNsYXNzLFxuICAgIHRyaWdnZXIsXG59IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgYXJnczogJ2NscycsXG5cbiAgICBwcm9wczoge1xuICAgICAgICBjbHM6IFN0cmluZyxcbiAgICAgICAgdGFyZ2V0OiBTdHJpbmcsXG4gICAgICAgIGhpZGRlbjogQm9vbGVhbixcbiAgICAgICAgbWFyZ2luOiBTdHJpbmcsXG4gICAgICAgIHJlcGVhdDogQm9vbGVhbixcbiAgICAgICAgZGVsYXk6IE51bWJlcixcbiAgICB9LFxuXG4gICAgZGF0YTogKCkgPT4gKHtcbiAgICAgICAgY2xzOiAnJyxcbiAgICAgICAgdGFyZ2V0OiBmYWxzZSxcbiAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICBtYXJnaW46ICctMXB4JyxcbiAgICAgICAgcmVwZWF0OiBmYWxzZSxcbiAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgIGluVmlld0NsYXNzOiAndWstc2Nyb2xsc3B5LWludmlldycsXG4gICAgfSksXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgICBlbGVtZW50cyh7IHRhcmdldCB9LCAkZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQgPyAkJCh0YXJnZXQsICRlbCkgOiBbJGVsXTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgd2F0Y2g6IHtcbiAgICAgICAgZWxlbWVudHMoZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIC8vIHVzZSBgb3BhY2l0eTowYCBpbnN0ZWFkIG9mIGB2aXNpYmlsaXR5OmhpZGRlbmAgdG8gbWFrZSBjb250ZW50IGZvY3VzYWJsZSB3aXRoIGtleWJvYXJkXG4gICAgICAgICAgICAgICAgY3NzKGZpbHRlcihlbGVtZW50cywgYDpub3QoLiR7dGhpcy5pblZpZXdDbGFzc30pYCksICdvcGFjaXR5JywgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGNvbm5lY3RlZCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50RGF0YSA9IG5ldyBNYXAoKTtcbiAgICB9LFxuXG4gICAgZGlzY29ubmVjdGVkKCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtlbCwgc3RhdGVdIG9mIHRoaXMuZWxlbWVudERhdGEuZW50cmllcygpKSB7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyhlbCwgdGhpcy5pblZpZXdDbGFzcywgc3RhdGU/LmNscyB8fCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuZWxlbWVudERhdGE7XG4gICAgfSxcblxuICAgIG9ic2VydmU6IGludGVyc2VjdGlvbih7XG4gICAgICAgIHRhcmdldDogKHsgZWxlbWVudHMgfSkgPT4gZWxlbWVudHMsXG4gICAgICAgIGhhbmRsZXIocmVjb3Jkcykge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnREYXRhO1xuICAgICAgICAgICAgZm9yIChjb25zdCB7IHRhcmdldDogZWwsIGlzSW50ZXJzZWN0aW5nIH0gb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgICAgIGlmICghZWxlbWVudHMuaGFzKGVsKSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5zZXQoZWwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogZ2V0RGF0YShlbCwgJ3VrLXNjcm9sbHNweS1jbGFzcycpIHx8IHRoaXMuY2xzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IGVsZW1lbnRzLmdldChlbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlcGVhdCAmJiBzdGF0ZS5zaG93KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0YXRlLnNob3cgPSBpc0ludGVyc2VjdGluZztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy4kZW1pdCgpO1xuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zOiAoaW5zdGFuY2UpID0+ICh7IHJvb3RNYXJnaW46IGluc3RhbmNlLm1hcmdpbiB9KSxcbiAgICAgICAgYXJnczogeyBpbnRlcnNlY3Rpbmc6IGZhbHNlIH0sXG4gICAgfSksXG5cbiAgICB1cGRhdGU6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgd3JpdGUoZGF0YSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2VsLCBzdGF0ZV0gb2YgdGhpcy5lbGVtZW50RGF0YS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNob3cgJiYgIXN0YXRlLmludmlldyAmJiAhc3RhdGUucXVldWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5xdWV1ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnByb21pc2UgPSAoZGF0YS5wcm9taXNlIHx8IFByb21pc2UucmVzb2x2ZSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRoaXMuZGVsYXkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlKGVsLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5xdWV1ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RhdGUuc2hvdyAmJiBzdGF0ZS5pbnZpZXcgJiYgIXN0YXRlLnF1ZXVlZCAmJiB0aGlzLnJlcGVhdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGUoZWwsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgXSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgdG9nZ2xlKGVsLCBpbnZpZXcpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5lbGVtZW50RGF0YS5nZXQoZWwpO1xuXG4gICAgICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGF0ZS5vZmY/LigpO1xuXG4gICAgICAgICAgICBjc3MoZWwsICdvcGFjaXR5JywgIWludmlldyAmJiB0aGlzLmhpZGRlbiA/IDAgOiAnJyk7XG5cbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGVsLCB0aGlzLmluVmlld0NsYXNzLCBpbnZpZXcpO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoZWwsIHN0YXRlLmNscyk7XG5cbiAgICAgICAgICAgIGlmICgvXFxidWstYW5pbWF0aW9uLS8udGVzdChzdGF0ZS5jbHMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQW5pbWF0aW9uQ2xhc3NlcyA9ICgpID0+IHJlbW92ZUNsYXNzZXMoZWwsICd1ay1hbmltYXRpb24tW1xcXFx3LV0rJyk7XG4gICAgICAgICAgICAgICAgaWYgKGludmlldykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5vZmYgPSBvbmNlKGVsLCAnYW5pbWF0aW9uY2FuY2VsIGFuaW1hdGlvbmVuZCcsIHJlbW92ZUFuaW1hdGlvbkNsYXNzZXMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUFuaW1hdGlvbkNsYXNzZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyaWdnZXIoZWwsIGludmlldyA/ICdpbnZpZXcnIDogJ291dHZpZXcnKTtcblxuICAgICAgICAgICAgc3RhdGUuaW52aWV3ID0gaW52aWV3O1xuXG4gICAgICAgICAgICAvLyBjaGFuZ2UgdG8gYHZpc2liaWxpdHk6IGhpZGRlbmAgZG9lcyBub3QgdHJpZ2dlciBvYnNlcnZlcnNcbiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZShlbCk7XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG4iLCJpbXBvcnQgeyBpbnRlcnNlY3Rpb24sIHNjcm9sbCB9IGZyb20gJy4uL2FwaS9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge1xuICAgICQkLFxuICAgIGNsb3Nlc3QsXG4gICAgZ2V0VGFyZ2V0ZWRFbGVtZW50LFxuICAgIGhhc0NsYXNzLFxuICAgIGlzU2FtZVNpdGVBbmNob3IsXG4gICAgaXNWaXNpYmxlLFxuICAgIG9mZnNldCxcbiAgICBvZmZzZXRWaWV3cG9ydCxcbiAgICBzY3JvbGxQYXJlbnRzLFxuICAgIHRvZ2dsZUNsYXNzLFxuICAgIHRyaWdnZXIsXG59IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgICAgY2xzOiBTdHJpbmcsXG4gICAgICAgIGNsb3Nlc3Q6IFN0cmluZyxcbiAgICAgICAgc2Nyb2xsOiBCb29sZWFuLFxuICAgICAgICBvdmVyZmxvdzogQm9vbGVhbixcbiAgICAgICAgb2Zmc2V0OiBOdW1iZXIsXG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgY2xzOiAndWstYWN0aXZlJyxcbiAgICAgICAgY2xvc2VzdDogZmFsc2UsXG4gICAgICAgIHNjcm9sbDogZmFsc2UsXG4gICAgICAgIG92ZXJmbG93OiB0cnVlLFxuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIGxpbmtzKF8sICRlbCkge1xuICAgICAgICAgICAgcmV0dXJuICQkKCdhW2hyZWYqPVwiI1wiXScsICRlbCkuZmlsdGVyKChlbCkgPT4gZWwuaGFzaCAmJiBpc1NhbWVTaXRlQW5jaG9yKGVsKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZWxlbWVudHMoeyBjbG9zZXN0OiBzZWxlY3RvciB9KSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvc2VzdCh0aGlzLmxpbmtzLCBzZWxlY3RvciB8fCAnKicpO1xuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICB3YXRjaDoge1xuICAgICAgICBsaW5rcyhsaW5rcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kY3JlYXRlKCdzY3JvbGwnLCBsaW5rcywgeyBvZmZzZXQ6IHRoaXMub2Zmc2V0IHx8IDAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIG9ic2VydmU6IFtpbnRlcnNlY3Rpb24oKSwgc2Nyb2xsKCldLFxuXG4gICAgdXBkYXRlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlYWQoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMubGlua3MubWFwKGdldFRhcmdldGVkRWxlbWVudCkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHRhcmdldHM7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWxlbmd0aCB8fCAhaXNWaXNpYmxlKHRoaXMuJGVsKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgW3Njcm9sbEVsZW1lbnRdID0gc2Nyb2xsUGFyZW50cyh0YXJnZXRzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IH0gPSBzY3JvbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gb2Zmc2V0Vmlld3BvcnQoc2Nyb2xsRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4ID0gc2Nyb2xsSGVpZ2h0IC0gdmlld3BvcnQuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGxldCBhY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzY3JvbGxUb3AgPT09IG1heCkge1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmUgPSBsZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCh0YXJnZXRzW2ldKS50b3AgLSB2aWV3cG9ydC50b3AgLSB0aGlzLm9mZnNldCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9ICtpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZSA9PT0gZmFsc2UgJiYgdGhpcy5vdmVyZmxvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7IGFjdGl2ZSB9O1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgd3JpdGUoeyBhY3RpdmUgfSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSBhY3RpdmUgIT09IGZhbHNlICYmICFoYXNDbGFzcyh0aGlzLmVsZW1lbnRzW2FjdGl2ZV0sIHRoaXMuY2xzKTtcblxuICAgICAgICAgICAgICAgIHRoaXMubGlua3MuZm9yRWFjaCgoZWwpID0+IGVsLmJsdXIoKSk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHRoaXMuZWxlbWVudHNbaV0sIHRoaXMuY2xzLCAraSA9PT0gYWN0aXZlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHRoaXMuJGVsLCAnYWN0aXZlJywgW2FjdGl2ZSwgdGhpcy5lbGVtZW50c1thY3RpdmVdXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZXZlbnRzOiBbJ3Njcm9sbCcsICdyZXNpemUnXSxcbiAgICAgICAgfSxcbiAgICBdLFxufTtcbiIsImltcG9ydCBDbGFzcyBmcm9tICcuLi9taXhpbi9jbGFzcyc7XG5pbXBvcnQgTWVkaWEgZnJvbSAnLi4vbWl4aW4vbWVkaWEnO1xuaW1wb3J0IHsgcmVzaXplLCBzY3JvbGwgfSBmcm9tICcuLi9hcGkvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtcbiAgICAkLFxuICAgIGFkZENsYXNzLFxuICAgIGFmdGVyLFxuICAgIEFuaW1hdGlvbixcbiAgICBiZWZvcmUsXG4gICAgY2xhbXAsXG4gICAgY3NzLFxuICAgIGhlaWdodCBhcyBnZXRIZWlnaHQsXG4gICAgb2Zmc2V0IGFzIGdldE9mZnNldCxcbiAgICBpbnRlcnNlY3RSZWN0LFxuICAgIGlzTnVtZXJpYyxcbiAgICBpc1N0cmluZyxcbiAgICBpc1Zpc2libGUsXG4gICAgbm9vcCxcbiAgICBvZmZzZXRQb3NpdGlvbixcbiAgICBwYXJlbnQsXG4gICAgcXVlcnksXG4gICAgcmVtb3ZlLFxuICAgIHJlbW92ZUNsYXNzLFxuICAgIHJlcGxhY2VDbGFzcyxcbiAgICB0b0Zsb2F0LFxuICAgIHRvZ2dsZUNsYXNzLFxuICAgIHRvUHgsXG4gICAgdHJpZ2dlcixcbiAgICB3aXRoaW4sXG59IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbWl4aW5zOiBbQ2xhc3MsIE1lZGlhXSxcblxuICAgIHByb3BzOiB7XG4gICAgICAgIHBvc2l0aW9uOiBTdHJpbmcsXG4gICAgICAgIHRvcDogbnVsbCxcbiAgICAgICAgYm90dG9tOiBudWxsLFxuICAgICAgICBzdGFydDogbnVsbCxcbiAgICAgICAgZW5kOiBudWxsLFxuICAgICAgICBvZmZzZXQ6IFN0cmluZyxcbiAgICAgICAgb3ZlcmZsb3dGbGlwOiBCb29sZWFuLFxuICAgICAgICBhbmltYXRpb246IFN0cmluZyxcbiAgICAgICAgY2xzQWN0aXZlOiBTdHJpbmcsXG4gICAgICAgIGNsc0luYWN0aXZlOiBTdHJpbmcsXG4gICAgICAgIGNsc0ZpeGVkOiBTdHJpbmcsXG4gICAgICAgIGNsc0JlbG93OiBTdHJpbmcsXG4gICAgICAgIHNlbFRhcmdldDogU3RyaW5nLFxuICAgICAgICBzaG93T25VcDogQm9vbGVhbixcbiAgICAgICAgdGFyZ2V0T2Zmc2V0OiBOdW1iZXIsXG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgICAgICB0b3A6IGZhbHNlLFxuICAgICAgICBib3R0b206IGZhbHNlLFxuICAgICAgICBzdGFydDogZmFsc2UsXG4gICAgICAgIGVuZDogZmFsc2UsXG4gICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgb3ZlcmZsb3dGbGlwOiBmYWxzZSxcbiAgICAgICAgYW5pbWF0aW9uOiAnJyxcbiAgICAgICAgY2xzQWN0aXZlOiAndWstYWN0aXZlJyxcbiAgICAgICAgY2xzSW5hY3RpdmU6ICcnLFxuICAgICAgICBjbHNGaXhlZDogJ3VrLXN0aWNreS1maXhlZCcsXG4gICAgICAgIGNsc0JlbG93OiAndWstc3RpY2t5LWJlbG93JyxcbiAgICAgICAgc2VsVGFyZ2V0OiAnJyxcbiAgICAgICAgc2hvd09uVXA6IGZhbHNlLFxuICAgICAgICB0YXJnZXRPZmZzZXQ6IGZhbHNlLFxuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgICBzZWxUYXJnZXQoeyBzZWxUYXJnZXQgfSwgJGVsKSB7XG4gICAgICAgICAgICByZXR1cm4gKHNlbFRhcmdldCAmJiAkKHNlbFRhcmdldCwgJGVsKSkgfHwgJGVsO1xuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBjb25uZWN0ZWQoKSB7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBjb2VyY2UodGhpcy5zdGFydCB8fCB0aGlzLnRvcCk7XG4gICAgICAgIHRoaXMuZW5kID0gY29lcmNlKHRoaXMuZW5kIHx8IHRoaXMuYm90dG9tKTtcblxuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgICQoJysgLnVrLXN0aWNreS1wbGFjZWhvbGRlcicsIHRoaXMuJGVsKSB8fFxuICAgICAgICAgICAgJCgnPGRpdiBjbGFzcz1cInVrLXN0aWNreS1wbGFjZWhvbGRlclwiPjwvZGl2PicpO1xuICAgICAgICB0aGlzLmlzRml4ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmUoZmFsc2UpO1xuICAgIH0sXG5cbiAgICBkaXNjb25uZWN0ZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRml4ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5zZWxUYXJnZXQsIHRoaXMuY2xzSW5hY3RpdmUpO1xuICAgICAgICB9XG4gICAgICAgIHJlc2V0KHRoaXMuJGVsKTtcblxuICAgICAgICByZW1vdmUodGhpcy5wbGFjZWhvbGRlcik7XG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBudWxsO1xuICAgIH0sXG5cbiAgICBvYnNlcnZlOiBbXG4gICAgICAgIHJlc2l6ZSh7XG4gICAgICAgICAgICBoYW5kbGVyKCkge1xuICAgICAgICAgICAgICAgICF0aGlzLmlzRml4ZWQgJiYgdGhpcy4kZW1pdCgncmVzaXplJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgcmVzaXplKHsgdGFyZ2V0OiAoKSA9PiBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSB9KSxcbiAgICAgICAgc2Nyb2xsKCksXG4gICAgXSxcblxuICAgIGV2ZW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAncmVzaXplJyxcblxuICAgICAgICAgICAgZWwoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt3aW5kb3csIHdpbmRvdy52aXN1YWxWaWV3cG9ydF07XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3Jlc2l6ZVZpZXdwb3J0Jyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnbG9hZCBoYXNoY2hhbmdlIHBvcHN0YXRlJyxcblxuICAgICAgICAgICAgZWwoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGZpbHRlcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50YXJnZXRPZmZzZXQgIT09IGZhbHNlO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaGFuZGxlcigpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNjcm9sbGluZ0VsZW1lbnQgfSA9IGRvY3VtZW50O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFsb2NhdGlvbi5oYXNoIHx8IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0T2Zmc2V0ID0gZ2V0T2Zmc2V0KCQobG9jYXRpb24uaGFzaCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbE9mZnNldCA9IGdldE9mZnNldCh0aGlzLiRlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNGaXhlZCAmJiBpbnRlcnNlY3RSZWN0KHRhcmdldE9mZnNldCwgZWxPZmZzZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0LnRvcCAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxPZmZzZXQuaGVpZ2h0IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1B4KHRoaXMudGFyZ2V0T2Zmc2V0LCAnaGVpZ2h0JywgdGhpcy5wbGFjZWhvbGRlcikgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvUHgodGhpcy5vZmZzZXQsICdoZWlnaHQnLCB0aGlzLnBsYWNlaG9sZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdLFxuXG4gICAgdXBkYXRlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlYWQoeyBoZWlnaHQsIHdpZHRoLCBtYXJnaW4sIHN0aWNreSB9LCB0eXBlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5hY3RpdmUgPSAhdGhpcy5tYXRjaE1lZGlhIHx8ICFpc1Zpc2libGUodGhpcy4kZWwpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGhpZGUgPSB0aGlzLmlzRml4ZWQgJiYgdHlwZXMuaGFzKCdyZXNpemUnKSAmJiAhc3RpY2t5O1xuICAgICAgICAgICAgICAgIGlmIChoaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZlbnRUcmFuc2l0aW9uKHRoaXMuc2VsVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAoeyBoZWlnaHQsIHdpZHRoIH0gPSBnZXRPZmZzZXQodGhpcy4kZWwpKTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luID0gY3NzKHRoaXMuJGVsLCAnbWFyZ2luJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGhpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSB0b1B4KCcxMDB2aCcsICdoZWlnaHQnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkeW5hbWljVmlld3BvcnQgPSBnZXRIZWlnaHQod2luZG93KTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhTY3JvbGxIZWlnaHQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbEhlaWdodCAtIHZpZXdwb3J0O1xuXG4gICAgICAgICAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vdmVyZmxvd0ZsaXAgJiYgaGVpZ2h0ID4gdmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiA9PT0gJ3RvcCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLmlzRml4ZWQgPyB0aGlzLnBsYWNlaG9sZGVyIDogdGhpcy4kZWw7XG4gICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IHRvUHgodGhpcy5vZmZzZXQsICdoZWlnaHQnLCBzdGlja3kgPyB0aGlzLiRlbCA6IHJlZmVyZW5jZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2JvdHRvbScgJiYgKGhlaWdodCA8IGR5bmFtaWNWaWV3cG9ydCB8fCB0aGlzLm92ZXJmbG93RmxpcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGR5bmFtaWNWaWV3cG9ydCAtIGhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IHRoaXMub3ZlcmZsb3dGbGlwID8gMCA6IE1hdGgubWF4KDAsIGhlaWdodCArIG9mZnNldCAtIHZpZXdwb3J0KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3BPZmZzZXQgPSBnZXRPZmZzZXQocmVmZXJlbmNlRWxlbWVudCkudG9wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsSGVpZ2h0ID0gZ2V0T2Zmc2V0KHRoaXMuJGVsKS5oZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnN0YXJ0ID09PSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0b3BPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcGFyc2VQcm9wKHRoaXMuc3RhcnQsIHRoaXMuJGVsLCB0b3BPZmZzZXQpKSAtIG9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCA9PT0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbWF4U2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICA6IE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VQcm9wKHRoaXMuZW5kLCB0aGlzLiRlbCwgdG9wT2Zmc2V0ICsgaGVpZ2h0LCB0cnVlKSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxIZWlnaHQgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHN0aWNreSA9XG4gICAgICAgICAgICAgICAgICAgIG1heFNjcm9sbEhlaWdodCAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5zaG93T25VcCAmJlxuICAgICAgICAgICAgICAgICAgICBzdGFydCArIG9mZnNldCA9PT0gdG9wT2Zmc2V0ICYmXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVByb3AoJyEqJywgdGhpcy4kZWwsIDAsIHRydWUpIC0gZWxIZWlnaHQgLSBvZmZzZXQgKyBvdmVyZmxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgICBjc3MocGFyZW50KHRoaXMuJGVsKSwgJ292ZXJmbG93WScpID09PSAndmlzaWJsZSc7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgZW5kLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93LFxuICAgICAgICAgICAgICAgICAgICB0b3BPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgZWxIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4sXG4gICAgICAgICAgICAgICAgICAgIHRvcDogb2Zmc2V0UG9zaXRpb24ocmVmZXJlbmNlRWxlbWVudClbMF0sXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgd3JpdGUoeyBoZWlnaHQsIHdpZHRoLCBtYXJnaW4sIG9mZnNldCwgc3RpY2t5IH0pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbmFjdGl2ZSB8fCBzdGlja3kgfHwgIXRoaXMuaXNGaXhlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXNldCh0aGlzLiRlbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdGlja3kpIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gd2lkdGggPSBtYXJnaW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsIHsgcG9zaXRpb246ICdzdGlja3knLCB0b3A6IG9mZnNldCB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB7IHBsYWNlaG9sZGVyIH0gPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgY3NzKHBsYWNlaG9sZGVyLCB7IGhlaWdodCwgd2lkdGgsIG1hcmdpbiB9KTtcblxuICAgICAgICAgICAgICAgIGlmICghd2l0aGluKHBsYWNlaG9sZGVyLCBkb2N1bWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHN0aWNreSA/IGJlZm9yZSA6IGFmdGVyKSh0aGlzLiRlbCwgcGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZScsICdyZXNpemVWaWV3cG9ydCddLFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlYWQoe1xuICAgICAgICAgICAgICAgIHNjcm9sbDogcHJldlNjcm9sbCA9IDAsXG4gICAgICAgICAgICAgICAgZGlyOiBwcmV2RGlyID0gJ2Rvd24nLFxuICAgICAgICAgICAgICAgIG92ZXJmbG93LFxuICAgICAgICAgICAgICAgIG92ZXJmbG93U2Nyb2xsID0gMCxcbiAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICBlbmQsXG4gICAgICAgICAgICB9KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyID0gcHJldlNjcm9sbCA8PSBzY3JvbGwgPyAnZG93bicgOiAndXAnO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyLFxuICAgICAgICAgICAgICAgICAgICBwcmV2RGlyLFxuICAgICAgICAgICAgICAgICAgICBzY3JvbGwsXG4gICAgICAgICAgICAgICAgICAgIHByZXZTY3JvbGwsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudFRvcDogZ2V0T2Zmc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaXNGaXhlZCA/IHRoaXMucGxhY2Vob2xkZXIgOiB0aGlzLiRlbCkub2Zmc2V0UGFyZW50XG4gICAgICAgICAgICAgICAgICAgICkudG9wLFxuICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd1Njcm9sbDogY2xhbXAoXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd1Njcm9sbCArIGNsYW1wKHNjcm9sbCwgc3RhcnQsIGVuZCkgLSBjbGFtcChwcmV2U2Nyb2xsLCBzdGFydCwgZW5kKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd1xuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB3cml0ZShkYXRhLCB0eXBlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU2Nyb2xsVXBkYXRlID0gdHlwZXMuaGFzKCdzY3JvbGwnKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRUaW1lc3RhbXAgPSAwLFxuICAgICAgICAgICAgICAgICAgICBkaXIsXG4gICAgICAgICAgICAgICAgICAgIHByZXZEaXIsXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbCxcbiAgICAgICAgICAgICAgICAgICAgcHJldlNjcm9sbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIHRvcE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICAgIH0gPSBkYXRhO1xuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzY3JvbGwgPCAwIHx8XG4gICAgICAgICAgICAgICAgICAgIChzY3JvbGwgPT09IHByZXZTY3JvbGwgJiYgaXNTY3JvbGxVcGRhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnNob3dPblVwICYmICFpc1Njcm9sbFVwZGF0ZSAmJiAhdGhpcy5pc0ZpeGVkKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBpZiAobm93IC0gaW5pdFRpbWVzdGFtcCA+IDMwMCB8fCBkaXIgIT09IHByZXZEaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5pbml0U2Nyb2xsID0gc2Nyb2xsO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmluaXRUaW1lc3RhbXAgPSBub3c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dPblVwICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmlzRml4ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5hYnMoZGF0YS5pbml0U2Nyb2xsIC0gc2Nyb2xsKSA8PSAzMCAmJlxuICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhwcmV2U2Nyb2xsIC0gc2Nyb2xsKSA8PSAxMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluYWN0aXZlIHx8XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbCA8IHN0YXJ0IHx8XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnNob3dPblVwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2Nyb2xsIDw9IHN0YXJ0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpciA9PT0gJ2Rvd24nICYmIGlzU2Nyb2xsVXBkYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXIgPT09ICd1cCcgJiYgIXRoaXMuaXNGaXhlZCAmJiBzY3JvbGwgPD0gdG9wT2Zmc2V0ICsgaGVpZ2h0KSkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0ZpeGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQW5pbWF0aW9uLmluUHJvZ3Jlc3ModGhpcy4kZWwpICYmIHRvcCA+IHNjcm9sbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuaW1hdGlvbi5jYW5jZWwodGhpcy4kZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbmltYXRpb24gJiYgc2Nyb2xsID4gdG9wT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBbmltYXRpb24uY2FuY2VsKHRoaXMuJGVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFuaW1hdGlvbi5vdXQodGhpcy4kZWwsIHRoaXMuYW5pbWF0aW9uKS50aGVuKCgpID0+IHRoaXMuaGlkZSgpLCBub29wKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRml4ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYW5pbWF0aW9uICYmIHNjcm9sbCA+IHRvcE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBBbmltYXRpb24uY2FuY2VsKHRoaXMuJGVsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIEFuaW1hdGlvbi5pbih0aGlzLiRlbCwgdGhpcy5hbmltYXRpb24pLmNhdGNoKG5vb3ApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZlbnRUcmFuc2l0aW9uKHRoaXMuc2VsVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZScsICdyZXNpemVWaWV3cG9ydCcsICdzY3JvbGwnXSxcbiAgICAgICAgfSxcbiAgICBdLFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgICBzaG93KCkge1xuICAgICAgICAgICAgdGhpcy5pc0ZpeGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICB9LFxuXG4gICAgICAgIGhpZGUoKSB7XG4gICAgICAgICAgICBjb25zdCB7IG9mZnNldCwgc3RpY2t5IH0gPSB0aGlzLl9kYXRhO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmUoZmFsc2UpO1xuICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzRml4ZWQsIHRoaXMuY2xzQmVsb3cpO1xuICAgICAgICAgICAgaWYgKHN0aWNreSkge1xuICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ3RvcCcsIG9mZnNldCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJycsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogJycsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNGaXhlZCA9IGZhbHNlO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgc2Nyb2xsID0gMCxcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyxcbiAgICAgICAgICAgICAgICBvdmVyZmxvd1Njcm9sbCA9IDAsXG4gICAgICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kLFxuICAgICAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgICAgICB0b3BPZmZzZXQsXG4gICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGVsSGVpZ2h0LFxuICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudFRvcCxcbiAgICAgICAgICAgICAgICBzdGlja3ksXG4gICAgICAgICAgICB9ID0gdGhpcy5fZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHN0YXJ0ICE9PSAwIHx8IHNjcm9sbCA+IHN0YXJ0O1xuXG4gICAgICAgICAgICBpZiAoIXN0aWNreSkge1xuICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbiA9ICdmaXhlZCc7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsID4gZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBlbmQgLSBvZmZzZXRQYXJlbnRUb3A7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsIHsgcG9zaXRpb24sIHdpZHRoIH0pO1xuICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ21hcmdpblRvcCcsIDAsICdpbXBvcnRhbnQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG92ZXJmbG93KSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0IC09IG92ZXJmbG93U2Nyb2xsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjc3ModGhpcy4kZWwsICd0b3AnLCBvZmZzZXQpO1xuXG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZShhY3RpdmUpO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoXG4gICAgICAgICAgICAgICAgdGhpcy4kZWwsXG4gICAgICAgICAgICAgICAgdGhpcy5jbHNCZWxvdyxcbiAgICAgICAgICAgICAgICBzY3JvbGwgPiB0b3BPZmZzZXQgKyAoc3RpY2t5ID8gTWF0aC5taW4oaGVpZ2h0LCBlbEhlaWdodCkgOiBoZWlnaHQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzRml4ZWQpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldEFjdGl2ZShhY3RpdmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmFjdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gYWN0aXZlO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJlcGxhY2VDbGFzcyh0aGlzLnNlbFRhcmdldCwgdGhpcy5jbHNJbmFjdGl2ZSwgdGhpcy5jbHNBY3RpdmUpO1xuICAgICAgICAgICAgICAgIHByZXYgIT09IGFjdGl2ZSAmJiB0cmlnZ2VyKHRoaXMuJGVsLCAnYWN0aXZlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcGxhY2VDbGFzcyh0aGlzLnNlbFRhcmdldCwgdGhpcy5jbHNBY3RpdmUsIHRoaXMuY2xzSW5hY3RpdmUpO1xuICAgICAgICAgICAgICAgIHByZXYgIT09IGFjdGl2ZSAmJiB0cmlnZ2VyKHRoaXMuJGVsLCAnaW5hY3RpdmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxuZnVuY3Rpb24gcGFyc2VQcm9wKHZhbHVlLCBlbCwgcHJvcE9mZnNldCwgcGFkZGluZykge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKGlzTnVtZXJpYyh2YWx1ZSkgfHwgKGlzU3RyaW5nKHZhbHVlKSAmJiB2YWx1ZS5tYXRjaCgvXi0/XFxkLykpKSB7XG4gICAgICAgIHJldHVybiBwcm9wT2Zmc2V0ICsgdG9QeCh2YWx1ZSwgJ2hlaWdodCcsIGVsLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWZFbGVtZW50ID0gdmFsdWUgPT09IHRydWUgPyBwYXJlbnQoZWwpIDogcXVlcnkodmFsdWUsIGVsKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGdldE9mZnNldChyZWZFbGVtZW50KS5ib3R0b20gLVxuICAgICAgICAgICAgKHBhZGRpbmcgJiYgcmVmRWxlbWVudCAmJiB3aXRoaW4oZWwsIHJlZkVsZW1lbnQpXG4gICAgICAgICAgICAgICAgPyB0b0Zsb2F0KGNzcyhyZWZFbGVtZW50LCAncGFkZGluZ0JvdHRvbScpKVxuICAgICAgICAgICAgICAgIDogMClcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvZXJjZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlc2V0KGVsKSB7XG4gICAgY3NzKGVsLCB7IHBvc2l0aW9uOiAnJywgdG9wOiAnJywgbWFyZ2luVG9wOiAnJywgd2lkdGg6ICcnIH0pO1xufVxuXG5mdW5jdGlvbiBwcmV2ZW50VHJhbnNpdGlvbihlbCkge1xuICAgIGNzcyhlbCwgJ3RyYW5zaXRpb24nLCAnMHMnKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gY3NzKGVsLCAndHJhbnNpdGlvbicsICcnKSk7XG59XG4iLCJpbXBvcnQgeyAkJCB9IGZyb20gJy4vZG9tJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1heFBhdGhMZW5ndGgoZWwpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKFxuICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAuLi4kJCgnW3N0cm9rZV0nLCBlbCkubWFwKChzdHJva2UpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Ryb2tlLmdldFRvdGFsTGVuZ3RoKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgKTtcbn1cbiIsImltcG9ydCBTdmcgZnJvbSAnLi4vbWl4aW4vc3ZnJztcbmltcG9ydCB7IGdldE1heFBhdGhMZW5ndGggfSBmcm9tICcuLi91dGlsL3N2Zyc7XG5pbXBvcnQgeyBtdXRhdGlvbiB9IGZyb20gJy4uL2FwaS9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge1xuICAgICQsXG4gICAgYWRkQ2xhc3MsXG4gICAgYXR0cixcbiAgICBjc3MsXG4gICAgaW5jbHVkZXMsXG4gICAgaXNUYWcsXG4gICAgbWVtb2l6ZSxcbiAgICBvbmNlLFxuICAgIHJlbW92ZUF0dHIsXG4gICAgc3RhcnRzV2l0aCxcbn0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBtaXhpbnM6IFtTdmddLFxuXG4gICAgYXJnczogJ3NyYycsXG5cbiAgICBwcm9wczoge1xuICAgICAgICBzcmM6IFN0cmluZyxcbiAgICAgICAgaWNvbjogU3RyaW5nLFxuICAgICAgICBhdHRyaWJ1dGVzOiAnbGlzdCcsXG4gICAgICAgIHN0cm9rZUFuaW1hdGlvbjogQm9vbGVhbixcbiAgICB9LFxuXG4gICAgZGF0YToge1xuICAgICAgICBzdHJva2VBbmltYXRpb246IGZhbHNlLFxuICAgIH0sXG5cbiAgICBvYnNlcnZlOiBbXG4gICAgICAgIG11dGF0aW9uKHtcbiAgICAgICAgICAgIGFzeW5jIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ZnID0gYXdhaXQgdGhpcy5zdmc7XG4gICAgICAgICAgICAgICAgaWYgKHN2Zykge1xuICAgICAgICAgICAgICAgICAgICBhcHBseUF0dHJpYnV0ZXMuY2FsbCh0aGlzLCBzdmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsnaWQnLCAnY2xhc3MnLCAnc3R5bGUnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgIF0sXG5cbiAgICBhc3luYyBjb25uZWN0ZWQoKSB7XG4gICAgICAgIGlmIChpbmNsdWRlcyh0aGlzLnNyYywgJyMnKSkge1xuICAgICAgICAgICAgW3RoaXMuc3JjLCB0aGlzLmljb25dID0gdGhpcy5zcmMuc3BsaXQoJyMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN2ZyA9IGF3YWl0IHRoaXMuc3ZnO1xuICAgICAgICBpZiAoc3ZnKSB7XG4gICAgICAgICAgICBhcHBseUF0dHJpYnV0ZXMuY2FsbCh0aGlzLCBzdmcpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3Ryb2tlQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgYXBwbHlBbmltYXRpb24oc3ZnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGFzeW5jIGdldFN2ZygpIHtcbiAgICAgICAgICAgIGlmIChpc1RhZyh0aGlzLiRlbCwgJ2ltZycpICYmICF0aGlzLiRlbC5jb21wbGV0ZSAmJiB0aGlzLiRlbC5sb2FkaW5nID09PSAnbGF6eScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+XG4gICAgICAgICAgICAgICAgICAgIG9uY2UodGhpcy4kZWwsICdsb2FkJywgKCkgPT4gcmVzb2x2ZSh0aGlzLmdldFN2ZygpKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VTVkcoYXdhaXQgbG9hZFNWRyh0aGlzLnNyYyksIHRoaXMuaWNvbikgfHwgUHJvbWlzZS5yZWplY3QoJ1NWRyBub3QgZm91bmQuJyk7XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5cbmZ1bmN0aW9uIGFwcGx5QXR0cmlidXRlcyhlbCkge1xuICAgIGNvbnN0IHsgJGVsIH0gPSB0aGlzO1xuXG4gICAgYWRkQ2xhc3MoZWwsIGF0dHIoJGVsLCAnY2xhc3MnKSwgJ3VrLXN2ZycpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAkZWwuc3R5bGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcHJvcCA9ICRlbC5zdHlsZVtpXTtcbiAgICAgICAgY3NzKGVsLCBwcm9wLCBjc3MoJGVsLCBwcm9wKSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICAgIGNvbnN0IFtwcm9wLCB2YWx1ZV0gPSB0aGlzLmF0dHJpYnV0ZXNbYXR0cmlidXRlXS5zcGxpdCgnOicsIDIpO1xuICAgICAgICBhdHRyKGVsLCBwcm9wLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLiRlbC5pZCkge1xuICAgICAgICByZW1vdmVBdHRyKGVsLCAnaWQnKTtcbiAgICB9XG59XG5cbmNvbnN0IGxvYWRTVkcgPSBtZW1vaXplKGFzeW5jIChzcmMpID0+IHtcbiAgICBpZiAoc3JjKSB7XG4gICAgICAgIGlmIChzdGFydHNXaXRoKHNyYywgJ2RhdGE6JykpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3JjLnNwbGl0KCcsJylbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChhd2FpdCBmZXRjaChzcmMpKS50ZXh0KCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICB9XG59KTtcblxuZnVuY3Rpb24gcGFyc2VTVkcoc3ZnLCBpY29uKSB7XG4gICAgaWYgKGljb24gJiYgaW5jbHVkZXMoc3ZnLCAnPHN5bWJvbCcpKSB7XG4gICAgICAgIHN2ZyA9IHBhcnNlU3ltYm9scyhzdmcpW2ljb25dIHx8IHN2ZztcbiAgICB9XG5cbiAgICBzdmcgPSAkKHN2Zy5zdWJzdHIoc3ZnLmluZGV4T2YoJzxzdmcnKSkpO1xuICAgIHJldHVybiBzdmc/Lmhhc0NoaWxkTm9kZXMoKSAmJiBzdmc7XG59XG5cbmNvbnN0IHN5bWJvbFJlID0gLzxzeW1ib2woW15dKj9pZD0oWydcIl0pKC4rPylcXDJbXl0qPzxcXC8pc3ltYm9sPi9nO1xuXG5jb25zdCBwYXJzZVN5bWJvbHMgPSBtZW1vaXplKGZ1bmN0aW9uIChzdmcpIHtcbiAgICBjb25zdCBzeW1ib2xzID0ge307XG5cbiAgICBzeW1ib2xSZS5sYXN0SW5kZXggPSAwO1xuXG4gICAgbGV0IG1hdGNoO1xuICAgIHdoaWxlICgobWF0Y2ggPSBzeW1ib2xSZS5leGVjKHN2ZykpKSB7XG4gICAgICAgIHN5bWJvbHNbbWF0Y2hbM11dID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiJHttYXRjaFsxXX1zdmc+YDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3ltYm9scztcbn0pO1xuXG5mdW5jdGlvbiBhcHBseUFuaW1hdGlvbihlbCkge1xuICAgIGNvbnN0IGxlbmd0aCA9IGdldE1heFBhdGhMZW5ndGgoZWwpO1xuXG4gICAgaWYgKGxlbmd0aCkge1xuICAgICAgICBjc3MoZWwsICctLXVrLWFuaW1hdGlvbi1zdHJva2UnLCBsZW5ndGgpO1xuICAgIH1cbn1cbiIsImltcG9ydCBUb2dnbGFibGUgZnJvbSAnLi4vbWl4aW4vdG9nZ2xhYmxlJztcbmltcG9ydCB7IGtleU1hcCB9IGZyb20gJy4uL3V0aWwva2V5cyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUlkIH0gZnJvbSAnLi4vYXBpL2luc3RhbmNlJztcbmltcG9ydCB7IGxhenlsb2FkLCBzd2lwZSB9IGZyb20gJy4uL2FwaS9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge1xuICAgICQkLFxuICAgIGF0dHIsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xvc2VzdCxcbiAgICBjc3MsXG4gICAgZGF0YSxcbiAgICBlbmRzV2l0aCxcbiAgICBmaW5kSW5kZXgsXG4gICAgZ2V0SW5kZXgsXG4gICAgaGFzQ2xhc3MsXG4gICAgaW5jbHVkZXMsXG4gICAgaXNOb2RlLFxuICAgIG1hdGNoZXMsXG4gICAgcXVlcnlBbGwsXG4gICAgdG9BcnJheSxcbiAgICB0b2dnbGVDbGFzcyxcbiAgICB3aXRoaW4sXG59IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5jb25zdCBzZWxEaXNhYmxlZCA9ICcudWstZGlzYWJsZWQgKiwgLnVrLWRpc2FibGVkLCBbZGlzYWJsZWRdJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG1peGluczogW1RvZ2dsYWJsZV0sXG5cbiAgICBhcmdzOiAnY29ubmVjdCcsXG5cbiAgICBwcm9wczoge1xuICAgICAgICBjb25uZWN0OiBTdHJpbmcsXG4gICAgICAgIHRvZ2dsZTogU3RyaW5nLFxuICAgICAgICBpdGVtTmF2OiBTdHJpbmcsXG4gICAgICAgIGFjdGl2ZTogTnVtYmVyLFxuICAgICAgICBmb2xsb3dGb2N1czogQm9vbGVhbixcbiAgICAgICAgc3dpcGluZzogQm9vbGVhbixcbiAgICB9LFxuXG4gICAgZGF0YToge1xuICAgICAgICBjb25uZWN0OiAnfi51ay1zd2l0Y2hlcicsXG4gICAgICAgIHRvZ2dsZTogJz4gKiA+IDpmaXJzdC1jaGlsZCcsXG4gICAgICAgIGl0ZW1OYXY6IGZhbHNlLFxuICAgICAgICBhY3RpdmU6IDAsXG4gICAgICAgIGNsczogJ3VrLWFjdGl2ZScsXG4gICAgICAgIGF0dHJJdGVtOiAndWstc3dpdGNoZXItaXRlbScsXG4gICAgICAgIHNlbFZlcnRpY2FsOiAnLnVrLW5hdicsXG4gICAgICAgIGZvbGxvd0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgc3dpcGluZzogdHJ1ZSxcbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgY29ubmVjdHMoeyBjb25uZWN0IH0sICRlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5QWxsKGNvbm5lY3QsICRlbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY29ubmVjdENoaWxkcmVuKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdHMubWFwKChlbCkgPT4gY2hpbGRyZW4oZWwpKS5mbGF0KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9nZ2xlcyh7IHRvZ2dsZSB9LCAkZWwpIHtcbiAgICAgICAgICAgIHJldHVybiAkJCh0b2dnbGUsICRlbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2hpbGRyZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4odGhpcy4kZWwpLmZpbHRlcigoY2hpbGQpID0+XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVzLnNvbWUoKHRvZ2dsZSkgPT4gd2l0aGluKHRvZ2dsZSwgY2hpbGQpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgd2F0Y2g6IHtcbiAgICAgICAgY29ubmVjdHMoY29ubmVjdHMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN3aXBpbmcpIHtcbiAgICAgICAgICAgICAgICBjc3MoY29ubmVjdHMsICd0b3VjaEFjdGlvbicsICdwYW4teSBwaW5jaC16b29tJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY29ubmVjdENoaWxkcmVuKCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuY29ubmVjdHMpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbihlbCkuZm9yRWFjaCgoY2hpbGQsIGkpID0+IHRvZ2dsZUNsYXNzKGNoaWxkLCB0aGlzLmNscywgaSA9PT0gaW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuJGVtaXQoKTtcbiAgICAgICAgfSxcblxuICAgICAgICB0b2dnbGVzKHRvZ2dsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuaW5kZXgoKTtcbiAgICAgICAgICAgIHRoaXMuc2hvdyh+YWN0aXZlID8gYWN0aXZlIDogdG9nZ2xlc1t0aGlzLmFjdGl2ZV0gfHwgdG9nZ2xlc1swXSk7XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGNvbm5lY3RlZCgpIHtcbiAgICAgICAgYXR0cih0aGlzLiRlbCwgJ3JvbGUnLCAndGFibGlzdCcpO1xuICAgIH0sXG5cbiAgICBvYnNlcnZlOiBbXG4gICAgICAgIGxhenlsb2FkKHsgdGFyZ2V0czogKHsgY29ubmVjdENoaWxkcmVuIH0pID0+IGNvbm5lY3RDaGlsZHJlbiB9KSxcbiAgICAgICAgc3dpcGUoeyB0YXJnZXQ6ICh7IGNvbm5lY3RzIH0pID0+IGNvbm5lY3RzLCBmaWx0ZXI6ICh7IHN3aXBpbmcgfSkgPT4gc3dpcGluZyB9KSxcbiAgICBdLFxuXG4gICAgZXZlbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdjbGljayBrZXlkb3duJyxcblxuICAgICAgICAgICAgZGVsZWdhdGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaGFuZGxlcihlKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhbWF0Y2hlcyhlLmN1cnJlbnQsIHNlbERpc2FibGVkKSAmJlxuICAgICAgICAgICAgICAgICAgICAoZS50eXBlID09PSAnY2xpY2snIHx8IGUua2V5Q29kZSA9PT0ga2V5TWFwLlNQQUNFKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdyhlLmN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2tleWRvd24nLFxuXG4gICAgICAgICAgICBkZWxlZ2F0ZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2dnbGU7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGN1cnJlbnQsIGtleUNvZGUgfSA9IGU7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IG1hdGNoZXModGhpcy4kZWwsIHRoaXMuc2VsVmVydGljYWwpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGkgPVxuICAgICAgICAgICAgICAgICAgICBrZXlDb2RlID09PSBrZXlNYXAuSE9NRVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGtleUNvZGUgPT09IGtleU1hcC5FTkRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ2xhc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChrZXlDb2RlID09PSBrZXlNYXAuTEVGVCAmJiAhaXNWZXJ0aWNhbCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleUNvZGUgPT09IGtleU1hcC5VUCAmJiBpc1ZlcnRpY2FsKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAncHJldmlvdXMnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChrZXlDb2RlID09PSBrZXlNYXAuUklHSFQgJiYgIWlzVmVydGljYWwpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlDb2RlID09PSBrZXlNYXAuRE9XTiAmJiBpc1ZlcnRpY2FsKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmV4dCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgICAgICBpZiAofmkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2dnbGVzID0gdGhpcy50b2dnbGVzLmZpbHRlcigoZWwpID0+ICFtYXRjaGVzKGVsLCBzZWxEaXNhYmxlZCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gdG9nZ2xlc1tnZXRJbmRleChpLCB0b2dnbGVzLCB0b2dnbGVzLmluZGV4T2YoY3VycmVudCkpXTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mb2xsb3dGb2N1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KG5leHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnY2xpY2snLFxuXG4gICAgICAgICAgICBlbCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0cy5jb25jYXQodGhpcy5pdGVtTmF2ID8gcXVlcnlBbGwodGhpcy5pdGVtTmF2LCB0aGlzLiRlbCkgOiBbXSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBkZWxlZ2F0ZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFske3RoaXMuYXR0ckl0ZW19XSxbZGF0YS0ke3RoaXMuYXR0ckl0ZW19XWA7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdChlLnRhcmdldCwgJ2EsYnV0dG9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coZGF0YShlLmN1cnJlbnQsIHRoaXMuYXR0ckl0ZW0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdzd2lwZVJpZ2h0IHN3aXBlTGVmdCcsXG5cbiAgICAgICAgICAgIGZpbHRlcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zd2lwaW5nO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZWwoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdHM7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKHsgdHlwZSB9KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93KGVuZHNXaXRoKHR5cGUsICdMZWZ0JykgPyAnbmV4dCcgOiAncHJldmlvdXMnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgXSxcblxuICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgYXR0cih0aGlzLmNvbm5lY3RzLCAncm9sZScsICdwcmVzZW50YXRpb24nKTtcbiAgICAgICAgYXR0cihjaGlsZHJlbih0aGlzLiRlbCksICdyb2xlJywgJ3ByZXNlbnRhdGlvbicpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggaW4gdGhpcy50b2dnbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0b2dnbGUgPSB0aGlzLnRvZ2dsZXNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY29ubmVjdHNbMF0/LmNoaWxkcmVuW2luZGV4XTtcblxuICAgICAgICAgICAgYXR0cih0b2dnbGUsICdyb2xlJywgJ3RhYicpO1xuXG4gICAgICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG9nZ2xlLmlkID0gZ2VuZXJhdGVJZCh0aGlzLCB0b2dnbGUsIGAtdGFiLSR7aW5kZXh9YCk7XG4gICAgICAgICAgICBpdGVtLmlkID0gZ2VuZXJhdGVJZCh0aGlzLCBpdGVtLCBgLXRhYnBhbmVsLSR7aW5kZXh9YCk7XG5cbiAgICAgICAgICAgIGF0dHIodG9nZ2xlLCAnYXJpYS1jb250cm9scycsIGl0ZW0uaWQpO1xuICAgICAgICAgICAgYXR0cihpdGVtLCB7IHJvbGU6ICd0YWJwYW5lbCcsICdhcmlhLWxhYmVsbGVkYnknOiB0b2dnbGUuaWQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYXR0cih0aGlzLiRlbCwgJ2FyaWEtb3JpZW50YXRpb24nLCBtYXRjaGVzKHRoaXMuJGVsLCB0aGlzLnNlbFZlcnRpY2FsKSA/ICd2ZXJ0aWNhbCcgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgICBpbmRleCgpIHtcbiAgICAgICAgICAgIHJldHVybiBmaW5kSW5kZXgodGhpcy5jaGlsZHJlbiwgKGVsKSA9PiBoYXNDbGFzcyhlbCwgdGhpcy5jbHMpKTtcbiAgICAgICAgfSxcblxuICAgICAgICBzaG93KGl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZXMgPSB0aGlzLnRvZ2dsZXMuZmlsdGVyKChlbCkgPT4gIW1hdGNoZXMoZWwsIHNlbERpc2FibGVkKSk7XG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gdGhpcy5pbmRleCgpO1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IGdldEluZGV4KFxuICAgICAgICAgICAgICAgICFpc05vZGUoaXRlbSkgfHwgaW5jbHVkZXModG9nZ2xlcywgaXRlbSkgPyBpdGVtIDogMCxcbiAgICAgICAgICAgICAgICB0b2dnbGVzLFxuICAgICAgICAgICAgICAgIGdldEluZGV4KHRoaXMudG9nZ2xlc1twcmV2XSwgdG9nZ2xlcylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBnZXRJbmRleCh0b2dnbGVzW25leHRdLCB0aGlzLnRvZ2dsZXMpO1xuXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoY2hpbGQsIHRoaXMuY2xzLCBhY3RpdmUgPT09IGkpO1xuICAgICAgICAgICAgICAgIGF0dHIodGhpcy50b2dnbGVzW2ldLCB7XG4gICAgICAgICAgICAgICAgICAgICdhcmlhLXNlbGVjdGVkJzogYWN0aXZlID09PSBpLFxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleDogYWN0aXZlID09PSBpID8gbnVsbCA6IC0xLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFuaW1hdGUgPSBwcmV2ID49IDAgJiYgcHJldiAhPT0gbmV4dDtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdHMuZm9yRWFjaChhc3luYyAoeyBjaGlsZHJlbiB9KSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy50b2dnbGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICB0b0FycmF5KGNoaWxkcmVuKS5maWx0ZXIoKGNoaWxkKSA9PiBoYXNDbGFzcyhjaGlsZCwgdGhpcy5jbHMpKSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudG9nZ2xlRWxlbWVudChjaGlsZHJlblthY3RpdmVdLCB0cnVlLCBhbmltYXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH0sXG59O1xuIiwiaW1wb3J0IFN3aXRjaGVyIGZyb20gJy4vc3dpdGNoZXInO1xuaW1wb3J0IENsYXNzIGZyb20gJy4uL21peGluL2NsYXNzJztcbmltcG9ydCB7IGhhc0NsYXNzIH0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBtaXhpbnM6IFtDbGFzc10sXG5cbiAgICBleHRlbmRzOiBTd2l0Y2hlcixcblxuICAgIHByb3BzOiB7XG4gICAgICAgIG1lZGlhOiBCb29sZWFuLFxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIG1lZGlhOiA5NjAsXG4gICAgICAgIGF0dHJJdGVtOiAndWstdGFiLWl0ZW0nLFxuICAgICAgICBzZWxWZXJ0aWNhbDogJy51ay10YWItbGVmdCwudWstdGFiLXJpZ2h0JyxcbiAgICB9LFxuXG4gICAgY29ubmVjdGVkKCkge1xuICAgICAgICBjb25zdCBjbHMgPSBoYXNDbGFzcyh0aGlzLiRlbCwgJ3VrLXRhYi1sZWZ0JylcbiAgICAgICAgICAgID8gJ3VrLXRhYi1sZWZ0J1xuICAgICAgICAgICAgOiBoYXNDbGFzcyh0aGlzLiRlbCwgJ3VrLXRhYi1yaWdodCcpXG4gICAgICAgICAgICA/ICd1ay10YWItcmlnaHQnXG4gICAgICAgICAgICA6IGZhbHNlO1xuXG4gICAgICAgIGlmIChjbHMpIHtcbiAgICAgICAgICAgIHRoaXMuJGNyZWF0ZSgndG9nZ2xlJywgdGhpcy4kZWwsIHsgY2xzLCBtb2RlOiAnbWVkaWEnLCBtZWRpYTogdGhpcy5tZWRpYSB9KTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuIiwiaW1wb3J0IE1lZGlhIGZyb20gJy4uL21peGluL21lZGlhJztcbmltcG9ydCBUb2dnbGFibGUgZnJvbSAnLi4vbWl4aW4vdG9nZ2xhYmxlJztcbmltcG9ydCB7IGxhenlsb2FkIH0gZnJvbSAnLi4vYXBpL29ic2VydmFibGVzJztcbmltcG9ydCB7XG4gICAgYXR0cixcbiAgICBjbG9zZXN0LFxuICAgIGhhc0F0dHIsXG4gICAgaGFzQ2xhc3MsXG4gICAgaW5jbHVkZXMsXG4gICAgaXNGb2N1c2FibGUsXG4gICAgaXNUYWcsXG4gICAgaXNUb3VjaCxcbiAgICBtYXRjaGVzLFxuICAgIG9uY2UsXG4gICAgcG9pbnRlckRvd24sXG4gICAgcG9pbnRlckVudGVyLFxuICAgIHBvaW50ZXJMZWF2ZSxcbiAgICBxdWVyeUFsbCxcbiAgICB0cmlnZ2VyLFxuICAgIHdpdGhpbixcbn0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmNvbnN0IEtFWV9TUEFDRSA9IDMyO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbWl4aW5zOiBbTWVkaWEsIFRvZ2dsYWJsZV0sXG5cbiAgICBhcmdzOiAndGFyZ2V0JyxcblxuICAgIHByb3BzOiB7XG4gICAgICAgIGhyZWY6IFN0cmluZyxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICBtb2RlOiAnbGlzdCcsXG4gICAgICAgIHF1ZXVlZDogQm9vbGVhbixcbiAgICB9LFxuXG4gICAgZGF0YToge1xuICAgICAgICBocmVmOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiBmYWxzZSxcbiAgICAgICAgbW9kZTogJ2NsaWNrJyxcbiAgICAgICAgcXVldWVkOiB0cnVlLFxuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgICB0YXJnZXQoeyBocmVmLCB0YXJnZXQgfSwgJGVsKSB7XG4gICAgICAgICAgICB0YXJnZXQgPSBxdWVyeUFsbCh0YXJnZXQgfHwgaHJlZiwgJGVsKTtcbiAgICAgICAgICAgIHJldHVybiAodGFyZ2V0Lmxlbmd0aCAmJiB0YXJnZXQpIHx8IFskZWxdO1xuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBjb25uZWN0ZWQoKSB7XG4gICAgICAgIGlmICghaW5jbHVkZXModGhpcy5tb2RlLCAnbWVkaWEnKSkge1xuICAgICAgICAgICAgaWYgKCFpc0ZvY3VzYWJsZSh0aGlzLiRlbCkpIHtcbiAgICAgICAgICAgICAgICBhdHRyKHRoaXMuJGVsLCAndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmNscyAmJiBpc1RhZyh0aGlzLiRlbCwgJ2EnKSkge1xuICAgICAgICAgICAgICAgIGF0dHIodGhpcy4kZWwsICdyb2xlJywgJ2J1dHRvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIG9ic2VydmU6IGxhenlsb2FkKHsgdGFyZ2V0OiAoeyB0YXJnZXQgfSkgPT4gdGFyZ2V0IH0pLFxuXG4gICAgZXZlbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHBvaW50ZXJEb3duLFxuXG4gICAgICAgICAgICBmaWx0ZXIoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluY2x1ZGVzKHRoaXMubW9kZSwgJ2hvdmVyJyk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcmV2ZW50Q2xpY2sgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFpc1RvdWNoKGUpIHx8IHRoaXMuX3Nob3dTdGF0ZSB8fCB0aGlzLiRlbC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ2xpY2tpbmcgYSBidXR0b24gZG9lcyBub3QgZ2l2ZSBpdCBmb2N1cyBvbiBhbGwgYnJvd3NlcnMgYW5kIHBsYXRmb3Jtc1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jY2xpY2tpbmdfYW5kX2ZvY3VzXG4gICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ2ZvY3VzJyk7XG4gICAgICAgICAgICAgICAgb25jZShcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ZXJEb3duLFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB0cmlnZ2VyKHRoaXMuJGVsLCAnYmx1cicpLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAoZSkgPT4gIXdpdGhpbihlLnRhcmdldCwgdGhpcy4kZWwpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgaW5pdGlhbCBjbGljayB0byBwcmV2ZW50IGRvdWJsZSB0b2dnbGUgdGhyb3VnaCBmb2N1cyArIGNsaWNrXG4gICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVzKHRoaXMubW9kZSwgJ2NsaWNrJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJldmVudENsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IGAke3BvaW50ZXJFbnRlcn0gJHtwb2ludGVyTGVhdmV9IGZvY3VzIGJsdXJgLFxuXG4gICAgICAgICAgICBmaWx0ZXIoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluY2x1ZGVzKHRoaXMubW9kZSwgJ2hvdmVyJyk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNUb3VjaChlKSB8fCB0aGlzLiRlbC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdyA9IGluY2x1ZGVzKFtwb2ludGVyRW50ZXIsICdmb2N1cyddLCBlLnR5cGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5pc1RvZ2dsZWQodGhpcy50YXJnZXQpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2tpcCBoaWRlIGlmIHN0aWxsIGhvdmVyZWQgb3IgZm9jdXNlZFxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIXNob3cgJiZcbiAgICAgICAgICAgICAgICAgICAgKChlLnR5cGUgPT09IHBvaW50ZXJMZWF2ZSAmJiBtYXRjaGVzKHRoaXMuJGVsLCAnOmZvY3VzJykpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoZS50eXBlID09PSAnYmx1cicgJiYgbWF0Y2hlcyh0aGlzLiRlbCwgJzpob3ZlcicpKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgc3RhdGUgZG9lcyBub3QgY2hhbmdlIGUuZy4gaG92ZXIgKyBmb2N1cyByZWNlaXZlZFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaG93U3RhdGUgJiYgc2hvdyAmJiBleHBhbmRlZCAhPT0gdGhpcy5fc2hvd1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSByZXNldCBpZiBzdGF0ZSBoYXMgY2hhbmdlZCB0aHJvdWdoIGNsaWNrXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2hvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hvd1N0YXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd1N0YXRlID0gc2hvdyA/IGV4cGFuZGVkIDogbnVsbDtcblxuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlKGB0b2dnbGUke3Nob3cgPyAnc2hvdycgOiAnaGlkZSd9YCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdrZXlkb3duJyxcblxuICAgICAgICAgICAgZmlsdGVyKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmNsdWRlcyh0aGlzLm1vZGUsICdjbGljaycpICYmICFpc1RhZyh0aGlzLiRlbCwgJ2lucHV0Jyk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSBLRVlfU1BBQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbC5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2NsaWNrJyxcblxuICAgICAgICAgICAgZmlsdGVyKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbJ2NsaWNrJywgJ2hvdmVyJ10uc29tZSgobW9kZSkgPT4gaW5jbHVkZXModGhpcy5tb2RlLCBtb2RlKSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgbGluaztcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZlbnRDbGljayB8fFxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0KGUudGFyZ2V0LCAnYVtocmVmPVwiI1wiXSwgYVtocmVmPVwiXCJdJykgfHxcbiAgICAgICAgICAgICAgICAgICAgKChsaW5rID0gY2xvc2VzdChlLnRhcmdldCwgJ2FbaHJlZl0nKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghdGhpcy5pc1RvZ2dsZWQodGhpcy50YXJnZXQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmsuaGFzaCAmJiBtYXRjaGVzKHRoaXMudGFyZ2V0LCBsaW5rLmhhc2gpKSkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3ByZXZlbnRDbGljayAmJiBpbmNsdWRlcyh0aGlzLm1vZGUsICdjbGljaycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnbWVkaWFjaGFuZ2UnLFxuXG4gICAgICAgICAgICBmaWx0ZXIoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluY2x1ZGVzKHRoaXMubW9kZSwgJ21lZGlhJyk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBlbCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQ7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKGUsIG1lZGlhT2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lZGlhT2JqLm1hdGNoZXMgXiB0aGlzLmlzVG9nZ2xlZCh0aGlzLnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGFzeW5jIHRvZ2dsZSh0eXBlKSB7XG4gICAgICAgICAgICBpZiAoIXRyaWdnZXIodGhpcy50YXJnZXQsIHR5cGUgfHwgJ3RvZ2dsZScsIFt0aGlzXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNBdHRyKHRoaXMuJGVsLCAnYXJpYS1leHBhbmRlZCcpKSB7XG4gICAgICAgICAgICAgICAgYXR0cih0aGlzLiRlbCwgJ2FyaWEtZXhwYW5kZWQnLCAhdGhpcy5pc1RvZ2dsZWQodGhpcy50YXJnZXQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLnF1ZXVlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZUVsZW1lbnQodGhpcy50YXJnZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsZWF2aW5nID0gdGhpcy50YXJnZXQuZmlsdGVyKChlbCkgPT4gaGFzQ2xhc3MoZWwsIHRoaXMuY2xzTGVhdmUpKTtcblxuICAgICAgICAgICAgaWYgKGxlYXZpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0xlYXZpbmcgPSBpbmNsdWRlcyhsZWF2aW5nLCBlbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlRWxlbWVudChlbCwgaXNMZWF2aW5nLCBpc0xlYXZpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZWQgPSB0aGlzLnRhcmdldC5maWx0ZXIodGhpcy5pc1RvZ2dsZWQpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy50b2dnbGVFbGVtZW50KHRvZ2dsZWQsIGZhbHNlKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudG9nZ2xlRWxlbWVudChcbiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5maWx0ZXIoKGVsKSA9PiAhaW5jbHVkZXModG9nZ2xlZCwgZWwpKSxcbiAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgIH0sXG59O1xuIiwiaW1wb3J0IFVJa2l0IGZyb20gJy4vYXBpL2luZGV4JztcbmltcG9ydCBib290IGZyb20gJy4vYXBpL2Jvb3QnO1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvcmUvaW5kZXgnO1xuaW1wb3J0IHsgZWFjaCB9IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG4vLyByZWdpc3RlciBjb21wb25lbnRzXG5lYWNoKGNvbXBvbmVudHMsIChjb21wb25lbnQsIG5hbWUpID0+IFVJa2l0LmNvbXBvbmVudChuYW1lLCBjb21wb25lbnQpKTtcblxuYm9vdChVSWtpdCk7XG5cbmV4cG9ydCBkZWZhdWx0IFVJa2l0O1xuIiwiaW1wb3J0IENsYXNzIGZyb20gJy4uL21peGluL2NsYXNzJztcbmltcG9ydCB7ICQsIGF0dHIsIGh0bWwsIHRvRmxvYXQsIHRyaWdnZXIgfSBmcm9tICd1aWtpdC11dGlsJztcblxuY29uc3QgdW5pdHMgPSBbJ2RheXMnLCAnaG91cnMnLCAnbWludXRlcycsICdzZWNvbmRzJ107XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBtaXhpbnM6IFtDbGFzc10sXG5cbiAgICBwcm9wczoge1xuICAgICAgICBkYXRlOiBTdHJpbmcsXG4gICAgICAgIGNsc1dyYXBwZXI6IFN0cmluZyxcbiAgICAgICAgcm9sZTogU3RyaW5nLFxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIGRhdGU6ICcnLFxuICAgICAgICBjbHNXcmFwcGVyOiAnLnVrLWNvdW50ZG93bi0ldW5pdCUnLFxuICAgICAgICByb2xlOiAndGltZXInLFxuICAgIH0sXG5cbiAgICBjb25uZWN0ZWQoKSB7XG4gICAgICAgIGF0dHIodGhpcy4kZWwsICdyb2xlJywgdGhpcy5yb2xlKTtcbiAgICAgICAgdGhpcy5kYXRlID0gdG9GbG9hdChEYXRlLnBhcnNlKHRoaXMuJHByb3BzLmRhdGUpKTtcbiAgICAgICAgdGhpcy5lbmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgIH0sXG5cbiAgICBkaXNjb25uZWN0ZWQoKSB7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgIH0sXG5cbiAgICBldmVudHM6IHtcbiAgICAgICAgbmFtZTogJ3Zpc2liaWxpdHljaGFuZ2UnLFxuXG4gICAgICAgIGVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgICAgICB9LFxuXG4gICAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgICBzdGFydCgpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy50aW1lcikge1xuICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdjb3VudGRvd25zdGFydCcpO1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSBzZXRJbnRlcnZhbCh0aGlzLnVwZGF0ZSwgMTAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgc3RvcCgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKHRoaXMuJGVsLCAnY291bnRkb3duc3RvcCcpO1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVzcGFuID0gZ2V0VGltZVNwYW4odGhpcy5kYXRlKTtcblxuICAgICAgICAgICAgaWYgKCF0aW1lc3Bhbi50b3RhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ2NvdW50ZG93bmVuZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHVuaXQgb2YgdW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbCA9ICQodGhpcy5jbHNXcmFwcGVyLnJlcGxhY2UoJyV1bml0JScsIHVuaXQpLCB0aGlzLiRlbCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBkaWdpdHMgPSBTdHJpbmcoTWF0aC50cnVuYyh0aW1lc3Bhblt1bml0XSkpO1xuXG4gICAgICAgICAgICAgICAgZGlnaXRzID0gZGlnaXRzLmxlbmd0aCA8IDIgPyBgMCR7ZGlnaXRzfWAgOiBkaWdpdHM7XG5cbiAgICAgICAgICAgICAgICBpZiAoZWwudGV4dENvbnRlbnQgIT09IGRpZ2l0cykge1xuICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSBkaWdpdHMuc3BsaXQoJycpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHMubGVuZ3RoICE9PSBlbC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwoZWwsIGRpZ2l0cy5tYXAoKCkgPT4gJzxzcGFuPjwvc3Bhbj4nKS5qb2luKCcnKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBkaWdpdHMuZm9yRWFjaCgoZGlnaXQsIGkpID0+IChlbC5jaGlsZHJlbltpXS50ZXh0Q29udGVudCA9IGRpZ2l0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG5mdW5jdGlvbiBnZXRUaW1lU3BhbihkYXRlKSB7XG4gICAgY29uc3QgdG90YWwgPSBNYXRoLm1heCgwLCBkYXRlIC0gRGF0ZS5ub3coKSkgLyAxMDAwO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG90YWwsXG4gICAgICAgIHNlY29uZHM6IHRvdGFsICUgNjAsXG4gICAgICAgIG1pbnV0ZXM6ICh0b3RhbCAvIDYwKSAlIDYwLFxuICAgICAgICBob3VyczogKHRvdGFsIC8gNjAgLyA2MCkgJSAyNCxcbiAgICAgICAgZGF5czogdG90YWwgLyA2MCAvIDYwIC8gMjQsXG4gICAgfTtcbn1cbiIsImltcG9ydCB7IGdldFJvd3MgfSBmcm9tICcuLi8uLi9jb3JlL21hcmdpbic7XG5pbXBvcnQge1xuICAgIGFkZENsYXNzLFxuICAgIGNoaWxkcmVuLFxuICAgIGNzcyxcbiAgICBoYXNDbGFzcyxcbiAgICBoZWlnaHQsXG4gICAgaXNJblZpZXcsXG4gICAgb25jZSxcbiAgICByZW1vdmVDbGFzcyxcbiAgICBzb3J0QnksXG4gICAgdG9OdW1iZXIsXG4gICAgVHJhbnNpdGlvbixcbn0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmNvbnN0IGNsc0xlYXZlID0gJ3VrLXRyYW5zaXRpb24tbGVhdmUnO1xuY29uc3QgY2xzRW50ZXIgPSAndWstdHJhbnNpdGlvbi1lbnRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZhZGUoYWN0aW9uLCB0YXJnZXQsIGR1cmF0aW9uLCBzdGFnZ2VyID0gMCkge1xuICAgIGNvbnN0IGluZGV4ID0gdHJhbnNpdGlvbkluZGV4KHRhcmdldCwgdHJ1ZSk7XG4gICAgY29uc3QgcHJvcHNJbiA9IHsgb3BhY2l0eTogMSB9O1xuICAgIGNvbnN0IHByb3BzT3V0ID0geyBvcGFjaXR5OiAwIH07XG5cbiAgICBjb25zdCB3cmFwSW5kZXhGbiA9IChmbikgPT4gKCkgPT4gaW5kZXggPT09IHRyYW5zaXRpb25JbmRleCh0YXJnZXQpID8gZm4oKSA6IFByb21pc2UucmVqZWN0KCk7XG5cbiAgICBjb25zdCBsZWF2ZUZuID0gd3JhcEluZGV4Rm4oYXN5bmMgKCkgPT4ge1xuICAgICAgICBhZGRDbGFzcyh0YXJnZXQsIGNsc0xlYXZlKTtcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIGdldFRyYW5zaXRpb25Ob2Rlcyh0YXJnZXQpLm1hcChcbiAgICAgICAgICAgICAgICAoY2hpbGQsIGkpID0+XG4gICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KGNoaWxkLCBwcm9wc091dCwgZHVyYXRpb24gLyAyLCAnZWFzZScpLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAqIHN0YWdnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHJlbW92ZUNsYXNzKHRhcmdldCwgY2xzTGVhdmUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZW50ZXJGbiA9IHdyYXBJbmRleEZuKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgb2xkSGVpZ2h0ID0gaGVpZ2h0KHRhcmdldCk7XG5cbiAgICAgICAgYWRkQ2xhc3ModGFyZ2V0LCBjbHNFbnRlcik7XG4gICAgICAgIGFjdGlvbigpO1xuXG4gICAgICAgIGNzcyhjaGlsZHJlbih0YXJnZXQpLCB7IG9wYWNpdHk6IDAgfSk7XG5cbiAgICAgICAgLy8gRW5zdXJlIFVJa2l0IHVwZGF0ZXMgaGF2ZSBwcm9wYWdhdGVkXG4gICAgICAgIGF3YWl0IGF3YWl0RnJhbWUoKTtcblxuICAgICAgICBjb25zdCBub2RlcyA9IGNoaWxkcmVuKHRhcmdldCk7XG4gICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IGhlaWdodCh0YXJnZXQpO1xuXG4gICAgICAgIC8vIEVuc3VyZSBHcmlkIGNlbGxzIGRvIG5vdCBzdHJldGNoIHdoZW4gaGVpZ2h0IGlzIGFwcGxpZWRcbiAgICAgICAgY3NzKHRhcmdldCwgJ2FsaWduQ29udGVudCcsICdmbGV4LXN0YXJ0Jyk7XG4gICAgICAgIGhlaWdodCh0YXJnZXQsIG9sZEhlaWdodCk7XG5cbiAgICAgICAgY29uc3QgdHJhbnNpdGlvbk5vZGVzID0gZ2V0VHJhbnNpdGlvbk5vZGVzKHRhcmdldCk7XG4gICAgICAgIGNzcyhub2RlcywgcHJvcHNPdXQpO1xuXG4gICAgICAgIGNvbnN0IHRyYW5zaXRpb25zID0gdHJhbnNpdGlvbk5vZGVzLm1hcChhc3luYyAoY2hpbGQsIGkpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGF3YWl0VGltZW91dChpICogc3RhZ2dlcik7XG4gICAgICAgICAgICBhd2FpdCBUcmFuc2l0aW9uLnN0YXJ0KGNoaWxkLCBwcm9wc0luLCBkdXJhdGlvbiAvIDIsICdlYXNlJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvbGRIZWlnaHQgIT09IG5ld0hlaWdodCkge1xuICAgICAgICAgICAgdHJhbnNpdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgIHsgaGVpZ2h0OiBuZXdIZWlnaHQgfSxcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gLyAyICsgdHJhbnNpdGlvbk5vZGVzLmxlbmd0aCAqIHN0YWdnZXIsXG4gICAgICAgICAgICAgICAgICAgICdlYXNlJ1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0cmFuc2l0aW9ucykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0YXJnZXQsIGNsc0VudGVyKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdHJhbnNpdGlvbkluZGV4KHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBjc3ModGFyZ2V0LCB7IGhlaWdodDogJycsIGFsaWduQ29udGVudDogJycgfSk7XG4gICAgICAgICAgICAgICAgY3NzKG5vZGVzLCB7IG9wYWNpdHk6ICcnIH0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXQuZGF0YXNldC50cmFuc2l0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBoYXNDbGFzcyh0YXJnZXQsIGNsc0xlYXZlKVxuICAgICAgICA/IHdhaXRUcmFuc2l0aW9uZW5kKHRhcmdldCkudGhlbihlbnRlckZuKVxuICAgICAgICA6IGhhc0NsYXNzKHRhcmdldCwgY2xzRW50ZXIpXG4gICAgICAgID8gd2FpdFRyYW5zaXRpb25lbmQodGFyZ2V0KS50aGVuKGxlYXZlRm4pLnRoZW4oZW50ZXJGbilcbiAgICAgICAgOiBsZWF2ZUZuKCkudGhlbihlbnRlckZuKTtcbn1cblxuZnVuY3Rpb24gdHJhbnNpdGlvbkluZGV4KHRhcmdldCwgbmV4dCkge1xuICAgIGlmIChuZXh0KSB7XG4gICAgICAgIHRhcmdldC5kYXRhc2V0LnRyYW5zaXRpb24gPSAxICsgdHJhbnNpdGlvbkluZGV4KHRhcmdldCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvTnVtYmVyKHRhcmdldC5kYXRhc2V0LnRyYW5zaXRpb24pIHx8IDA7XG59XG5cbmZ1bmN0aW9uIHdhaXRUcmFuc2l0aW9uZW5kKHRhcmdldCkge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgY2hpbGRyZW4odGFyZ2V0KVxuICAgICAgICAgICAgLmZpbHRlcihUcmFuc2l0aW9uLmluUHJvZ3Jlc3MpXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgIChlbCkgPT5cbiAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IG9uY2UoZWwsICd0cmFuc2l0aW9uZW5kIHRyYW5zaXRpb25jYW5jZWxlZCcsIHJlc29sdmUpKVxuICAgICAgICAgICAgKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25Ob2Rlcyh0YXJnZXQpIHtcbiAgICByZXR1cm4gZ2V0Um93cyhjaGlsZHJlbih0YXJnZXQpKS5yZWR1Y2UoXG4gICAgICAgIChub2Rlcywgcm93KSA9PlxuICAgICAgICAgICAgbm9kZXMuY29uY2F0KFxuICAgICAgICAgICAgICAgIHNvcnRCeShcbiAgICAgICAgICAgICAgICAgICAgcm93LmZpbHRlcigoZWwpID0+IGlzSW5WaWV3KGVsKSksXG4gICAgICAgICAgICAgICAgICAgICdvZmZzZXRMZWZ0J1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgIFtdXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gYXdhaXRGcmFtZSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlKSk7XG59XG5cbmZ1bmN0aW9uIGF3YWl0VGltZW91dCh0aW1lb3V0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpKTtcbn1cbiIsImltcG9ydCB7XG4gICAgYXR0cixcbiAgICBjaGlsZHJlbixcbiAgICBjc3MsXG4gICAgZmFzdGRvbSxcbiAgICBpbmNsdWRlcyxcbiAgICBpbmRleCxcbiAgICBpc1Zpc2libGUsXG4gICAgb2Zmc2V0LFxuICAgIHBhcmVudCxcbiAgICBwb3NpdGlvbixcbiAgICBUcmFuc2l0aW9uLFxuICAgIHRyaWdnZXIsXG59IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAoYWN0aW9uLCB0YXJnZXQsIGR1cmF0aW9uKSB7XG4gICAgYXdhaXQgYXdhaXRGcmFtZSgpO1xuXG4gICAgbGV0IG5vZGVzID0gY2hpbGRyZW4odGFyZ2V0KTtcblxuICAgIC8vIEdldCBjdXJyZW50IHN0YXRlXG4gICAgY29uc3QgY3VycmVudFByb3BzID0gbm9kZXMubWFwKChlbCkgPT4gZ2V0UHJvcHMoZWwsIHRydWUpKTtcbiAgICBjb25zdCB0YXJnZXRQcm9wcyA9IHsgLi4uY3NzKHRhcmdldCwgWydoZWlnaHQnLCAncGFkZGluZyddKSwgZGlzcGxheTogJ2Jsb2NrJyB9O1xuXG4gICAgLy8gQ2FuY2VsIHByZXZpb3VzIGFuaW1hdGlvbnNcbiAgICBhd2FpdCBQcm9taXNlLmFsbChub2Rlcy5jb25jYXQodGFyZ2V0KS5tYXAoVHJhbnNpdGlvbi5jYW5jZWwpKTtcblxuICAgIC8vIEFkZGluZywgc29ydGluZywgcmVtb3Zpbmcgbm9kZXNcbiAgICBhY3Rpb24oKTtcblxuICAgIC8vIEZpbmQgbmV3IG5vZGVzXG4gICAgbm9kZXMgPSBub2Rlcy5jb25jYXQoY2hpbGRyZW4odGFyZ2V0KS5maWx0ZXIoKGVsKSA9PiAhaW5jbHVkZXMobm9kZXMsIGVsKSkpO1xuXG4gICAgLy8gV2FpdCBmb3IgdXBkYXRlIHRvIHByb3BhZ2F0ZVxuICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgLy8gRm9yY2UgdXBkYXRlXG4gICAgZmFzdGRvbS5mbHVzaCgpO1xuXG4gICAgLy8gR2V0IG5ldyBzdGF0ZVxuICAgIGNvbnN0IHRhcmdldFN0eWxlID0gYXR0cih0YXJnZXQsICdzdHlsZScpO1xuICAgIGNvbnN0IHRhcmdldFByb3BzVG8gPSBjc3ModGFyZ2V0LCBbJ2hlaWdodCcsICdwYWRkaW5nJ10pO1xuICAgIGNvbnN0IFtwcm9wc1RvLCBwcm9wc0Zyb21dID0gZ2V0VHJhbnNpdGlvblByb3BzKHRhcmdldCwgbm9kZXMsIGN1cnJlbnRQcm9wcyk7XG4gICAgY29uc3QgYXR0cnNUbyA9IG5vZGVzLm1hcCgoZWwpID0+ICh7IHN0eWxlOiBhdHRyKGVsLCAnc3R5bGUnKSB9KSk7XG5cbiAgICAvLyBSZXNldCB0byBwcmV2aW91cyBzdGF0ZVxuICAgIG5vZGVzLmZvckVhY2goKGVsLCBpKSA9PiBwcm9wc0Zyb21baV0gJiYgY3NzKGVsLCBwcm9wc0Zyb21baV0pKTtcbiAgICBjc3ModGFyZ2V0LCB0YXJnZXRQcm9wcyk7XG5cbiAgICAvLyBUcmlnZ2VyIHVwZGF0ZSBpbiBlLmcuIHBhcmFsbGF4IGNvbXBvbmVudFxuICAgIHRyaWdnZXIodGFyZ2V0LCAnc2Nyb2xsJyk7XG4gICAgZmFzdGRvbS5mbHVzaCgpO1xuXG4gICAgLy8gU3RhcnQgdHJhbnNpdGlvbnMgb24gbmV4dCBmcmFtZVxuICAgIGF3YWl0IGF3YWl0RnJhbWUoKTtcblxuICAgIGNvbnN0IHRyYW5zaXRpb25zID0gbm9kZXNcbiAgICAgICAgLm1hcCgoZWwsIGkpID0+IHBhcmVudChlbCkgPT09IHRhcmdldCAmJiBUcmFuc2l0aW9uLnN0YXJ0KGVsLCBwcm9wc1RvW2ldLCBkdXJhdGlvbiwgJ2Vhc2UnKSlcbiAgICAgICAgLmNvbmNhdChUcmFuc2l0aW9uLnN0YXJ0KHRhcmdldCwgdGFyZ2V0UHJvcHNUbywgZHVyYXRpb24sICdlYXNlJykpO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodHJhbnNpdGlvbnMpO1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChlbCwgaSkgPT4ge1xuICAgICAgICAgICAgYXR0cihlbCwgYXR0cnNUb1tpXSk7XG4gICAgICAgICAgICBpZiAocGFyZW50KGVsKSA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgY3NzKGVsLCAnZGlzcGxheScsIHByb3BzVG9baV0ub3BhY2l0eSA9PT0gMCA/ICdub25lJyA6ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGF0dHIodGFyZ2V0LCAnc3R5bGUnLCB0YXJnZXRTdHlsZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBhdHRyKG5vZGVzLCAnc3R5bGUnLCAnJyk7XG4gICAgICAgIHJlc2V0UHJvcHModGFyZ2V0LCB0YXJnZXRQcm9wcyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRQcm9wcyhlbCwgb3BhY2l0eSkge1xuICAgIGNvbnN0IHpJbmRleCA9IGNzcyhlbCwgJ3pJbmRleCcpO1xuXG4gICAgcmV0dXJuIGlzVmlzaWJsZShlbClcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICcnLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBvcGFjaXR5ID8gY3NzKGVsLCAnb3BhY2l0eScpIDogJzAnLFxuICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICB6SW5kZXg6IHpJbmRleCA9PT0gJ2F1dG8nID8gaW5kZXgoZWwpIDogekluZGV4LFxuICAgICAgICAgICAgICAuLi5nZXRQb3NpdGlvbldpdGhNYXJnaW4oZWwpLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNpdGlvblByb3BzKHRhcmdldCwgbm9kZXMsIGN1cnJlbnRQcm9wcykge1xuICAgIGNvbnN0IHByb3BzVG8gPSBub2Rlcy5tYXAoKGVsLCBpKSA9PlxuICAgICAgICBwYXJlbnQoZWwpICYmIGkgaW4gY3VycmVudFByb3BzXG4gICAgICAgICAgICA/IGN1cnJlbnRQcm9wc1tpXVxuICAgICAgICAgICAgICAgID8gaXNWaXNpYmxlKGVsKVxuICAgICAgICAgICAgICAgICAgICA/IGdldFBvc2l0aW9uV2l0aE1hcmdpbihlbClcbiAgICAgICAgICAgICAgICAgICAgOiB7IG9wYWNpdHk6IDAgfVxuICAgICAgICAgICAgICAgIDogeyBvcGFjaXR5OiBpc1Zpc2libGUoZWwpID8gMSA6IDAgfVxuICAgICAgICAgICAgOiBmYWxzZVxuICAgICk7XG5cbiAgICBjb25zdCBwcm9wc0Zyb20gPSBwcm9wc1RvLm1hcCgocHJvcHMsIGkpID0+IHtcbiAgICAgICAgY29uc3QgZnJvbSA9IHBhcmVudChub2Rlc1tpXSkgPT09IHRhcmdldCAmJiAoY3VycmVudFByb3BzW2ldIHx8IGdldFByb3BzKG5vZGVzW2ldKSk7XG5cbiAgICAgICAgaWYgKCFmcm9tKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXByb3BzKSB7XG4gICAgICAgICAgICBkZWxldGUgZnJvbS5vcGFjaXR5O1xuICAgICAgICB9IGVsc2UgaWYgKCEoJ29wYWNpdHknIGluIHByb3BzKSkge1xuICAgICAgICAgICAgY29uc3QgeyBvcGFjaXR5IH0gPSBmcm9tO1xuXG4gICAgICAgICAgICBpZiAob3BhY2l0eSAlIDEpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5vcGFjaXR5ID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGZyb20ub3BhY2l0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmcm9tO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIFtwcm9wc1RvLCBwcm9wc0Zyb21dO1xufVxuXG5mdW5jdGlvbiByZXNldFByb3BzKGVsLCBwcm9wcykge1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wcykge1xuICAgICAgICBjc3MoZWwsIHByb3AsICcnKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldFBvc2l0aW9uV2l0aE1hcmdpbihlbCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gb2Zmc2V0KGVsKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIHRyYW5zZm9ybTogJycsXG4gICAgICAgIC4uLnBvc2l0aW9uKGVsKSxcbiAgICAgICAgLi4uY3NzKGVsLCBbJ21hcmdpblRvcCcsICdtYXJnaW5MZWZ0J10pLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGF3YWl0RnJhbWUoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVzb2x2ZSkpO1xufVxuIiwiaW1wb3J0IGZhZGUgZnJvbSAnLi9pbnRlcm5hbC9hbmltYXRlLWZhZGUnO1xuaW1wb3J0IHNsaWRlIGZyb20gJy4vaW50ZXJuYWwvYW5pbWF0ZS1zbGlkZSc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgICBkdXJhdGlvbjogTnVtYmVyLFxuICAgICAgICBhbmltYXRpb246IEJvb2xlYW4sXG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgZHVyYXRpb246IDE1MCxcbiAgICAgICAgYW5pbWF0aW9uOiAnc2xpZGUnLFxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGFuaW1hdGUoYWN0aW9uLCB0YXJnZXQgPSB0aGlzLiRlbCkge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuYW5pbWF0aW9uO1xuICAgICAgICAgICAgY29uc3QgYW5pbWF0aW9uRm4gPVxuICAgICAgICAgICAgICAgIG5hbWUgPT09ICdmYWRlJ1xuICAgICAgICAgICAgICAgICAgICA/IGZhZGVcbiAgICAgICAgICAgICAgICAgICAgOiBuYW1lID09PSAnZGVsYXllZC1mYWRlJ1xuICAgICAgICAgICAgICAgICAgICA/ICguLi5hcmdzKSA9PiBmYWRlKC4uLmFyZ3MsIDQwKVxuICAgICAgICAgICAgICAgICAgICA6IG5hbWVcbiAgICAgICAgICAgICAgICAgICAgPyBzbGlkZVxuICAgICAgICAgICAgICAgICAgICA6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gYW5pbWF0aW9uRm4oYWN0aW9uLCB0YXJnZXQsIHRoaXMuZHVyYXRpb24pLmNhdGNoKG5vb3ApO1xuICAgICAgICB9LFxuICAgIH0sXG59O1xuIiwiaW1wb3J0IEFuaW1hdGUgZnJvbSAnLi4vbWl4aW4vYW5pbWF0ZSc7XG5pbXBvcnQgeyBwYXJzZU9wdGlvbnMgfSBmcm9tICcuLi9hcGkvb3B0aW9ucyc7XG5pbXBvcnQge1xuICAgICQsXG4gICAgJCQsXG4gICAgYXBwZW5kLFxuICAgIGF0dHIsXG4gICAgY2xvc2VzdCxcbiAgICBjc3MsXG4gICAgZGF0YSxcbiAgICBlYWNoLFxuICAgIGZhc3Rkb20sXG4gICAgY2hpbGRyZW4gYXMgZ2V0Q2hpbGRyZW4sXG4gICAgaGFzQ2xhc3MsXG4gICAgaW5jbHVkZXMsXG4gICAgaXNFbXB0eSxcbiAgICBpc0VxdWFsLFxuICAgIGlzVGFnLFxuICAgIGlzVW5kZWZpbmVkLFxuICAgIG1hdGNoZXMsXG4gICAgdG9nZ2xlQ2xhc3MsXG4gICAgdHJpZ2dlcixcbn0gZnJvbSAndWlraXQtdXRpbCc7XG5pbXBvcnQgeyBrZXlNYXAgfSBmcm9tICcuLi91dGlsL2tleXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbWl4aW5zOiBbQW5pbWF0ZV0sXG5cbiAgICBhcmdzOiAndGFyZ2V0JyxcblxuICAgIHByb3BzOiB7XG4gICAgICAgIHRhcmdldDogQm9vbGVhbixcbiAgICAgICAgc2VsQWN0aXZlOiBCb29sZWFuLFxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgc2VsQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgYXR0ckl0ZW06ICd1ay1maWx0ZXItY29udHJvbCcsXG4gICAgICAgIGNsczogJ3VrLWFjdGl2ZScsXG4gICAgICAgIGR1cmF0aW9uOiAyNTAsXG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIHRvZ2dsZXMoeyBhdHRySXRlbSB9LCAkZWwpIHtcbiAgICAgICAgICAgIHJldHVybiAkJChgWyR7YXR0ckl0ZW19XSxbZGF0YS0ke2F0dHJJdGVtfV1gLCAkZWwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNoaWxkcmVuKHsgdGFyZ2V0IH0sICRlbCkge1xuICAgICAgICAgICAgcmV0dXJuICQkKGAke3RhcmdldH0gPiAqYCwgJGVsKTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgd2F0Y2g6IHtcbiAgICAgICAgdG9nZ2xlcyh0b2dnbGVzKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZXMgPSAkJCh0aGlzLnNlbEFjdGl2ZSwgdGhpcy4kZWwpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0b2dnbGUgb2YgdG9nZ2xlcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbEFjdGl2ZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3ModG9nZ2xlLCB0aGlzLmNscywgaW5jbHVkZXMoYWN0aXZlcywgdG9nZ2xlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGZpbmRCdXR0b24odG9nZ2xlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNUYWcoYnV0dG9uLCAnYScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHIoYnV0dG9uLCAncm9sZScsICdidXR0b24nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2hpbGRyZW4obGlzdCwgcHJldikge1xuICAgICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGV2ZW50czoge1xuICAgICAgICBuYW1lOiAnY2xpY2sga2V5ZG93bicsXG5cbiAgICAgICAgZGVsZWdhdGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gYFske3RoaXMuYXR0ckl0ZW19XSxbZGF0YS0ke3RoaXMuYXR0ckl0ZW19XWA7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaGFuZGxlcihlKSB7XG4gICAgICAgICAgICBpZiAoZS50eXBlID09PSAna2V5ZG93bicgJiYgZS5rZXlDb2RlICE9PSBrZXlNYXAuU1BBQ0UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjbG9zZXN0KGUudGFyZ2V0LCAnYSxidXR0b24nKSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5KGUuY3VycmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgYXBwbHkoZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0gbWVyZ2VTdGF0ZShlbCwgdGhpcy5hdHRySXRlbSwgdGhpcy5nZXRTdGF0ZSgpKTtcblxuICAgICAgICAgICAgaWYgKCFpc0VxdWFsU3RhdGUocHJldlN0YXRlLCBuZXdTdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBnZXRTdGF0ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBoYXNDbGFzcyhpdGVtLCB0aGlzLmNscykpXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoc3RhdGUsIGVsKSA9PiBtZXJnZVN0YXRlKGVsLCB0aGlzLmF0dHJJdGVtLCBzdGF0ZSksIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiB7ICcnOiAnJyB9LFxuICAgICAgICAgICAgICAgICAgICBzb3J0OiBbXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBzZXRTdGF0ZShzdGF0ZSwgYW5pbWF0ZSA9IHRydWUpIHtcbiAgICAgICAgICAgIHN0YXRlID0geyBmaWx0ZXI6IHsgJyc6ICcnIH0sIHNvcnQ6IFtdLCAuLi5zdGF0ZSB9O1xuXG4gICAgICAgICAgICB0cmlnZ2VyKHRoaXMuJGVsLCAnYmVmb3JlRmlsdGVyJywgW3RoaXMsIHN0YXRlXSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdG9nZ2xlIG9mIHRoaXMudG9nZ2xlcykge1xuICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHRvZ2dsZSwgdGhpcy5jbHMsIG1hdGNoRmlsdGVyKHRvZ2dsZSwgdGhpcy5hdHRySXRlbSwgc3RhdGUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgJCQodGhpcy50YXJnZXQsIHRoaXMuJGVsKS5tYXAoKHRhcmdldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5U3RhdGUoc3RhdGUsIHRhcmdldCwgZ2V0Q2hpbGRyZW4odGFyZ2V0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiR1cGRhdGUodGhpcy4kZWwpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW5pbWF0ZSA/IHRoaXMuYW5pbWF0ZShmaWx0ZXJGbiwgdGFyZ2V0KSA6IGZpbHRlckZuKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdhZnRlckZpbHRlcicsIFt0aGlzXSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlU3RhdGUoKSB7XG4gICAgICAgICAgICBmYXN0ZG9tLndyaXRlKCgpID0+IHRoaXMuc2V0U3RhdGUodGhpcy5nZXRTdGF0ZSgpLCBmYWxzZSkpO1xuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG5mdW5jdGlvbiBnZXRGaWx0ZXIoZWwsIGF0dHIpIHtcbiAgICByZXR1cm4gcGFyc2VPcHRpb25zKGRhdGEoZWwsIGF0dHIpLCBbJ2ZpbHRlciddKTtcbn1cblxuZnVuY3Rpb24gaXNFcXVhbFN0YXRlKHN0YXRlQSwgc3RhdGVCKSB7XG4gICAgcmV0dXJuIFsnZmlsdGVyJywgJ3NvcnQnXS5ldmVyeSgocHJvcCkgPT4gaXNFcXVhbChzdGF0ZUFbcHJvcF0sIHN0YXRlQltwcm9wXSkpO1xufVxuXG5mdW5jdGlvbiBhcHBseVN0YXRlKHN0YXRlLCB0YXJnZXQsIGNoaWxkcmVuKSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihzdGF0ZSk7XG5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKChlbCkgPT4gY3NzKGVsLCAnZGlzcGxheScsIHNlbGVjdG9yICYmICFtYXRjaGVzKGVsLCBzZWxlY3RvcikgPyAnbm9uZScgOiAnJykpO1xuXG4gICAgY29uc3QgW3NvcnQsIG9yZGVyXSA9IHN0YXRlLnNvcnQ7XG5cbiAgICBpZiAoc29ydCkge1xuICAgICAgICBjb25zdCBzb3J0ZWQgPSBzb3J0SXRlbXMoY2hpbGRyZW4sIHNvcnQsIG9yZGVyKTtcbiAgICAgICAgaWYgKCFpc0VxdWFsKHNvcnRlZCwgY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBhcHBlbmQodGFyZ2V0LCBzb3J0ZWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZVN0YXRlKGVsLCBhdHRyLCBzdGF0ZSkge1xuICAgIGNvbnN0IHsgZmlsdGVyLCBncm91cCwgc29ydCwgb3JkZXIgPSAnYXNjJyB9ID0gZ2V0RmlsdGVyKGVsLCBhdHRyKTtcblxuICAgIGlmIChmaWx0ZXIgfHwgaXNVbmRlZmluZWQoc29ydCkpIHtcbiAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmZpbHRlclsnJ107XG4gICAgICAgICAgICAgICAgc3RhdGUuZmlsdGVyW2dyb3VwXSA9IGZpbHRlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmZpbHRlcltncm91cF07XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eShzdGF0ZS5maWx0ZXIpIHx8ICcnIGluIHN0YXRlLmZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5maWx0ZXIgPSB7ICcnOiBmaWx0ZXIgfHwgJycgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5maWx0ZXIgPSB7ICcnOiBmaWx0ZXIgfHwgJycgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNVbmRlZmluZWQoc29ydCkpIHtcbiAgICAgICAgc3RhdGUuc29ydCA9IFtzb3J0LCBvcmRlcl07XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBtYXRjaEZpbHRlcihcbiAgICBlbCxcbiAgICBhdHRyLFxuICAgIHsgZmlsdGVyOiBzdGF0ZUZpbHRlciA9IHsgJyc6ICcnIH0sIHNvcnQ6IFtzdGF0ZVNvcnQsIHN0YXRlT3JkZXJdIH1cbikge1xuICAgIGNvbnN0IHsgZmlsdGVyID0gJycsIGdyb3VwID0gJycsIHNvcnQsIG9yZGVyID0gJ2FzYycgfSA9IGdldEZpbHRlcihlbCwgYXR0cik7XG5cbiAgICByZXR1cm4gaXNVbmRlZmluZWQoc29ydClcbiAgICAgICAgPyAoZ3JvdXAgaW4gc3RhdGVGaWx0ZXIgJiYgZmlsdGVyID09PSBzdGF0ZUZpbHRlcltncm91cF0pIHx8XG4gICAgICAgICAgICAgICghZmlsdGVyICYmIGdyb3VwICYmICEoZ3JvdXAgaW4gc3RhdGVGaWx0ZXIpICYmICFzdGF0ZUZpbHRlclsnJ10pXG4gICAgICAgIDogc3RhdGVTb3J0ID09PSBzb3J0ICYmIHN0YXRlT3JkZXIgPT09IG9yZGVyO1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rvcih7IGZpbHRlciB9KSB7XG4gICAgbGV0IHNlbGVjdG9yID0gJyc7XG4gICAgZWFjaChmaWx0ZXIsICh2YWx1ZSkgPT4gKHNlbGVjdG9yICs9IHZhbHVlIHx8ICcnKSk7XG4gICAgcmV0dXJuIHNlbGVjdG9yO1xufVxuXG5mdW5jdGlvbiBzb3J0SXRlbXMobm9kZXMsIHNvcnQsIG9yZGVyKSB7XG4gICAgcmV0dXJuIFsuLi5ub2Rlc10uc29ydChcbiAgICAgICAgKGEsIGIpID0+XG4gICAgICAgICAgICBkYXRhKGEsIHNvcnQpLmxvY2FsZUNvbXBhcmUoZGF0YShiLCBzb3J0KSwgdW5kZWZpbmVkLCB7IG51bWVyaWM6IHRydWUgfSkgKlxuICAgICAgICAgICAgKG9yZGVyID09PSAnYXNjJyB8fCAtMSlcbiAgICApO1xufVxuXG5mdW5jdGlvbiBmaW5kQnV0dG9uKGVsKSB7XG4gICAgcmV0dXJuICQoJ2EsYnV0dG9uJywgZWwpIHx8IGVsO1xufVxuIiwiaW1wb3J0IHsgY3NzIH0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBzbGlkZToge1xuICAgICAgICBzaG93KGRpcikge1xuICAgICAgICAgICAgcmV0dXJuIFt7IHRyYW5zZm9ybTogdHJhbnNsYXRlKGRpciAqIC0xMDApIH0sIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoKSB9XTtcbiAgICAgICAgfSxcblxuICAgICAgICBwZXJjZW50KGN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkKGN1cnJlbnQpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRyYW5zbGF0ZShwZXJjZW50LCBkaXIpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZShkaXIgKiAtMTAwICogcGVyY2VudCkgfSxcbiAgICAgICAgICAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKGRpciAqIDEwMCAqICgxIC0gcGVyY2VudCkpIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlZChlbCkge1xuICAgIHJldHVybiBNYXRoLmFicyhjc3MoZWwsICd0cmFuc2Zvcm0nKS5zcGxpdCgnLCcpWzRdIC8gZWwub2Zmc2V0V2lkdGgpIHx8IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUodmFsdWUgPSAwLCB1bml0ID0gJyUnKSB7XG4gICAgdmFsdWUgKz0gdmFsdWUgPyB1bml0IDogJyc7XG4gICAgcmV0dXJuIGB0cmFuc2xhdGUzZCgke3ZhbHVlfSwgMCwgMClgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUzZCh2YWx1ZSkge1xuICAgIHJldHVybiBgc2NhbGUzZCgke3ZhbHVlfSwgJHt2YWx1ZX0sIDEpYDtcbn1cbiIsImltcG9ydCBBbmltYXRpb25zLCB7IHNjYWxlM2QgfSBmcm9tICcuLi8uLi9taXhpbi9pbnRlcm5hbC9zbGlkZXNob3ctYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICd1aWtpdC11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIC4uLkFuaW1hdGlvbnMsXG4gICAgZmFkZToge1xuICAgICAgICBzaG93KCkge1xuICAgICAgICAgICAgcmV0dXJuIFt7IG9wYWNpdHk6IDAgfSwgeyBvcGFjaXR5OiAxIH1dO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBlcmNlbnQoY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIDEgLSBjc3MoY3VycmVudCwgJ29wYWNpdHknKTtcbiAgICAgICAgfSxcblxuICAgICAgICB0cmFuc2xhdGUocGVyY2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIFt7IG9wYWNpdHk6IDEgLSBwZXJjZW50IH0sIHsgb3BhY2l0eTogcGVyY2VudCB9XTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgc2NhbGU6IHtcbiAgICAgICAgc2hvdygpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06IHNjYWxlM2QoMSAtIDAuMikgfSxcbiAgICAgICAgICAgICAgICB7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogc2NhbGUzZCgxKSB9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcblxuICAgICAgICBwZXJjZW50KGN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiAxIC0gY3NzKGN1cnJlbnQsICdvcGFjaXR5Jyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdHJhbnNsYXRlKHBlcmNlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgeyBvcGFjaXR5OiAxIC0gcGVyY2VudCwgdHJhbnNmb3JtOiBzY2FsZTNkKDEgLSAwLjIgKiBwZXJjZW50KSB9LFxuICAgICAgICAgICAgICAgIHsgb3BhY2l0eTogcGVyY2VudCwgdHJhbnNmb3JtOiBzY2FsZTNkKDEgLSAwLjIgKyAwLjIgKiBwZXJjZW50KSB9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbiIsImltcG9ydCB7IGNsYW1wLCBjcmVhdGVFdmVudCwgY3NzLCBEZWZlcnJlZCwgbm9vcCwgVHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUcmFuc2l0aW9uZXIocHJldiwgbmV4dCwgZGlyLCB7IGFuaW1hdGlvbiwgZWFzaW5nIH0pIHtcbiAgICBjb25zdCB7IHBlcmNlbnQsIHRyYW5zbGF0ZSwgc2hvdyA9IG5vb3AgfSA9IGFuaW1hdGlvbjtcbiAgICBjb25zdCBwcm9wcyA9IHNob3coZGlyKTtcbiAgICBjb25zdCBkZWZlcnJlZCA9IG5ldyBEZWZlcnJlZCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGlyLFxuXG4gICAgICAgIHNob3coZHVyYXRpb24sIHBlcmNlbnQgPSAwLCBsaW5lYXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWluZyA9IGxpbmVhciA/ICdsaW5lYXInIDogZWFzaW5nO1xuICAgICAgICAgICAgZHVyYXRpb24gLT0gTWF0aC5yb3VuZChkdXJhdGlvbiAqIGNsYW1wKHBlcmNlbnQsIC0xLCAxKSk7XG5cbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlKHBlcmNlbnQpO1xuXG4gICAgICAgICAgICB0cmlnZ2VyVXBkYXRlKG5leHQsICdpdGVtaW4nLCB7IHBlcmNlbnQsIGR1cmF0aW9uLCB0aW1pbmcsIGRpciB9KTtcbiAgICAgICAgICAgIHRyaWdnZXJVcGRhdGUocHJldiwgJ2l0ZW1vdXQnLCB7IHBlcmNlbnQ6IDEgLSBwZXJjZW50LCBkdXJhdGlvbiwgdGltaW5nLCBkaXIgfSk7XG5cbiAgICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KG5leHQsIHByb3BzWzFdLCBkdXJhdGlvbiwgdGltaW5nKSxcbiAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KHByZXYsIHByb3BzWzBdLCBkdXJhdGlvbiwgdGltaW5nKSxcbiAgICAgICAgICAgIF0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCBub29wKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FuY2VsKCkge1xuICAgICAgICAgICAgVHJhbnNpdGlvbi5jYW5jZWwoW25leHQsIHByZXZdKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZXNldCgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wc1swXSkge1xuICAgICAgICAgICAgICAgIGNzcyhbbmV4dCwgcHJldl0sIHByb3AsICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBmb3J3YXJkKGR1cmF0aW9uLCBwZXJjZW50ID0gdGhpcy5wZXJjZW50KCkpIHtcbiAgICAgICAgICAgIFRyYW5zaXRpb24uY2FuY2VsKFtuZXh0LCBwcmV2XSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93KGR1cmF0aW9uLCBwZXJjZW50LCB0cnVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICB0cmFuc2xhdGUocGVyY2VudCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHRyYW5zbGF0ZShwZXJjZW50LCBkaXIpO1xuICAgICAgICAgICAgY3NzKG5leHQsIHByb3BzWzFdKTtcbiAgICAgICAgICAgIGNzcyhwcmV2LCBwcm9wc1swXSk7XG4gICAgICAgICAgICB0cmlnZ2VyVXBkYXRlKG5leHQsICdpdGVtdHJhbnNsYXRlaW4nLCB7IHBlcmNlbnQsIGRpciB9KTtcbiAgICAgICAgICAgIHRyaWdnZXJVcGRhdGUocHJldiwgJ2l0ZW10cmFuc2xhdGVvdXQnLCB7IHBlcmNlbnQ6IDEgLSBwZXJjZW50LCBkaXIgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGVyY2VudCgpIHtcbiAgICAgICAgICAgIHJldHVybiBwZXJjZW50KHByZXYgfHwgbmV4dCwgbmV4dCwgZGlyKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXREaXN0YW5jZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2Py5vZmZzZXRXaWR0aDtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiB0cmlnZ2VyVXBkYXRlKGVsLCB0eXBlLCBkYXRhKSB7XG4gICAgdHJpZ2dlcihlbCwgY3JlYXRlRXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlLCBkYXRhKSk7XG59XG4iLCJpbXBvcnQge1xuICAgICQsXG4gICAgJCQsXG4gICAgYXBwZW5kLFxuICAgIGF0dHIsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xvc2VzdCxcbiAgICBkYXRhLFxuICAgIGVtcHR5LFxuICAgIGlzTnVtZXJpYyxcbiAgICBtYXRjaGVzLFxuICAgIHRvRmxvYXQsXG4gICAgdG9nZ2xlQ2xhc3MsXG4gICAgdG9OdW1iZXIsXG59IGZyb20gJ3Vpa2l0LXV0aWwnO1xuaW1wb3J0IHsga2V5TWFwIH0gZnJvbSAnLi4vdXRpbC9rZXlzJztcbmltcG9ydCB7IGdlbmVyYXRlSWQgfSBmcm9tICcuLi9hcGkvaW5zdGFuY2UnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgaTE4bjoge1xuICAgICAgICBuZXh0OiAnTmV4dCBzbGlkZScsXG4gICAgICAgIHByZXZpb3VzOiAnUHJldmlvdXMgc2xpZGUnLFxuICAgICAgICBzbGlkZVg6ICdTbGlkZSAlcycsXG4gICAgICAgIHNsaWRlTGFiZWw6ICclcyBvZiAlcycsXG4gICAgICAgIHJvbGU6ICdTdHJpbmcnLFxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIHNlbE5hdjogZmFsc2UsXG4gICAgICAgIHJvbGU6ICdyZWdpb24nLFxuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgICBuYXYoeyBzZWxOYXYgfSwgJGVsKSB7XG4gICAgICAgICAgICByZXR1cm4gJChzZWxOYXYsICRlbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbmF2Q2hpbGRyZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4odGhpcy5uYXYpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNlbE5hdkl0ZW0oeyBhdHRySXRlbSB9KSB7XG4gICAgICAgICAgICByZXR1cm4gYFske2F0dHJJdGVtfV0sW2RhdGEtJHthdHRySXRlbX1dYDtcbiAgICAgICAgfSxcblxuICAgICAgICBuYXZJdGVtcyhfLCAkZWwpIHtcbiAgICAgICAgICAgIHJldHVybiAkJCh0aGlzLnNlbE5hdkl0ZW0sICRlbCk7XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHdhdGNoOiB7XG4gICAgICAgIG5hdihuYXYsIHByZXYpIHtcbiAgICAgICAgICAgIGF0dHIobmF2LCAncm9sZScsICd0YWJsaXN0Jyk7XG5cbiAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGxpc3QobGlzdCkge1xuICAgICAgICAgICAgYXR0cihsaXN0LCAncm9sZScsICdwcmVzZW50YXRpb24nKTtcbiAgICAgICAgfSxcblxuICAgICAgICBuYXZDaGlsZHJlbihjaGlsZHJlbikge1xuICAgICAgICAgICAgYXR0cihjaGlsZHJlbiwgJ3JvbGUnLCAncHJlc2VudGF0aW9uJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbmF2SXRlbXMoaXRlbXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbWQgPSBkYXRhKGVsLCB0aGlzLmF0dHJJdGVtKTtcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b24gPSAkKCdhLGJ1dHRvbicsIGVsKSB8fCBlbDtcblxuICAgICAgICAgICAgICAgIGxldCBhcmlhTGFiZWw7XG4gICAgICAgICAgICAgICAgbGV0IGFyaWFDb250cm9scyA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtZXJpYyhjbWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0b051bWJlcihjbWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzbGlkZSA9IHRoaXMuc2xpZGVzW2l0ZW1dO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzbGlkZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzbGlkZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlLmlkID0gZ2VuZXJhdGVJZCh0aGlzLCBzbGlkZSwgYC1pdGVtLSR7Y21kfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUNvbnRyb2xzID0gc2xpZGUuaWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWwgPSB0aGlzLnQoJ3NsaWRlWCcsIHRvRmxvYXQoY21kKSArIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgIGF0dHIoYnV0dG9uLCAncm9sZScsICd0YWInKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5saXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubGlzdC5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdC5pZCA9IGdlbmVyYXRlSWQodGhpcywgdGhpcy5saXN0LCAnLWl0ZW1zJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFDb250cm9scyA9IHRoaXMubGlzdC5pZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbCA9IHRoaXMudChjbWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGF0dHIoYnV0dG9uLCB7XG4gICAgICAgICAgICAgICAgICAgICdhcmlhLWNvbnRyb2xzJzogYXJpYUNvbnRyb2xzLFxuICAgICAgICAgICAgICAgICAgICAnYXJpYS1sYWJlbCc6IGF0dHIoYnV0dG9uLCAnYXJpYS1sYWJlbCcpIHx8IGFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBzbGlkZXMoc2xpZGVzKSB7XG4gICAgICAgICAgICBzbGlkZXMuZm9yRWFjaCgoc2xpZGUsIGkpID0+XG4gICAgICAgICAgICAgICAgYXR0cihzbGlkZSwge1xuICAgICAgICAgICAgICAgICAgICByb2xlOiB0aGlzLm5hdiA/ICd0YWJwYW5lbCcgOiAnZ3JvdXAnLFxuICAgICAgICAgICAgICAgICAgICAnYXJpYS1sYWJlbCc6IHRoaXMudCgnc2xpZGVMYWJlbCcsIGkgKyAxLCB0aGlzLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAgICdhcmlhLXJvbGVkZXNjcmlwdGlvbic6IHRoaXMubmF2ID8gbnVsbCA6ICdzbGlkZScsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbGVuZ3RoKGxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbmF2TGVuZ3RoID0gdGhpcy5uYXZDaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXYgJiYgbGVuZ3RoICE9PSBuYXZMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBlbXB0eSh0aGlzLm5hdik7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhcHBlbmQodGhpcy5uYXYsIGA8bGkgJHt0aGlzLmF0dHJJdGVtfT1cIiR7aX1cIj48YSBocmVmPjwvYT48L2xpPmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgY29ubmVjdGVkKCkge1xuICAgICAgICBhdHRyKHRoaXMuJGVsLCB7XG4gICAgICAgICAgICByb2xlOiB0aGlzLnJvbGUsXG4gICAgICAgICAgICBhcmlhUm9sZURlc2NyaXB0aW9uOiAnY2Fyb3VzZWwnLFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgdXBkYXRlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdyaXRlKCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2SXRlbXMuY29uY2F0KHRoaXMubmF2KS5mb3JFYWNoKChlbCkgPT4gZWwgJiYgKGVsLmhpZGRlbiA9ICF0aGlzLm1heEluZGV4KSk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVOYXYoKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGV2ZW50czogWydyZXNpemUnXSxcbiAgICAgICAgfSxcbiAgICBdLFxuXG4gICAgZXZlbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdjbGljayBrZXlkb3duJyxcblxuICAgICAgICAgICAgZGVsZWdhdGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsTmF2SXRlbTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGhhbmRsZXIoZSkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdChlLnRhcmdldCwgJ2EsYnV0dG9uJykgJiZcbiAgICAgICAgICAgICAgICAgICAgKGUudHlwZSA9PT0gJ2NsaWNrJyB8fCBlLmtleUNvZGUgPT09IGtleU1hcC5TUEFDRSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coZGF0YShlLmN1cnJlbnQsIHRoaXMuYXR0ckl0ZW0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdpdGVtc2hvdycsXG4gICAgICAgICAgICBoYW5kbGVyOiAndXBkYXRlTmF2JyxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAna2V5ZG93bicsXG5cbiAgICAgICAgICAgIGRlbGVnYXRlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbE5hdkl0ZW07XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGN1cnJlbnQsIGtleUNvZGUgfSA9IGU7XG4gICAgICAgICAgICAgICAgY29uc3QgY21kID0gZGF0YShjdXJyZW50LCB0aGlzLmF0dHJJdGVtKTtcblxuICAgICAgICAgICAgICAgIGlmICghaXNOdW1lcmljKGNtZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBpID1cbiAgICAgICAgICAgICAgICAgICAga2V5Q29kZSA9PT0ga2V5TWFwLkhPTUVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBrZXlDb2RlID09PSBrZXlNYXAuRU5EXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdsYXN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBrZXlDb2RlID09PSBrZXlNYXAuTEVGVFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAncHJldmlvdXMnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGtleUNvZGUgPT09IGtleU1hcC5SSUdIVFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmV4dCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgICAgICBpZiAofmkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdLFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgICB1cGRhdGVOYXYoKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0VmFsaWRJbmRleCgpO1xuICAgICAgICAgICAgbGV0IGZvY3VzO1xuICAgICAgICAgICAgbGV0IGZvY3VzRWw7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMubmF2SXRlbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbWQgPSBkYXRhKGVsLCB0aGlzLmF0dHJJdGVtKTtcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b24gPSAkKCdhLGJ1dHRvbicsIGVsKSB8fCBlbDtcblxuICAgICAgICAgICAgICAgIGlmIChpc051bWVyaWMoY21kKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdG9OdW1iZXIoY21kKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlID0gaXRlbSA9PT0gaW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoZWwsIHRoaXMuY2xzQWN0aXZlLCBhY3RpdmUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGF0dHIoYnV0dG9uLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYXJpYS1zZWxlY3RlZCc6IGFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4OiBhY3RpdmUgPyBudWxsIDogLTEsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzRWwgPSBidXR0b247XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmb2N1cyA9IGZvY3VzIHx8IG1hdGNoZXMoYnV0dG9uLCAnOmZvY3VzJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICBlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICd1ay1pbnZpc2libGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNtZCA9PT0gJ3ByZXZpb3VzJyAmJiBpbmRleCA9PT0gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNtZCA9PT0gJ25leHQnICYmIGluZGV4ID49IHRoaXMubWF4SW5kZXgpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChmb2N1cyAmJiBmb2N1c0VsKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRWwuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG4iLCJpbXBvcnQge1xuICAgIGNsb3Nlc3QsXG4gICAgY3NzLFxuICAgIGdldEV2ZW50UG9zLFxuICAgIGluY2x1ZGVzLFxuICAgIGlzUnRsLFxuICAgIGlzVG91Y2gsXG4gICAgbm9vcCxcbiAgICBvZmYsXG4gICAgb24sXG4gICAgc2VsSW5wdXQsXG4gICAgdG9BcnJheSxcbiAgICB0cmlnZ2VyLFxufSBmcm9tICd1aWtpdC11dGlsJztcblxuY29uc3QgcG9pbnRlck9wdGlvbnMgPSB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiB0cnVlIH07XG5jb25zdCBwb2ludGVyVXBPcHRpb25zID0geyBwYXNzaXZlOiB0cnVlLCBjYXB0dXJlOiB0cnVlIH07XG5jb25zdCBwb2ludGVyRG93biA9ICd0b3VjaHN0YXJ0IG1vdXNlZG93bic7XG5jb25zdCBwb2ludGVyTW92ZSA9ICd0b3VjaG1vdmUgbW91c2Vtb3ZlJztcbmNvbnN0IHBvaW50ZXJVcCA9ICd0b3VjaGVuZCB0b3VjaGNhbmNlbCBtb3VzZXVwIGNsaWNrIGlucHV0IHNjcm9sbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgICBkcmFnZ2FibGU6IEJvb2xlYW4sXG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgZHJhZ2dhYmxlOiB0cnVlLFxuICAgICAgICB0aHJlc2hvbGQ6IDEwLFxuICAgIH0sXG5cbiAgICBjcmVhdGVkKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBbJ3N0YXJ0JywgJ21vdmUnLCAnZW5kJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IGZuID0gdGhpc1trZXldO1xuICAgICAgICAgICAgdGhpc1trZXldID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSBnZXRFdmVudFBvcyhlKS54ICogKGlzUnRsID8gLTEgOiAxKTtcblxuICAgICAgICAgICAgICAgIHRoaXMucHJldlBvcyA9IHBvcyA9PT0gdGhpcy5wb3MgPyB0aGlzLnByZXZQb3MgOiB0aGlzLnBvcztcbiAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IHBvcztcblxuICAgICAgICAgICAgICAgIGZuKGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBldmVudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogcG9pbnRlckRvd24sXG5cbiAgICAgICAgICAgIHBhc3NpdmU6IHRydWUsXG5cbiAgICAgICAgICAgIGRlbGVnYXRlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLnNlbExpc3R9ID4gKmA7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmRyYWdnYWJsZSB8fFxuICAgICAgICAgICAgICAgICAgICAoIWlzVG91Y2goZSkgJiYgaGFzU2VsZWN0YWJsZVRleHQoZS50YXJnZXQpKSB8fFxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0KGUudGFyZ2V0LCBzZWxJbnB1dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgZS5idXR0b24gPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoIDwgMlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydChlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2RyYWdzdGFydCcsXG5cbiAgICAgICAgICAgIGhhbmRsZXIoZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaU9TIHdvcmthcm91bmQgZm9yIHNsaWRlciBzdG9wcGluZyBpZiBzd2lwaW5nIGZhc3RcbiAgICAgICAgICAgIG5hbWU6IHBvaW50ZXJNb3ZlLFxuICAgICAgICAgICAgZWwoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYW5kbGVyOiBub29wLFxuICAgICAgICAgICAgLi4ucG9pbnRlck9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgXSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgc3RhcnQoKSB7XG4gICAgICAgICAgICB0aGlzLmRyYWcgPSB0aGlzLnBvcztcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3RyYW5zaXRpb25lcikge1xuICAgICAgICAgICAgICAgIHRoaXMucGVyY2VudCA9IHRoaXMuX3RyYW5zaXRpb25lci5wZXJjZW50KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnICs9IHRoaXMuX3RyYW5zaXRpb25lci5nZXREaXN0YW5jZSgpICogdGhpcy5wZXJjZW50ICogdGhpcy5kaXI7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uZXIuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmVyLnRyYW5zbGF0ZSh0aGlzLnBlcmNlbnQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldkluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb24oZG9jdW1lbnQsIHBvaW50ZXJNb3ZlLCB0aGlzLm1vdmUsIHBvaW50ZXJPcHRpb25zKTtcblxuICAgICAgICAgICAgLy8gJ2lucHV0JyBldmVudCBpcyB0cmlnZ2VyZWQgYnkgdmlkZW8gY29udHJvbHNcbiAgICAgICAgICAgIG9uKGRvY3VtZW50LCBwb2ludGVyVXAsIHRoaXMuZW5kLCBwb2ludGVyVXBPcHRpb25zKTtcblxuICAgICAgICAgICAgY3NzKHRoaXMubGlzdCwgJ3VzZXJTZWxlY3QnLCAnbm9uZScpO1xuICAgICAgICB9LFxuXG4gICAgICAgIG1vdmUoZSkge1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSB0aGlzLnBvcyAtIHRoaXMuZHJhZztcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlID09PSAwIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2UG9zID09PSB0aGlzLnBvcyB8fFxuICAgICAgICAgICAgICAgICghdGhpcy5kcmFnZ2luZyAmJiBNYXRoLmFicyhkaXN0YW5jZSkgPCB0aGlzLnRocmVzaG9sZClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcHJldmVudCBjbGljayBldmVudFxuICAgICAgICAgICAgY3NzKHRoaXMubGlzdCwgJ3BvaW50ZXJFdmVudHMnLCAnbm9uZScpO1xuXG4gICAgICAgICAgICBlLmNhbmNlbGFibGUgJiYgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlyID0gZGlzdGFuY2UgPCAwID8gMSA6IC0xO1xuXG4gICAgICAgICAgICBjb25zdCB7IHNsaWRlcyB9ID0gdGhpcztcbiAgICAgICAgICAgIGxldCB7IHByZXZJbmRleCB9ID0gdGhpcztcbiAgICAgICAgICAgIGxldCBkaXMgPSBNYXRoLmFicyhkaXN0YW5jZSk7XG4gICAgICAgICAgICBsZXQgbmV4dEluZGV4ID0gdGhpcy5nZXRJbmRleChwcmV2SW5kZXggKyB0aGlzLmRpciwgcHJldkluZGV4KTtcbiAgICAgICAgICAgIGxldCB3aWR0aCA9IHRoaXMuX2dldERpc3RhbmNlKHByZXZJbmRleCwgbmV4dEluZGV4KSB8fCBzbGlkZXNbcHJldkluZGV4XS5vZmZzZXRXaWR0aDtcblxuICAgICAgICAgICAgd2hpbGUgKG5leHRJbmRleCAhPT0gcHJldkluZGV4ICYmIGRpcyA+IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnIC09IHdpZHRoICogdGhpcy5kaXI7XG5cbiAgICAgICAgICAgICAgICBwcmV2SW5kZXggPSBuZXh0SW5kZXg7XG4gICAgICAgICAgICAgICAgZGlzIC09IHdpZHRoO1xuICAgICAgICAgICAgICAgIG5leHRJbmRleCA9IHRoaXMuZ2V0SW5kZXgocHJldkluZGV4ICsgdGhpcy5kaXIsIHByZXZJbmRleCk7XG4gICAgICAgICAgICAgICAgd2lkdGggPSB0aGlzLl9nZXREaXN0YW5jZShwcmV2SW5kZXgsIG5leHRJbmRleCkgfHwgc2xpZGVzW3ByZXZJbmRleF0ub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucGVyY2VudCA9IGRpcyAvIHdpZHRoO1xuXG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gc2xpZGVzW3ByZXZJbmRleF07XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gc2xpZGVzW25leHRJbmRleF07XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5pbmRleCAhPT0gbmV4dEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZWRnZSA9IHByZXZJbmRleCA9PT0gbmV4dEluZGV4O1xuXG4gICAgICAgICAgICBsZXQgaXRlbVNob3duO1xuXG4gICAgICAgICAgICBbdGhpcy5pbmRleCwgdGhpcy5wcmV2SW5kZXhdXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoaSkgPT4gIWluY2x1ZGVzKFtuZXh0SW5kZXgsIHByZXZJbmRleF0sIGkpKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoc2xpZGVzW2ldLCAnaXRlbWhpZGRlbicsIFt0aGlzXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TaG93biA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZJbmRleCA9IHByZXZJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoKHRoaXMuaW5kZXggPT09IHByZXZJbmRleCAmJiB0aGlzLnByZXZJbmRleCAhPT0gcHJldkluZGV4KSB8fCBpdGVtU2hvd24pIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKHNsaWRlc1t0aGlzLmluZGV4XSwgJ2l0ZW1zaG93bicsIFt0aGlzXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2SW5kZXggPSBwcmV2SW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IG5leHRJbmRleDtcblxuICAgICAgICAgICAgICAgICFlZGdlICYmIHRyaWdnZXIocHJldiwgJ2JlZm9yZWl0ZW1oaWRlJywgW3RoaXNdKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKG5leHQsICdiZWZvcmVpdGVtc2hvdycsIFt0aGlzXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25lciA9IHRoaXMuX3RyYW5zbGF0ZShNYXRoLmFicyh0aGlzLnBlcmNlbnQpLCBwcmV2LCAhZWRnZSAmJiBuZXh0KTtcblxuICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAhZWRnZSAmJiB0cmlnZ2VyKHByZXYsICdpdGVtaGlkZScsIFt0aGlzXSk7XG4gICAgICAgICAgICAgICAgdHJpZ2dlcihuZXh0LCAnaXRlbXNob3cnLCBbdGhpc10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGVuZCgpIHtcbiAgICAgICAgICAgIG9mZihkb2N1bWVudCwgcG9pbnRlck1vdmUsIHRoaXMubW92ZSwgcG9pbnRlck9wdGlvbnMpO1xuICAgICAgICAgICAgb2ZmKGRvY3VtZW50LCBwb2ludGVyVXAsIHRoaXMuZW5kLCBwb2ludGVyVXBPcHRpb25zKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdnaW5nID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID09PSB0aGlzLnByZXZJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcmNlbnQgPSAxIC0gdGhpcy5wZXJjZW50O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpciAqPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hvdyhmYWxzZSwgdGhpcy5pbmRleCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlyQ2hhbmdlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIChpc1J0bCA/IHRoaXMuZGlyICogKGlzUnRsID8gMSA6IC0xKSA6IHRoaXMuZGlyKSA8IDAgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZQb3MgPiB0aGlzLnBvcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IGRpckNoYW5nZSA/IHRoaXMuaW5kZXggOiB0aGlzLnByZXZJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZGlyQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcmNlbnQgPSAxIC0gdGhpcy5wZXJjZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuZGlyID4gMCAmJiAhZGlyQ2hhbmdlKSB8fCAodGhpcy5kaXIgPCAwICYmIGRpckNoYW5nZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZXh0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3ByZXZpb3VzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNzcyh0aGlzLmxpc3QsIHsgdXNlclNlbGVjdDogJycsIHBvaW50ZXJFdmVudHM6ICcnIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmRyYWcgPSB0aGlzLnBlcmNlbnQgPSBudWxsO1xuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG5mdW5jdGlvbiBoYXNTZWxlY3RhYmxlVGV4dChlbCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIGNzcyhlbCwgJ3VzZXJTZWxlY3QnKSAhPT0gJ25vbmUnICYmXG4gICAgICAgIHRvQXJyYXkoZWwuY2hpbGROb2Rlcykuc29tZSgoZWwpID0+IGVsLm5vZGVUeXBlID09PSAzICYmIGVsLnRleHRDb250ZW50LnRyaW0oKSlcbiAgICApO1xufVxuIiwiaW1wb3J0IHsgYXR0ciwgbWF0Y2hlcyB9IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgICAgYXV0b3BsYXk6IEJvb2xlYW4sXG4gICAgICAgIGF1dG9wbGF5SW50ZXJ2YWw6IE51bWJlcixcbiAgICAgICAgcGF1c2VPbkhvdmVyOiBCb29sZWFuLFxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIGF1dG9wbGF5OiBmYWxzZSxcbiAgICAgICAgYXV0b3BsYXlJbnRlcnZhbDogNzAwMCxcbiAgICAgICAgcGF1c2VPbkhvdmVyOiB0cnVlLFxuICAgIH0sXG5cbiAgICBjb25uZWN0ZWQoKSB7XG4gICAgICAgIGF0dHIodGhpcy5saXN0LCAnYXJpYS1saXZlJywgdGhpcy5hdXRvcGxheSA/ICdvZmYnIDogJ3BvbGl0ZScpO1xuICAgICAgICB0aGlzLmF1dG9wbGF5ICYmIHRoaXMuc3RhcnRBdXRvcGxheSgpO1xuICAgIH0sXG5cbiAgICBkaXNjb25uZWN0ZWQoKSB7XG4gICAgICAgIHRoaXMuc3RvcEF1dG9wbGF5KCk7XG4gICAgfSxcblxuICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgYXR0cih0aGlzLnNsaWRlcywgJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgfSxcblxuICAgIGV2ZW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndmlzaWJpbGl0eWNoYW5nZScsXG5cbiAgICAgICAgICAgIGVsKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudDtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGZpbHRlcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hdXRvcGxheTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3BBdXRvcGxheSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRBdXRvcGxheSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgXSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgc3RhcnRBdXRvcGxheSgpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcEF1dG9wbGF5KCk7XG5cbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmRyYWdnYWJsZSAmJiBtYXRjaGVzKHRoaXMuJGVsLCAnOmZvY3VzLXdpdGhpbicpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMucGF1c2VPbkhvdmVyICYmIG1hdGNoZXModGhpcy4kZWwsICc6aG92ZXInKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coJ25leHQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzLmF1dG9wbGF5SW50ZXJ2YWwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHN0b3BBdXRvcGxheSgpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG4iLCJpbXBvcnQgSTE4biBmcm9tICcuL2kxOG4nO1xuaW1wb3J0IFNsaWRlck5hdiBmcm9tICcuL3NsaWRlci1uYXYnO1xuaW1wb3J0IFNsaWRlckRyYWcgZnJvbSAnLi9zbGlkZXItZHJhZyc7XG5pbXBvcnQgU2xpZGVyQXV0b3BsYXkgZnJvbSAnLi9zbGlkZXItYXV0b3BsYXknO1xuaW1wb3J0IHsgcmVzaXplIH0gZnJvbSAnLi4vYXBpL29ic2VydmFibGVzJztcbmltcG9ydCB7XG4gICAgJCxcbiAgICBjaGlsZHJlbixcbiAgICBjbGFtcCxcbiAgICBnZXRJbmRleCxcbiAgICBoYXNDbGFzcyxcbiAgICBpc051bWJlcixcbiAgICBpc1J0bCxcbiAgICByZW1vdmVDbGFzcyxcbiAgICB0cmlnZ2VyLFxufSBmcm9tICd1aWtpdC11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG1peGluczogW1NsaWRlckF1dG9wbGF5LCBTbGlkZXJEcmFnLCBTbGlkZXJOYXYsIEkxOG5dLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY2xzQWN0aXZhdGVkOiBCb29sZWFuLFxuICAgICAgICBlYXNpbmc6IFN0cmluZyxcbiAgICAgICAgaW5kZXg6IE51bWJlcixcbiAgICAgICAgZmluaXRlOiBCb29sZWFuLFxuICAgICAgICB2ZWxvY2l0eTogTnVtYmVyLFxuICAgIH0sXG5cbiAgICBkYXRhOiAoKSA9PiAoe1xuICAgICAgICBlYXNpbmc6ICdlYXNlJyxcbiAgICAgICAgZmluaXRlOiBmYWxzZSxcbiAgICAgICAgdmVsb2NpdHk6IDEsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBwcmV2SW5kZXg6IC0xLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIHBlcmNlbnQ6IDAsXG4gICAgICAgIGNsc0FjdGl2ZTogJ3VrLWFjdGl2ZScsXG4gICAgICAgIGNsc0FjdGl2YXRlZDogZmFsc2UsXG4gICAgICAgIFRyYW5zaXRpb25lcjogZmFsc2UsXG4gICAgICAgIHRyYW5zaXRpb25PcHRpb25zOiB7fSxcbiAgICB9KSxcblxuICAgIGNvbm5lY3RlZCgpIHtcbiAgICAgICAgdGhpcy5wcmV2SW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMuZ2V0VmFsaWRJbmRleCh0aGlzLiRwcm9wcy5pbmRleCk7XG4gICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICB9LFxuXG4gICAgZGlzY29ubmVjdGVkKCkge1xuICAgICAgICByZW1vdmVDbGFzcyh0aGlzLnNsaWRlcywgdGhpcy5jbHNBY3RpdmUpO1xuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgICBkdXJhdGlvbih7IHZlbG9jaXR5IH0sICRlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHNwZWVkVXAoJGVsLm9mZnNldFdpZHRoIC8gdmVsb2NpdHkpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGxpc3QoeyBzZWxMaXN0IH0sICRlbCkge1xuICAgICAgICAgICAgcmV0dXJuICQoc2VsTGlzdCwgJGVsKTtcbiAgICAgICAgfSxcblxuICAgICAgICBtYXhJbmRleCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCAtIDE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2xpZGVzKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuKHRoaXMubGlzdCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbGVuZ3RoKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzLmxlbmd0aDtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgd2F0Y2g6IHtcbiAgICAgICAgc2xpZGVzKHNsaWRlcywgcHJldikge1xuICAgICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIG9ic2VydmU6IHJlc2l6ZSgpLFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgICBzaG93KGluZGV4LCBmb3JjZSA9IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kcmFnZ2luZyB8fCAhdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHsgc3RhY2sgfSA9IHRoaXM7XG4gICAgICAgICAgICBjb25zdCBxdWV1ZUluZGV4ID0gZm9yY2UgPyAwIDogc3RhY2subGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKHF1ZXVlSW5kZXgsIDEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coc3RhY2suc2hpZnQoKSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc3RhY2tbZm9yY2UgPyAndW5zaGlmdCcgOiAncHVzaCddKGluZGV4KTtcblxuICAgICAgICAgICAgaWYgKCFmb3JjZSAmJiBzdGFjay5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uZXI/LmZvcndhcmQoTWF0aC5taW4odGhpcy5kdXJhdGlvbiwgMjAwKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcmV2SW5kZXggPSB0aGlzLmdldEluZGV4KHRoaXMuaW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgcHJldiA9IGhhc0NsYXNzKHRoaXMuc2xpZGVzLCB0aGlzLmNsc0FjdGl2ZSkgJiYgdGhpcy5zbGlkZXNbcHJldkluZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IHRoaXMuZ2V0SW5kZXgoaW5kZXgsIHRoaXMuaW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuc2xpZGVzW25leHRJbmRleF07XG5cbiAgICAgICAgICAgIGlmIChwcmV2ID09PSBuZXh0KSB7XG4gICAgICAgICAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlyID0gZ2V0RGlyZWN0aW9uKGluZGV4LCBwcmV2SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5wcmV2SW5kZXggPSBwcmV2SW5kZXg7XG4gICAgICAgICAgICB0aGlzLmluZGV4ID0gbmV4dEluZGV4O1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKHByZXYgJiYgIXRyaWdnZXIocHJldiwgJ2JlZm9yZWl0ZW1oaWRlJywgW3RoaXNdKSkgfHxcbiAgICAgICAgICAgICAgICAhdHJpZ2dlcihuZXh0LCAnYmVmb3JlaXRlbXNob3cnLCBbdGhpcywgcHJldl0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy5wcmV2SW5kZXg7XG4gICAgICAgICAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9zaG93KHByZXYsIG5leHQsIGZvcmNlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBwcmV2ICYmIHRyaWdnZXIocHJldiwgJ2l0ZW1oaWRkZW4nLCBbdGhpc10pO1xuICAgICAgICAgICAgICAgIHRyaWdnZXIobmV4dCwgJ2l0ZW1zaG93bicsIFt0aGlzXSk7XG5cbiAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25lciA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gc3RhY2subGVuZ3RoICYmIHRoaXMuc2hvdyhzdGFjay5zaGlmdCgpLCB0cnVlKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcHJldiAmJiB0cmlnZ2VyKHByZXYsICdpdGVtaGlkZScsIFt0aGlzXSk7XG4gICAgICAgICAgICB0cmlnZ2VyKG5leHQsICdpdGVtc2hvdycsIFt0aGlzXSk7XG5cbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEluZGV4KGluZGV4ID0gdGhpcy5pbmRleCwgcHJldiA9IHRoaXMuaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBjbGFtcChcbiAgICAgICAgICAgICAgICBnZXRJbmRleChpbmRleCwgdGhpcy5zbGlkZXMsIHByZXYsIHRoaXMuZmluaXRlKSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIE1hdGgubWF4KDAsIHRoaXMubWF4SW5kZXgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldFZhbGlkSW5kZXgoaW5kZXggPSB0aGlzLmluZGV4LCBwcmV2SW5kZXggPSB0aGlzLnByZXZJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SW5kZXgoaW5kZXgsIHByZXZJbmRleCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX3Nob3cocHJldiwgbmV4dCwgZm9yY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25lciA9IHRoaXMuX2dldFRyYW5zaXRpb25lcihwcmV2LCBuZXh0LCB0aGlzLmRpciwge1xuICAgICAgICAgICAgICAgIGVhc2luZzogZm9yY2VcbiAgICAgICAgICAgICAgICAgICAgPyBuZXh0Lm9mZnNldFdpZHRoIDwgNjAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCknIC8qIGVhc2VPdXRRdWFkICovXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQsIDAuNDQsIDEpJyAvKiBlYXNlT3V0UXVhcnQgKi9cbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmVhc2luZyxcbiAgICAgICAgICAgICAgICAuLi50aGlzLnRyYW5zaXRpb25PcHRpb25zLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghZm9yY2UgJiYgIXByZXYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUoMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7IGxlbmd0aCB9ID0gdGhpcy5zdGFjaztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2l0aW9uZXJbbGVuZ3RoID4gMSA/ICdmb3J3YXJkJyA6ICdzaG93J10oXG4gICAgICAgICAgICAgICAgbGVuZ3RoID4gMSA/IE1hdGgubWluKHRoaXMuZHVyYXRpb24sIDc1ICsgNzUgLyAobGVuZ3RoIC0gMSkpIDogdGhpcy5kdXJhdGlvbixcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmNlbnRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2dldERpc3RhbmNlKHByZXYsIG5leHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRUcmFuc2l0aW9uZXIocHJldiwgcHJldiAhPT0gbmV4dCAmJiBuZXh0KS5nZXREaXN0YW5jZSgpO1xuICAgICAgICB9LFxuXG4gICAgICAgIF90cmFuc2xhdGUocGVyY2VudCwgcHJldiA9IHRoaXMucHJldkluZGV4LCBuZXh0ID0gdGhpcy5pbmRleCkge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNpdGlvbmVyID0gdGhpcy5fZ2V0VHJhbnNpdGlvbmVyKHByZXYgPT09IG5leHQgPyBmYWxzZSA6IHByZXYsIG5leHQpO1xuICAgICAgICAgICAgdHJhbnNpdGlvbmVyLnRyYW5zbGF0ZShwZXJjZW50KTtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2l0aW9uZXI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2dldFRyYW5zaXRpb25lcihcbiAgICAgICAgICAgIHByZXYgPSB0aGlzLnByZXZJbmRleCxcbiAgICAgICAgICAgIG5leHQgPSB0aGlzLmluZGV4LFxuICAgICAgICAgICAgZGlyID0gdGhpcy5kaXIgfHwgMSxcbiAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLnRyYW5zaXRpb25PcHRpb25zXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLlRyYW5zaXRpb25lcihcbiAgICAgICAgICAgICAgICBpc051bWJlcihwcmV2KSA/IHRoaXMuc2xpZGVzW3ByZXZdIDogcHJldixcbiAgICAgICAgICAgICAgICBpc051bWJlcihuZXh0KSA/IHRoaXMuc2xpZGVzW25leHRdIDogbmV4dCxcbiAgICAgICAgICAgICAgICBkaXIgKiAoaXNSdGwgPyAtMSA6IDEpLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5cbmZ1bmN0aW9uIGdldERpcmVjdGlvbihpbmRleCwgcHJldkluZGV4KSB7XG4gICAgcmV0dXJuIGluZGV4ID09PSAnbmV4dCcgPyAxIDogaW5kZXggPT09ICdwcmV2aW91cycgPyAtMSA6IGluZGV4IDwgcHJldkluZGV4ID8gLTEgOiAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BlZWRVcCh4KSB7XG4gICAgcmV0dXJuIDAuNSAqIHggKyAzMDA7IC8vIHBhcmFib2xhIHRocm91Z2ggKDQwMCw1MDA7IDYwMCw2MDA7IDE4MDAsMTIwMClcbn1cbiIsImltcG9ydCBBbmltYXRpb25zIGZyb20gJy4vaW50ZXJuYWwvc2xpZGVzaG93LWFuaW1hdGlvbnMnO1xuaW1wb3J0IFRyYW5zaXRpb25lciBmcm9tICcuL2ludGVybmFsL3NsaWRlc2hvdy10cmFuc2l0aW9uZXInO1xuaW1wb3J0IFNsaWRlciBmcm9tICcuL3NsaWRlci5qcyc7XG5pbXBvcnQgeyBhZGRDbGFzcywgcmVtb3ZlQ2xhc3MgfSBmcm9tICd1aWtpdC11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG1peGluczogW1NsaWRlcl0sXG5cbiAgICBwcm9wczoge1xuICAgICAgICBhbmltYXRpb246IFN0cmluZyxcbiAgICB9LFxuXG4gICAgZGF0YToge1xuICAgICAgICBhbmltYXRpb246ICdzbGlkZScsXG4gICAgICAgIGNsc0FjdGl2YXRlZDogJ3VrLXRyYW5zaXRpb24tYWN0aXZlJyxcbiAgICAgICAgQW5pbWF0aW9ucyxcbiAgICAgICAgVHJhbnNpdGlvbmVyLFxuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgICBhbmltYXRpb24oeyBhbmltYXRpb24sIEFuaW1hdGlvbnMgfSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uKEFuaW1hdGlvbnNbYW5pbWF0aW9uXSB8fCBBbmltYXRpb25zLnNsaWRlKSwgbmFtZTogYW5pbWF0aW9uIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgdHJhbnNpdGlvbk9wdGlvbnMoKSB7XG4gICAgICAgICAgICByZXR1cm4geyBhbmltYXRpb246IHRoaXMuYW5pbWF0aW9uIH07XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGV2ZW50czoge1xuICAgICAgICBiZWZvcmVpdGVtc2hvdyh7IHRhcmdldCB9KSB7XG4gICAgICAgICAgICBhZGRDbGFzcyh0YXJnZXQsIHRoaXMuY2xzQWN0aXZlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBpdGVtc2hvd24oeyB0YXJnZXQgfSkge1xuICAgICAgICAgICAgYWRkQ2xhc3ModGFyZ2V0LCB0aGlzLmNsc0FjdGl2YXRlZCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaXRlbWhpZGRlbih7IHRhcmdldCB9KSB7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0YXJnZXQsIHRoaXMuY2xzQWN0aXZlLCB0aGlzLmNsc0FjdGl2YXRlZCk7XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG4iLCJpbXBvcnQgQW5pbWF0aW9ucyBmcm9tICcuL2ludGVybmFsL2xpZ2h0Ym94LWFuaW1hdGlvbnMnO1xuaW1wb3J0IE1vZGFsIGZyb20gJy4uL21peGluL21vZGFsJztcbmltcG9ydCBTbGlkZXNob3cgZnJvbSAnLi4vbWl4aW4vc2xpZGVzaG93JztcbmltcG9ydCB7IGtleU1hcCB9IGZyb20gJy4uL3V0aWwva2V5cyc7XG5pbXBvcnQge1xuICAgICQsXG4gICAgYWRkQ2xhc3MsXG4gICAgYXBwZW5kLFxuICAgIGF0dHIsXG4gICAgZnJhZ21lbnQsXG4gICAgZ2V0SW5kZXgsXG4gICAgaHRtbCxcbiAgICBvbixcbiAgICBwb2ludGVyRG93bixcbiAgICBwb2ludGVyTW92ZSxcbiAgICByZW1vdmVDbGFzcyxcbiAgICBUcmFuc2l0aW9uLFxuICAgIHRyaWdnZXIsXG59IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbWl4aW5zOiBbTW9kYWwsIFNsaWRlc2hvd10sXG5cbiAgICBmdW5jdGlvbmFsOiB0cnVlLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGVsYXlDb250cm9sczogTnVtYmVyLFxuICAgICAgICBwcmVsb2FkOiBOdW1iZXIsXG4gICAgICAgIHZpZGVvQXV0b3BsYXk6IEJvb2xlYW4sXG4gICAgICAgIHRlbXBsYXRlOiBTdHJpbmcsXG4gICAgfSxcblxuICAgIGRhdGE6ICgpID0+ICh7XG4gICAgICAgIHByZWxvYWQ6IDEsXG4gICAgICAgIHZpZGVvQXV0b3BsYXk6IGZhbHNlLFxuICAgICAgICBkZWxheUNvbnRyb2xzOiAzMDAwLFxuICAgICAgICBpdGVtczogW10sXG4gICAgICAgIGNsczogJ3VrLW9wZW4nLFxuICAgICAgICBjbHNQYWdlOiAndWstbGlnaHRib3gtcGFnZScsXG4gICAgICAgIHNlbExpc3Q6ICcudWstbGlnaHRib3gtaXRlbXMnLFxuICAgICAgICBhdHRySXRlbTogJ3VrLWxpZ2h0Ym94LWl0ZW0nLFxuICAgICAgICBzZWxDbG9zZTogJy51ay1jbG9zZS1sYXJnZScsXG4gICAgICAgIHNlbENhcHRpb246ICcudWstbGlnaHRib3gtY2FwdGlvbicsXG4gICAgICAgIHBhdXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgICAgIHZlbG9jaXR5OiAyLFxuICAgICAgICBBbmltYXRpb25zLFxuICAgICAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJ1ay1saWdodGJveCB1ay1vdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInVrLWxpZ2h0Ym94LWl0ZW1zXCI+PC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1ay1saWdodGJveC10b29sYmFyIHVrLXBvc2l0aW9uLXRvcCB1ay10ZXh0LXJpZ2h0IHVrLXRyYW5zaXRpb24tc2xpZGUtdG9wIHVrLXRyYW5zaXRpb24tb3BhcXVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInVrLWxpZ2h0Ym94LXRvb2xiYXItaWNvbiB1ay1jbG9zZS1sYXJnZVwiIHR5cGU9XCJidXR0b25cIiB1ay1jbG9zZT48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwidWstbGlnaHRib3gtYnV0dG9uIHVrLXBvc2l0aW9uLWNlbnRlci1sZWZ0IHVrLXBvc2l0aW9uLW1lZGl1bSB1ay10cmFuc2l0aW9uLWZhZGVcIiBocmVmIHVrLXNsaWRlbmF2LXByZXZpb3VzIHVrLWxpZ2h0Ym94LWl0ZW09XCJwcmV2aW91c1wiPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwidWstbGlnaHRib3gtYnV0dG9uIHVrLXBvc2l0aW9uLWNlbnRlci1yaWdodCB1ay1wb3NpdGlvbi1tZWRpdW0gdWstdHJhbnNpdGlvbi1mYWRlXCIgaHJlZiB1ay1zbGlkZW5hdi1uZXh0IHVrLWxpZ2h0Ym94LWl0ZW09XCJuZXh0XCI+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVrLWxpZ2h0Ym94LXRvb2xiYXIgdWstbGlnaHRib3gtY2FwdGlvbiB1ay1wb3NpdGlvbi1ib3R0b20gdWstdGV4dC1jZW50ZXIgdWstdHJhbnNpdGlvbi1zbGlkZS1ib3R0b20gdWstdHJhbnNpdGlvbi1vcGFxdWVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCxcbiAgICB9KSxcblxuICAgIGNyZWF0ZWQoKSB7XG4gICAgICAgIGNvbnN0ICRlbCA9ICQodGhpcy50ZW1wbGF0ZSk7XG4gICAgICAgIGNvbnN0IGxpc3QgPSAkKHRoaXMuc2VsTGlzdCwgJGVsKTtcbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKCgpID0+IGFwcGVuZChsaXN0LCAnPGxpPicpKTtcblxuICAgICAgICBjb25zdCBjbG9zZSA9ICQoJ1t1ay1jbG9zZV0nLCAkZWwpO1xuICAgICAgICBjb25zdCBjbG9zZUxhYmVsID0gdGhpcy50KCdjbG9zZScpO1xuICAgICAgICBpZiAoY2xvc2UgJiYgY2xvc2VMYWJlbCkge1xuICAgICAgICAgICAgY2xvc2UuZGF0YXNldC5pMThuID0gSlNPTi5zdHJpbmdpZnkoeyBsYWJlbDogY2xvc2VMYWJlbCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJG1vdW50KGFwcGVuZCh0aGlzLmNvbnRhaW5lciwgJGVsKSk7XG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIGNhcHRpb24oeyBzZWxDYXB0aW9uIH0sICRlbCkge1xuICAgICAgICAgICAgcmV0dXJuICQoc2VsQ2FwdGlvbiwgJGVsKTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgZXZlbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IGAke3BvaW50ZXJNb3ZlfSAke3BvaW50ZXJEb3dufSBrZXlkb3duYCxcblxuICAgICAgICAgICAgaGFuZGxlcjogJ3Nob3dDb250cm9scycsXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2NsaWNrJyxcblxuICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgZGVsZWdhdGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VsTGlzdH0gPiAqYDtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGhhbmRsZXIoZSkge1xuICAgICAgICAgICAgICAgIGlmICghZS5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3Nob3duJyxcblxuICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgaGFuZGxlcigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dDb250cm9scygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnaGlkZScsXG5cbiAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQ29udHJvbHMoKTtcblxuICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuc2xpZGVzLCB0aGlzLmNsc0FjdGl2ZSk7XG4gICAgICAgICAgICAgICAgVHJhbnNpdGlvbi5zdG9wKHRoaXMuc2xpZGVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2hpZGRlbicsXG5cbiAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZGVzdHJveSh0cnVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2tleXVwJyxcblxuICAgICAgICAgICAgZWwoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaGFuZGxlcih7IGtleUNvZGUgfSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1RvZ2dsZWQodGhpcy4kZWwpIHx8ICF0aGlzLmRyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGkgPSAtMTtcblxuICAgICAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSBrZXlNYXAuTEVGVCkge1xuICAgICAgICAgICAgICAgICAgICBpID0gJ3ByZXZpb3VzJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT09IGtleU1hcC5SSUdIVCkge1xuICAgICAgICAgICAgICAgICAgICBpID0gJ25leHQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PT0ga2V5TWFwLkhPTUUpIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09PSBrZXlNYXAuRU5EKSB7XG4gICAgICAgICAgICAgICAgICAgIGkgPSAnbGFzdCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKH5pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdyhpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdiZWZvcmVpdGVtc2hvdycsXG5cbiAgICAgICAgICAgIGhhbmRsZXIoZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVG9nZ2xlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdnYWJsZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVFbGVtZW50KHRoaXMuJGVsLCB0cnVlLCBmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGlvbiA9IEFuaW1hdGlvbnNbJ3NjYWxlJ107XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoZS50YXJnZXQsIHRoaXMuY2xzQWN0aXZlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnNwbGljZSgxLCAwLCB0aGlzLmluZGV4KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2l0ZW1zaG93JyxcblxuICAgICAgICAgICAgaGFuZGxlcigpIHtcbiAgICAgICAgICAgICAgICBodG1sKHRoaXMuY2FwdGlvbiwgdGhpcy5nZXRJdGVtKCkuY2FwdGlvbiB8fCAnJyk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gLXRoaXMucHJlbG9hZDsgaiA8PSB0aGlzLnByZWxvYWQ7IGorKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRJdGVtKHRoaXMuaW5kZXggKyBqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdpdGVtc2hvd24nLFxuXG4gICAgICAgICAgICBoYW5kbGVyKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dhYmxlID0gdGhpcy4kcHJvcHMuZHJhZ2dhYmxlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnaXRlbWxvYWQnLFxuXG4gICAgICAgICAgICBhc3luYyBoYW5kbGVyKF8sIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNvdXJjZTogc3JjLCB0eXBlLCBhbHQgPSAnJywgcG9zdGVyLCBhdHRycyA9IHt9IH0gPSBpdGVtO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJdGVtKGl0ZW0sICc8c3BhbiB1ay1zcGlubmVyPjwvc3Bhbj4nKTtcblxuICAgICAgICAgICAgICAgIGlmICghc3JjKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlcztcbiAgICAgICAgICAgICAgICBjb25zdCBpZnJhbWVBdHRycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dmdWxsc2NyZWVuOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6ICdtYXgtd2lkdGg6IDEwMCU7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7JyxcbiAgICAgICAgICAgICAgICAgICAgJ3VrLXJlc3BvbnNpdmUnOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgJ3VrLXZpZGVvJzogYCR7dGhpcy52aWRlb0F1dG9wbGF5fWAsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8vIEltYWdlXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSAnaW1hZ2UnIHx8XG4gICAgICAgICAgICAgICAgICAgIHNyYy5tYXRjaCgvXFwuKGF2aWZ8anBlP2d8amZpZnxhP3BuZ3xnaWZ8c3ZnfHdlYnApKCR8XFw/KS9pKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWcgPSBjcmVhdGVFbCgnaW1nJywgeyBzcmMsIGFsdCwgLi4uYXR0cnMgfSk7XG4gICAgICAgICAgICAgICAgICAgIG9uKGltZywgJ2xvYWQnLCAoKSA9PiB0aGlzLnNldEl0ZW0oaXRlbSwgaW1nKSk7XG4gICAgICAgICAgICAgICAgICAgIG9uKGltZywgJ2Vycm9yJywgKCkgPT4gdGhpcy5zZXRFcnJvcihpdGVtKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVmlkZW9cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd2aWRlbycgfHwgc3JjLm1hdGNoKC9cXC4obXA0fHdlYm18b2d2KSgkfFxcPykvaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlkZW8gPSBjcmVhdGVFbCgndmlkZW8nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmMsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3N0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sczogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5c2lubGluZTogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAndWstdmlkZW8nOiBgJHt0aGlzLnZpZGVvQXV0b3BsYXl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmF0dHJzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBvbih2aWRlbywgJ2xvYWRlZG1ldGFkYXRhJywgKCkgPT4gdGhpcy5zZXRJdGVtKGl0ZW0sIHZpZGVvKSk7XG4gICAgICAgICAgICAgICAgICAgIG9uKHZpZGVvLCAnZXJyb3InLCAoKSA9PiB0aGlzLnNldEVycm9yKGl0ZW0pKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJZnJhbWVcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpZnJhbWUnIHx8IHNyYy5tYXRjaCgvXFwuKGh0bWx8cGhwKSgkfFxcPykvaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJdGVtKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsKCdpZnJhbWUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZnVsbHNjcmVlbjogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6ICd1ay1saWdodGJveC1pZnJhbWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmF0dHJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBZb3VUdWJlXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKG1hdGNoZXMgPSBzcmMubWF0Y2goXG4gICAgICAgICAgICAgICAgICAgICAgICAvXFwvXFwvKD86Lio/eW91dHViZSgtbm9jb29raWUpP1xcLi4qPyg/Ols/Jl12PXxcXC9zaG9ydHNcXC8pfHlvdXR1XFwuYmVcXC8pKFtcXHctXXsxMX0pWyY/XT8oLiopPy9cbiAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJdGVtKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsKCdpZnJhbWUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiBgaHR0cHM6Ly93d3cueW91dHViZSR7bWF0Y2hlc1sxXSB8fCAnJ30uY29tL2VtYmVkLyR7bWF0Y2hlc1syXX0ke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzWzNdID8gYD8ke21hdGNoZXNbM119YCA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDE5MjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmlmcmFtZUF0dHJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmF0dHJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBWaW1lb1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoZXMgPSBzcmMubWF0Y2goL1xcL1xcLy4qP3ZpbWVvXFwuW2Etel0rXFwvKFxcZCspWyY/XT8oLiopPy8pKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoIH0gPSBhd2FpdCAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZmV0Y2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBodHRwczovL3ZpbWVvLmNvbS9hcGkvb2VtYmVkLmpzb24/bWF4d2lkdGg9MTkyMCZ1cmw9JHtlbmNvZGVVUkkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGNyZWRlbnRpYWxzOiAnb21pdCcgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkuanNvbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW0oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbCgnaWZyYW1lJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM6IGBodHRwczovL3BsYXllci52aW1lby5jb20vdmlkZW8vJHttYXRjaGVzWzFdfSR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzWzJdID8gYD8ke21hdGNoZXNbMl19YCA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pZnJhbWVBdHRycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYXR0cnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RXJyb3IoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGxvYWRJdGVtKGluZGV4ID0gdGhpcy5pbmRleCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbShpbmRleCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5nZXRTbGlkZShpdGVtKS5jaGlsZEVsZW1lbnRDb3VudCkge1xuICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdpdGVtbG9hZCcsIFtpdGVtXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0SXRlbShpbmRleCA9IHRoaXMuaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1zW2dldEluZGV4KGluZGV4LCB0aGlzLnNsaWRlcyldO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldEl0ZW0oaXRlbSwgY29udGVudCkge1xuICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ2l0ZW1sb2FkZWQnLCBbdGhpcywgaHRtbCh0aGlzLmdldFNsaWRlKGl0ZW0pLCBjb250ZW50KV0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldFNsaWRlKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlc1t0aGlzLml0ZW1zLmluZGV4T2YoaXRlbSldO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldEVycm9yKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SXRlbShpdGVtLCAnPHNwYW4gdWstaWNvbj1cImljb246IGJvbHQ7IHJhdGlvOiAyXCI+PC9zcGFuPicpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNob3dDb250cm9scygpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNvbnRyb2xzVGltZXIpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sc1RpbWVyID0gc2V0VGltZW91dCh0aGlzLmhpZGVDb250cm9scywgdGhpcy5kZWxheUNvbnRyb2xzKTtcblxuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsICd1ay1hY3RpdmUnLCAndWstdHJhbnNpdGlvbi1hY3RpdmUnKTtcbiAgICAgICAgfSxcblxuICAgICAgICBoaWRlQ29udHJvbHMoKSB7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLiRlbCwgJ3VrLWFjdGl2ZScsICd1ay10cmFuc2l0aW9uLWFjdGl2ZScpO1xuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVFbCh0YWcsIGF0dHJzKSB7XG4gICAgY29uc3QgZWwgPSBmcmFnbWVudChgPCR7dGFnfT5gKTtcbiAgICBhdHRyKGVsLCBhdHRycyk7XG4gICAgcmV0dXJuIGVsO1xufVxuIiwiaW1wb3J0IExpZ2h0Ym94UGFuZWwgZnJvbSAnLi9saWdodGJveC1wYW5lbCc7XG5pbXBvcnQgeyBwYXJzZU9wdGlvbnMgfSBmcm9tICcuLi9hcGkvb3B0aW9ucyc7XG5pbXBvcnQgeyAkJCwgYXNzaWduLCBhdHRyLCBkYXRhLCBmaW5kSW5kZXgsIGlzRWxlbWVudCwgaXNUYWcsIG9uLCB1bmlxdWVCeSB9IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgaW5zdGFsbCxcblxuICAgIHByb3BzOiB7IHRvZ2dsZTogU3RyaW5nIH0sXG5cbiAgICBkYXRhOiB7IHRvZ2dsZTogJ2EnIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgICB0b2dnbGVzKHsgdG9nZ2xlIH0sICRlbCkge1xuICAgICAgICAgICAgcmV0dXJuICQkKHRvZ2dsZSwgJGVsKTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgd2F0Y2g6IHtcbiAgICAgICAgdG9nZ2xlcyh0b2dnbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdG9nZ2xlIG9mIHRvZ2dsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNUYWcodG9nZ2xlLCAnYScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHIodG9nZ2xlLCAncm9sZScsICdidXR0b24nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGRpc2Nvbm5lY3RlZCgpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSxcblxuICAgIGV2ZW50czoge1xuICAgICAgICBuYW1lOiAnY2xpY2snLFxuXG4gICAgICAgIGRlbGVnYXRlKCkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMudG9nZ2xlfTpub3QoLnVrLWRpc2FibGVkKWA7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaGFuZGxlcihlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnNob3coZS5jdXJyZW50KTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgICBzaG93KGluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IHVuaXF1ZUJ5KHRoaXMudG9nZ2xlcy5tYXAodG9JdGVtKSwgJ3NvdXJjZScpO1xuXG4gICAgICAgICAgICBpZiAoaXNFbGVtZW50KGluZGV4KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc291cmNlIH0gPSB0b0l0ZW0oaW5kZXgpO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZmluZEluZGV4KGl0ZW1zLCAoeyBzb3VyY2U6IHNyYyB9KSA9PiBzb3VyY2UgPT09IHNyYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucGFuZWwgPSB0aGlzLnBhbmVsIHx8IHRoaXMuJGNyZWF0ZSgnbGlnaHRib3hQYW5lbCcsIHsgLi4udGhpcy4kcHJvcHMsIGl0ZW1zIH0pO1xuXG4gICAgICAgICAgICBvbih0aGlzLnBhbmVsLiRlbCwgJ2hpZGRlbicsICgpID0+ICh0aGlzLnBhbmVsID0gbnVsbCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYW5lbC5zaG93KGluZGV4KTtcbiAgICAgICAgfSxcblxuICAgICAgICBoaWRlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFuZWw/LmhpZGUoKTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxuZnVuY3Rpb24gaW5zdGFsbChVSWtpdCwgTGlnaHRib3gpIHtcbiAgICBpZiAoIVVJa2l0LmxpZ2h0Ym94UGFuZWwpIHtcbiAgICAgICAgVUlraXQuY29tcG9uZW50KCdsaWdodGJveFBhbmVsJywgTGlnaHRib3hQYW5lbCk7XG4gICAgfVxuXG4gICAgYXNzaWduKExpZ2h0Ym94LnByb3BzLCBVSWtpdC5jb21wb25lbnQoJ2xpZ2h0Ym94UGFuZWwnKS5vcHRpb25zLnByb3BzKTtcbn1cblxuZnVuY3Rpb24gdG9JdGVtKGVsKSB7XG4gICAgY29uc3QgaXRlbSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBhdHRyIG9mIFsnaHJlZicsICdjYXB0aW9uJywgJ3R5cGUnLCAncG9zdGVyJywgJ2FsdCcsICdhdHRycyddKSB7XG4gICAgICAgIGl0ZW1bYXR0ciA9PT0gJ2hyZWYnID8gJ3NvdXJjZScgOiBhdHRyXSA9IGRhdGEoZWwsIGF0dHIpO1xuICAgIH1cblxuICAgIGl0ZW0uYXR0cnMgPSBwYXJzZU9wdGlvbnMoaXRlbS5hdHRycyk7XG5cbiAgICByZXR1cm4gaXRlbTtcbn1cbiIsImltcG9ydCBDb250YWluZXIgZnJvbSAnLi4vbWl4aW4vY29udGFpbmVyJztcbmltcG9ydCB7XG4gICAgJCxcbiAgICBhcHBlbmQsXG4gICAgYXBwbHksXG4gICAgY2xvc2VzdCxcbiAgICBjc3MsXG4gICAgcGFyZW50LFxuICAgIHBvaW50ZXJFbnRlcixcbiAgICBwb2ludGVyTGVhdmUsXG4gICAgcmVtb3ZlLFxuICAgIHN0YXJ0c1dpdGgsXG4gICAgdG9GbG9hdCxcbiAgICBUcmFuc2l0aW9uLFxuICAgIHRyaWdnZXIsXG59IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbWl4aW5zOiBbQ29udGFpbmVyXSxcblxuICAgIGZ1bmN0aW9uYWw6IHRydWUsXG5cbiAgICBhcmdzOiBbJ21lc3NhZ2UnLCAnc3RhdHVzJ10sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICBzdGF0dXM6ICcnLFxuICAgICAgICB0aW1lb3V0OiA1MDAwLFxuICAgICAgICBncm91cDogbnVsbCxcbiAgICAgICAgcG9zOiAndG9wLWNlbnRlcicsXG4gICAgICAgIGNsc0NvbnRhaW5lcjogJ3VrLW5vdGlmaWNhdGlvbicsXG4gICAgICAgIGNsc0Nsb3NlOiAndWstbm90aWZpY2F0aW9uLWNsb3NlJyxcbiAgICAgICAgY2xzTXNnOiAndWstbm90aWZpY2F0aW9uLW1lc3NhZ2UnLFxuICAgIH0sXG5cbiAgICBpbnN0YWxsLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgbWFyZ2luUHJvcCh7IHBvcyB9KSB7XG4gICAgICAgICAgICByZXR1cm4gYG1hcmdpbiR7c3RhcnRzV2l0aChwb3MsICd0b3AnKSA/ICdUb3AnIDogJ0JvdHRvbSd9YDtcbiAgICAgICAgfSxcblxuICAgICAgICBzdGFydFByb3BzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgb3BhY2l0eTogMCwgW3RoaXMubWFyZ2luUHJvcF06IC10aGlzLiRlbC5vZmZzZXRIZWlnaHQgfTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgY3JlYXRlZCgpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID1cbiAgICAgICAgICAgICQoYC4ke3RoaXMuY2xzQ29udGFpbmVyfS0ke3RoaXMucG9zfWAsIHRoaXMuY29udGFpbmVyKSB8fFxuICAgICAgICAgICAgYXBwZW5kKFxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIGA8ZGl2IGNsYXNzPVwiJHt0aGlzLmNsc0NvbnRhaW5lcn0gJHt0aGlzLmNsc0NvbnRhaW5lcn0tJHt0aGlzLnBvc31cIiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrXCI+PC9kaXY+YFxuICAgICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLiRtb3VudChcbiAgICAgICAgICAgIGFwcGVuZChcbiAgICAgICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICAgICAgYDxkaXYgY2xhc3M9XCIke3RoaXMuY2xzTXNnfSR7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID8gYCAke3RoaXMuY2xzTXNnfS0ke3RoaXMuc3RhdHVzfWAgOiAnJ1xuICAgICAgICAgICAgICAgIH1cIiByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgICAgICAgICA8YSBocmVmIGNsYXNzPVwiJHt0aGlzLmNsc0Nsb3NlfVwiIGRhdGEtdWstY2xvc2U+PC9hPlxuICAgICAgICAgICAgICAgIDxkaXY+JHt0aGlzLm1lc3NhZ2V9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNvbm5lY3RlZCgpIHtcbiAgICAgICAgY29uc3QgbWFyZ2luID0gdG9GbG9hdChjc3ModGhpcy4kZWwsIHRoaXMubWFyZ2luUHJvcCkpO1xuICAgICAgICBhd2FpdCBUcmFuc2l0aW9uLnN0YXJ0KGNzcyh0aGlzLiRlbCwgdGhpcy5zdGFydFByb3BzKSwge1xuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgIFt0aGlzLm1hcmdpblByb3BdOiBtYXJnaW4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgICAgICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuY2xvc2UsIHRoaXMudGltZW91dCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrKGUpIHtcbiAgICAgICAgICAgIGlmIChjbG9zZXN0KGUudGFyZ2V0LCAnYVtocmVmPVwiI1wiXSxhW2hyZWY9XCJcIl0nKSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBbcG9pbnRlckVudGVyXSgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIFtwb2ludGVyTGVhdmVdKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuY2xvc2UsIHRoaXMudGltZW91dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgYXN5bmMgY2xvc2UoaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVGbiA9IChlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHBhcmVudChlbCk7XG5cbiAgICAgICAgICAgICAgICB0cmlnZ2VyKGVsLCAnY2xvc2UnLCBbdGhpc10pO1xuICAgICAgICAgICAgICAgIHJlbW92ZShlbCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRhaW5lcj8uaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZShjb250YWluZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFRyYW5zaXRpb24uc3RhcnQodGhpcy4kZWwsIHRoaXMuc3RhcnRQcm9wcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbW92ZUZuKHRoaXMuJGVsKTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxuZnVuY3Rpb24gaW5zdGFsbChVSWtpdCkge1xuICAgIFVJa2l0Lm5vdGlmaWNhdGlvbi5jbG9zZUFsbCA9IGZ1bmN0aW9uIChncm91cCwgaW1tZWRpYXRlKSB7XG4gICAgICAgIGFwcGx5KGRvY3VtZW50LmJvZHksIChlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0gVUlraXQuZ2V0Q29tcG9uZW50KGVsLCAnbm90aWZpY2F0aW9uJyk7XG4gICAgICAgICAgICBpZiAobm90aWZpY2F0aW9uICYmICghZ3JvdXAgfHwgZ3JvdXAgPT09IG5vdGlmaWNhdGlvbi5ncm91cCkpIHtcbiAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uY2xvc2UoaW1tZWRpYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbiIsImltcG9ydCBNZWRpYSBmcm9tICcuLi9taXhpbi9tZWRpYSc7XG5pbXBvcnQgeyBnZXRNYXhQYXRoTGVuZ3RoIH0gZnJvbSAnLi4vdXRpbC9zdmcnO1xuaW1wb3J0IHtcbiAgICBjcmVhdGVFdmVudCxcbiAgICBjc3MsXG4gICAgRGltZW5zaW9ucyxcbiAgICBmaW5kSW5kZXgsXG4gICAgaXNOdW1iZXIsXG4gICAgaXNTdHJpbmcsXG4gICAgaXNVbmRlZmluZWQsXG4gICAgbm9vcCxcbiAgICBwcm9wTmFtZSxcbiAgICB0b0Zsb2F0LFxuICAgIHRvUHgsXG4gICAgdHJpZ2dlcixcbiAgICB1Y2ZpcnN0LFxufSBmcm9tICd1aWtpdC11dGlsJztcblxuY29uc3QgcHJvcHMgPSB7XG4gICAgeDogdHJhbnNmb3JtRm4sXG4gICAgeTogdHJhbnNmb3JtRm4sXG4gICAgcm90YXRlOiB0cmFuc2Zvcm1GbixcbiAgICBzY2FsZTogdHJhbnNmb3JtRm4sXG4gICAgY29sb3I6IGNvbG9yRm4sXG4gICAgYmFja2dyb3VuZENvbG9yOiBjb2xvckZuLFxuICAgIGJvcmRlckNvbG9yOiBjb2xvckZuLFxuICAgIGJsdXI6IGZpbHRlckZuLFxuICAgIGh1ZTogZmlsdGVyRm4sXG4gICAgZm9wYWNpdHk6IGZpbHRlckZuLFxuICAgIGdyYXlzY2FsZTogZmlsdGVyRm4sXG4gICAgaW52ZXJ0OiBmaWx0ZXJGbixcbiAgICBzYXR1cmF0ZTogZmlsdGVyRm4sXG4gICAgc2VwaWE6IGZpbHRlckZuLFxuICAgIG9wYWNpdHk6IGNzc1Byb3BGbixcbiAgICBzdHJva2U6IHN0cm9rZUZuLFxuICAgIGJneDogYmFja2dyb3VuZEZuLFxuICAgIGJneTogYmFja2dyb3VuZEZuLFxufTtcblxuY29uc3QgeyBrZXlzIH0gPSBPYmplY3Q7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBtaXhpbnM6IFtNZWRpYV0sXG5cbiAgICBwcm9wczogZmlsbE9iamVjdChrZXlzKHByb3BzKSwgJ2xpc3QnKSxcblxuICAgIGRhdGE6IGZpbGxPYmplY3Qoa2V5cyhwcm9wcyksIHVuZGVmaW5lZCksXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgICBwcm9wcyhwcm9wZXJ0aWVzLCAkZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3BzID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wIGluIHByb3BzICYmICFpc1VuZGVmaW5lZChwcm9wZXJ0aWVzW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wc1twcm9wXSA9IHByb3BlcnRpZXNbcHJvcF0uc2xpY2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBzdG9wcykge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtwcm9wXSA9IHByb3BzW3Byb3BdKHByb3AsICRlbCwgc3RvcHNbcHJvcF0sIHN0b3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGV2ZW50czoge1xuICAgICAgICBsb2FkKCkge1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgpO1xuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAgIHJlc2V0KCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHRoaXMuZ2V0Q3NzKDApKSB7XG4gICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCBwcm9wLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0Q3NzKHBlcmNlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNzcyA9IHsgdHJhbnNmb3JtOiAnJywgZmlsdGVyOiAnJyB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHRoaXMucHJvcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzW3Byb3BdKGNzcywgcGVyY2VudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjc3Mud2lsbENoYW5nZSA9IE9iamVjdC5rZXlzKGNzcylcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChrZXkpID0+IGNzc1trZXldICE9PSAnJylcbiAgICAgICAgICAgICAgICAubWFwKHByb3BOYW1lKVxuICAgICAgICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgICAgICAgICByZXR1cm4gY3NzO1xuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Gbihwcm9wLCBlbCwgc3RvcHMpIHtcbiAgICBsZXQgdW5pdCA9IGdldFVuaXQoc3RvcHMpIHx8IHsgeDogJ3B4JywgeTogJ3B4Jywgcm90YXRlOiAnZGVnJyB9W3Byb3BdIHx8ICcnO1xuICAgIGxldCB0cmFuc2Zvcm1GbjtcblxuICAgIGlmIChwcm9wID09PSAneCcgfHwgcHJvcCA9PT0gJ3knKSB7XG4gICAgICAgIHByb3AgPSBgdHJhbnNsYXRlJHt1Y2ZpcnN0KHByb3ApfWA7XG4gICAgICAgIHRyYW5zZm9ybUZuID0gKHN0b3ApID0+IHRvRmxvYXQodG9GbG9hdChzdG9wKS50b0ZpeGVkKHVuaXQgPT09ICdweCcgPyAwIDogNikpO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3NjYWxlJykge1xuICAgICAgICB1bml0ID0gJyc7XG4gICAgICAgIHRyYW5zZm9ybUZuID0gKHN0b3ApID0+XG4gICAgICAgICAgICBnZXRVbml0KFtzdG9wXSkgPyB0b1B4KHN0b3AsICd3aWR0aCcsIGVsLCB0cnVlKSAvIGVsLm9mZnNldFdpZHRoIDogc3RvcDtcbiAgICB9XG5cbiAgICBpZiAoc3RvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHN0b3BzLnVuc2hpZnQocHJvcCA9PT0gJ3NjYWxlJyA/IDEgOiAwKTtcbiAgICB9XG5cbiAgICBzdG9wcyA9IHBhcnNlU3RvcHMoc3RvcHMsIHRyYW5zZm9ybUZuKTtcblxuICAgIHJldHVybiAoY3NzLCBwZXJjZW50KSA9PiB7XG4gICAgICAgIGNzcy50cmFuc2Zvcm0gKz0gYCAke3Byb3B9KCR7Z2V0VmFsdWUoc3RvcHMsIHBlcmNlbnQpfSR7dW5pdH0pYDtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjb2xvckZuKHByb3AsIGVsLCBzdG9wcykge1xuICAgIGlmIChzdG9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgc3RvcHMudW5zaGlmdChnZXRDc3NWYWx1ZShlbCwgcHJvcCwgJycpKTtcbiAgICB9XG5cbiAgICBzdG9wcyA9IHBhcnNlU3RvcHMoc3RvcHMsIChzdG9wKSA9PiBwYXJzZUNvbG9yKGVsLCBzdG9wKSk7XG5cbiAgICByZXR1cm4gKGNzcywgcGVyY2VudCkgPT4ge1xuICAgICAgICBjb25zdCBbc3RhcnQsIGVuZCwgcF0gPSBnZXRTdG9wKHN0b3BzLCBwZXJjZW50KTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzdGFydFxuICAgICAgICAgICAgLm1hcCgodmFsdWUsIGkpID0+IHtcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSBwICogKGVuZFtpXSAtIHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA9PT0gMyA/IHRvRmxvYXQodmFsdWUpIDogcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignLCcpO1xuICAgICAgICBjc3NbcHJvcF0gPSBgcmdiYSgke3ZhbHVlfSlgO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29sb3IoZWwsIGNvbG9yKSB7XG4gICAgcmV0dXJuIGdldENzc1ZhbHVlKGVsLCAnY29sb3InLCBjb2xvcilcbiAgICAgICAgLnNwbGl0KC9bKCksXS9nKVxuICAgICAgICAuc2xpY2UoMSwgLTEpXG4gICAgICAgIC5jb25jYXQoMSlcbiAgICAgICAgLnNsaWNlKDAsIDQpXG4gICAgICAgIC5tYXAodG9GbG9hdCk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckZuKHByb3AsIGVsLCBzdG9wcykge1xuICAgIGlmIChzdG9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgc3RvcHMudW5zaGlmdCgwKTtcbiAgICB9XG5cbiAgICBjb25zdCB1bml0ID0gZ2V0VW5pdChzdG9wcykgfHwgeyBibHVyOiAncHgnLCBodWU6ICdkZWcnIH1bcHJvcF0gfHwgJyUnO1xuICAgIHByb3AgPSB7IGZvcGFjaXR5OiAnb3BhY2l0eScsIGh1ZTogJ2h1ZS1yb3RhdGUnIH1bcHJvcF0gfHwgcHJvcDtcbiAgICBzdG9wcyA9IHBhcnNlU3RvcHMoc3RvcHMpO1xuXG4gICAgcmV0dXJuIChjc3MsIHBlcmNlbnQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRWYWx1ZShzdG9wcywgcGVyY2VudCk7XG4gICAgICAgIGNzcy5maWx0ZXIgKz0gYCAke3Byb3B9KCR7dmFsdWUgKyB1bml0fSlgO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNzc1Byb3BGbihwcm9wLCBlbCwgc3RvcHMpIHtcbiAgICBpZiAoc3RvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHN0b3BzLnVuc2hpZnQoZ2V0Q3NzVmFsdWUoZWwsIHByb3AsICcnKSk7XG4gICAgfVxuXG4gICAgc3RvcHMgPSBwYXJzZVN0b3BzKHN0b3BzKTtcblxuICAgIHJldHVybiAoY3NzLCBwZXJjZW50KSA9PiB7XG4gICAgICAgIGNzc1twcm9wXSA9IGdldFZhbHVlKHN0b3BzLCBwZXJjZW50KTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzdHJva2VGbihwcm9wLCBlbCwgc3RvcHMpIHtcbiAgICBpZiAoc3RvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHN0b3BzLnVuc2hpZnQoMCk7XG4gICAgfVxuXG4gICAgY29uc3QgdW5pdCA9IGdldFVuaXQoc3RvcHMpO1xuICAgIGNvbnN0IGxlbmd0aCA9IGdldE1heFBhdGhMZW5ndGgoZWwpO1xuICAgIHN0b3BzID0gcGFyc2VTdG9wcyhzdG9wcy5yZXZlcnNlKCksIChzdG9wKSA9PiB7XG4gICAgICAgIHN0b3AgPSB0b0Zsb2F0KHN0b3ApO1xuICAgICAgICByZXR1cm4gdW5pdCA9PT0gJyUnID8gKHN0b3AgKiBsZW5ndGgpIC8gMTAwIDogc3RvcDtcbiAgICB9KTtcblxuICAgIGlmICghc3RvcHMuc29tZSgoW3ZhbHVlXSkgPT4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBub29wO1xuICAgIH1cblxuICAgIGNzcyhlbCwgJ3N0cm9rZURhc2hhcnJheScsIGxlbmd0aCk7XG5cbiAgICByZXR1cm4gKGNzcywgcGVyY2VudCkgPT4ge1xuICAgICAgICBjc3Muc3Ryb2tlRGFzaG9mZnNldCA9IGdldFZhbHVlKHN0b3BzLCBwZXJjZW50KTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBiYWNrZ3JvdW5kRm4ocHJvcCwgZWwsIHN0b3BzLCBwcm9wcykge1xuICAgIGlmIChzdG9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgc3RvcHMudW5zaGlmdCgwKTtcbiAgICB9XG5cbiAgICBjb25zdCBhdHRyID0gcHJvcCA9PT0gJ2JneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgcHJvcHNbcHJvcF0gPSBwYXJzZVN0b3BzKHN0b3BzLCAoc3RvcCkgPT4gdG9QeChzdG9wLCBhdHRyLCBlbCkpO1xuXG4gICAgY29uc3QgYmdQcm9wcyA9IFsnYmd4JywgJ2JneSddLmZpbHRlcigocHJvcCkgPT4gcHJvcCBpbiBwcm9wcyk7XG4gICAgaWYgKGJnUHJvcHMubGVuZ3RoID09PSAyICYmIHByb3AgPT09ICdiZ3gnKSB7XG4gICAgICAgIHJldHVybiBub29wO1xuICAgIH1cblxuICAgIGlmIChnZXRDc3NWYWx1ZShlbCwgJ2JhY2tncm91bmRTaXplJywgJycpID09PSAnY292ZXInKSB7XG4gICAgICAgIHJldHVybiBiYWNrZ3JvdW5kQ292ZXJGbihwcm9wLCBlbCwgc3RvcHMsIHByb3BzKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvbnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgYmdQcm9wcykge1xuICAgICAgICBwb3NpdGlvbnNbcHJvcF0gPSBnZXRCYWNrZ3JvdW5kUG9zKGVsLCBwcm9wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0QmFja2dyb3VuZFBvc0ZuKGJnUHJvcHMsIHBvc2l0aW9ucywgcHJvcHMpO1xufVxuXG5mdW5jdGlvbiBiYWNrZ3JvdW5kQ292ZXJGbihwcm9wLCBlbCwgc3RvcHMsIHByb3BzKSB7XG4gICAgY29uc3QgZGltSW1hZ2UgPSBnZXRCYWNrZ3JvdW5kSW1hZ2VEaW1lbnNpb25zKGVsKTtcblxuICAgIGlmICghZGltSW1hZ2Uud2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIG5vb3A7XG4gICAgfVxuXG4gICAgY29uc3QgZGltRWwgPSB7XG4gICAgICAgIHdpZHRoOiBlbC5vZmZzZXRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBlbC5vZmZzZXRIZWlnaHQsXG4gICAgfTtcblxuICAgIGNvbnN0IGJnUHJvcHMgPSBbJ2JneCcsICdiZ3knXS5maWx0ZXIoKHByb3ApID0+IHByb3AgaW4gcHJvcHMpO1xuXG4gICAgY29uc3QgcG9zaXRpb25zID0ge307XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIGJnUHJvcHMpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gcHJvcHNbcHJvcF0ubWFwKChbdmFsdWVdKSA9PiB2YWx1ZSk7XG4gICAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLnZhbHVlcyk7XG4gICAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLnZhbHVlcyk7XG4gICAgICAgIGNvbnN0IGRvd24gPSB2YWx1ZXMuaW5kZXhPZihtaW4pIDwgdmFsdWVzLmluZGV4T2YobWF4KTtcbiAgICAgICAgY29uc3QgZGlmZiA9IG1heCAtIG1pbjtcblxuICAgICAgICBwb3NpdGlvbnNbcHJvcF0gPSBgJHsoZG93biA/IC1kaWZmIDogMCkgLSAoZG93biA/IG1pbiA6IG1heCl9cHhgO1xuICAgICAgICBkaW1FbFtwcm9wID09PSAnYmd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJ10gKz0gZGlmZjtcbiAgICB9XG5cbiAgICBjb25zdCBkaW0gPSBEaW1lbnNpb25zLmNvdmVyKGRpbUltYWdlLCBkaW1FbCk7XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgYmdQcm9wcykge1xuICAgICAgICBjb25zdCBhdHRyID0gcHJvcCA9PT0gJ2JneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgIGNvbnN0IG92ZXJmbG93ID0gZGltW2F0dHJdIC0gZGltRWxbYXR0cl07XG4gICAgICAgIHBvc2l0aW9uc1twcm9wXSA9IGBtYXgoJHtnZXRCYWNrZ3JvdW5kUG9zKGVsLCBwcm9wKX0sLSR7b3ZlcmZsb3d9cHgpICsgJHtwb3NpdGlvbnNbcHJvcF19YDtcbiAgICB9XG5cbiAgICBjb25zdCBmbiA9IHNldEJhY2tncm91bmRQb3NGbihiZ1Byb3BzLCBwb3NpdGlvbnMsIHByb3BzKTtcbiAgICByZXR1cm4gKGNzcywgcGVyY2VudCkgPT4ge1xuICAgICAgICBmbihjc3MsIHBlcmNlbnQpO1xuICAgICAgICBjc3MuYmFja2dyb3VuZFNpemUgPSBgJHtkaW0ud2lkdGh9cHggJHtkaW0uaGVpZ2h0fXB4YDtcbiAgICAgICAgY3NzLmJhY2tncm91bmRSZXBlYXQgPSAnbm8tcmVwZWF0JztcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRCYWNrZ3JvdW5kUG9zKGVsLCBwcm9wKSB7XG4gICAgcmV0dXJuIGdldENzc1ZhbHVlKGVsLCBgYmFja2dyb3VuZC1wb3NpdGlvbi0ke3Byb3Auc3Vic3RyKC0xKX1gLCAnJyk7XG59XG5cbmZ1bmN0aW9uIHNldEJhY2tncm91bmRQb3NGbihiZ1Byb3BzLCBwb3NpdGlvbnMsIHByb3BzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjc3MsIHBlcmNlbnQpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGJnUHJvcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0VmFsdWUocHJvcHNbcHJvcF0sIHBlcmNlbnQpO1xuICAgICAgICAgICAgY3NzW2BiYWNrZ3JvdW5kLXBvc2l0aW9uLSR7cHJvcC5zdWJzdHIoLTEpfWBdID0gYGNhbGMoJHtwb3NpdGlvbnNbcHJvcF19ICsgJHt2YWx1ZX1weClgO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuY29uc3QgZGltZW5zaW9ucyA9IHt9O1xuZnVuY3Rpb24gZ2V0QmFja2dyb3VuZEltYWdlRGltZW5zaW9ucyhlbCkge1xuICAgIGNvbnN0IHNyYyA9IGNzcyhlbCwgJ2JhY2tncm91bmRJbWFnZScpLnJlcGxhY2UoL15ub25lfHVybFxcKFtcIiddPyguKz8pW1wiJ10/XFwpJC8sICckMScpO1xuXG4gICAgaWYgKGRpbWVuc2lvbnNbc3JjXSkge1xuICAgICAgICByZXR1cm4gZGltZW5zaW9uc1tzcmNdO1xuICAgIH1cblxuICAgIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaWYgKHNyYykge1xuICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XG5cbiAgICAgICAgaWYgKCFpbWFnZS5uYXR1cmFsV2lkdGgpIHtcbiAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBkaW1lbnNpb25zW3NyY10gPSB0b0RpbWVuc2lvbnMoaW1hZ2UpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXIoZWwsIGNyZWF0ZUV2ZW50KCdsb2FkJywgZmFsc2UpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdG9EaW1lbnNpb25zKGltYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoZGltZW5zaW9uc1tzcmNdID0gdG9EaW1lbnNpb25zKGltYWdlKSk7XG59XG5cbmZ1bmN0aW9uIHRvRGltZW5zaW9ucyhpbWFnZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiBpbWFnZS5uYXR1cmFsV2lkdGgsXG4gICAgICAgIGhlaWdodDogaW1hZ2UubmF0dXJhbEhlaWdodCxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVN0b3BzKHN0b3BzLCBmbiA9IHRvRmxvYXQpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gc3RvcHM7XG4gICAgbGV0IG51bGxJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgW3ZhbHVlLCBwZXJjZW50XSA9IGlzU3RyaW5nKHN0b3BzW2ldKVxuICAgICAgICAgICAgPyBzdG9wc1tpXS50cmltKCkuc3BsaXQoLyAoPyFbXihdKlxcKSkvKVxuICAgICAgICAgICAgOiBbc3RvcHNbaV1dO1xuICAgICAgICB2YWx1ZSA9IGZuKHZhbHVlKTtcbiAgICAgICAgcGVyY2VudCA9IHBlcmNlbnQgPyB0b0Zsb2F0KHBlcmNlbnQpIC8gMTAwIDogbnVsbDtcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHBlcmNlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwZXJjZW50ID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGVyY2VudCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFt2YWx1ZSwgMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IGxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGlmIChwZXJjZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGVyY2VudCA9IDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBlcmNlbnQgIT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChbdmFsdWUsIHBlcmNlbnRdKTtcbiAgICAgICAgICAgICAgICBwZXJjZW50ID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdC5wdXNoKFt2YWx1ZSwgcGVyY2VudF0pO1xuXG4gICAgICAgIGlmIChwZXJjZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICBudWxsSW5kZXgrKztcbiAgICAgICAgfSBlbHNlIGlmIChudWxsSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRQZXJjZW50ID0gcmVzdWx0W2kgLSBudWxsSW5kZXggLSAxXVsxXTtcbiAgICAgICAgICAgIGNvbnN0IHAgPSAocGVyY2VudCAtIGxlZnRQZXJjZW50KSAvIChudWxsSW5kZXggKyAxKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBudWxsSW5kZXg7IGogPiAwOyBqLS0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbaSAtIGpdWzFdID0gbGVmdFBlcmNlbnQgKyBwICogKG51bGxJbmRleCAtIGogKyAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbnVsbEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldFN0b3Aoc3RvcHMsIHBlcmNlbnQpIHtcbiAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleChzdG9wcy5zbGljZSgxKSwgKFssIHRhcmdldFBlcmNlbnRdKSA9PiBwZXJjZW50IDw9IHRhcmdldFBlcmNlbnQpICsgMTtcbiAgICByZXR1cm4gW1xuICAgICAgICBzdG9wc1tpbmRleCAtIDFdWzBdLFxuICAgICAgICBzdG9wc1tpbmRleF1bMF0sXG4gICAgICAgIChwZXJjZW50IC0gc3RvcHNbaW5kZXggLSAxXVsxXSkgLyAoc3RvcHNbaW5kZXhdWzFdIC0gc3RvcHNbaW5kZXggLSAxXVsxXSksXG4gICAgXTtcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWUoc3RvcHMsIHBlcmNlbnQpIHtcbiAgICBjb25zdCBbc3RhcnQsIGVuZCwgcF0gPSBnZXRTdG9wKHN0b3BzLCBwZXJjZW50KTtcbiAgICByZXR1cm4gaXNOdW1iZXIoc3RhcnQpID8gc3RhcnQgKyBNYXRoLmFicyhzdGFydCAtIGVuZCkgKiBwICogKHN0YXJ0IDwgZW5kID8gMSA6IC0xKSA6ICtlbmQ7XG59XG5cbmNvbnN0IHVuaXRSZSA9IC9eLT9cXGQrKFxcUyspPy87XG5mdW5jdGlvbiBnZXRVbml0KHN0b3BzLCBkZWZhdWx0VW5pdCkge1xuICAgIGZvciAoY29uc3Qgc3RvcCBvZiBzdG9wcykge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHN0b3AubWF0Y2g/Lih1bml0UmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFVuaXQ7XG59XG5cbmZ1bmN0aW9uIGdldENzc1ZhbHVlKGVsLCBwcm9wLCB2YWx1ZSkge1xuICAgIGNvbnN0IHByZXYgPSBlbC5zdHlsZVtwcm9wXTtcbiAgICBjb25zdCB2YWwgPSBjc3MoY3NzKGVsLCBwcm9wLCB2YWx1ZSksIHByb3ApO1xuICAgIGVsLnN0eWxlW3Byb3BdID0gcHJldjtcbiAgICByZXR1cm4gdmFsO1xufVxuXG5mdW5jdGlvbiBmaWxsT2JqZWN0KGtleXMsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGtleXMucmVkdWNlKChkYXRhLCBwcm9wKSA9PiB7XG4gICAgICAgIGRhdGFbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSwge30pO1xufVxuIiwiaW1wb3J0IFBhcmFsbGF4IGZyb20gJy4uL21peGluL3BhcmFsbGF4JztcbmltcG9ydCB7IHJlc2l6ZSwgc2Nyb2xsIH0gZnJvbSAnLi4vYXBpL29ic2VydmFibGVzJztcbmltcG9ydCB7IGNzcywgaXNWaXNpYmxlLCBwYXJlbnQsIHF1ZXJ5LCBzY3JvbGxlZE92ZXIsIHRvUHggfSBmcm9tICd1aWtpdC11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG1peGluczogW1BhcmFsbGF4XSxcblxuICAgIHByb3BzOiB7XG4gICAgICAgIHRhcmdldDogU3RyaW5nLFxuICAgICAgICB2aWV3cG9ydDogTnVtYmVyLCAvLyBEZXByZWNhdGVkXG4gICAgICAgIGVhc2luZzogTnVtYmVyLFxuICAgICAgICBzdGFydDogU3RyaW5nLFxuICAgICAgICBlbmQ6IFN0cmluZyxcbiAgICB9LFxuXG4gICAgZGF0YToge1xuICAgICAgICB0YXJnZXQ6IGZhbHNlLFxuICAgICAgICB2aWV3cG9ydDogMSxcbiAgICAgICAgZWFzaW5nOiAxLFxuICAgICAgICBzdGFydDogMCxcbiAgICAgICAgZW5kOiAwLFxuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgICB0YXJnZXQoeyB0YXJnZXQgfSwgJGVsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0T2Zmc2V0RWxlbWVudCgodGFyZ2V0ICYmIHF1ZXJ5KHRhcmdldCwgJGVsKSkgfHwgJGVsKTtcbiAgICAgICAgfSxcblxuICAgICAgICBzdGFydCh7IHN0YXJ0IH0pIHtcbiAgICAgICAgICAgIHJldHVybiB0b1B4KHN0YXJ0LCAnaGVpZ2h0JywgdGhpcy50YXJnZXQsIHRydWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGVuZCh7IGVuZCwgdmlld3BvcnQgfSkge1xuICAgICAgICAgICAgcmV0dXJuIHRvUHgoXG4gICAgICAgICAgICAgICAgZW5kIHx8ICgodmlld3BvcnQgPSAoMSAtIHZpZXdwb3J0KSAqIDEwMCkgJiYgYCR7dmlld3BvcnR9dmgrJHt2aWV3cG9ydH0lYCksXG4gICAgICAgICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXQsXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgb2JzZXJ2ZTogW1xuICAgICAgICByZXNpemUoe1xuICAgICAgICAgICAgdGFyZ2V0OiAoeyAkZWwsIHRhcmdldCB9KSA9PiBbJGVsLCB0YXJnZXRdLFxuICAgICAgICB9KSxcbiAgICAgICAgc2Nyb2xsKCksXG4gICAgXSxcblxuICAgIHVwZGF0ZToge1xuICAgICAgICByZWFkKHsgcGVyY2VudCB9LCB0eXBlcykge1xuICAgICAgICAgICAgaWYgKCF0eXBlcy5oYXMoJ3Njcm9sbCcpKSB7XG4gICAgICAgICAgICAgICAgcGVyY2VudCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzVmlzaWJsZSh0aGlzLiRlbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaE1lZGlhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gcGVyY2VudDtcbiAgICAgICAgICAgIHBlcmNlbnQgPSBlYXNlKHNjcm9sbGVkT3Zlcih0aGlzLnRhcmdldCwgdGhpcy5zdGFydCwgdGhpcy5lbmQpLCB0aGlzLmVhc2luZyk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGVyY2VudCxcbiAgICAgICAgICAgICAgICBzdHlsZTogcHJldiA9PT0gcGVyY2VudCA/IGZhbHNlIDogdGhpcy5nZXRDc3MocGVyY2VudCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIHdyaXRlKHsgc3R5bGUgfSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoTWVkaWEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZSAmJiBjc3ModGhpcy4kZWwsIHN0eWxlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IFsnc2Nyb2xsJywgJ3Jlc2l6ZSddLFxuICAgIH0sXG59O1xuXG4vKlxuICogSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ3JlLzE2NTAyOTQ/cGVybWFsaW5rX2NvbW1lbnRfaWQ9MzQ3NzQyNSNnaXN0Y29tbWVudC0zNDc3NDI1XG4gKlxuICogbGluZWFyOiAwXG4gKiBlYXNlSW5TaW5lOiAwLjVcbiAqIGVhc2VPdXRTaW5lOiAtMC41XG4gKiBlYXNlSW5RdWFkOiAxXG4gKiBlYXNlT3V0UXVhZDogLTFcbiAqIGVhc2VJbkN1YmljOiAyXG4gKiBlYXNlT3V0Q3ViaWM6IC0yXG4gKiBlYXNlSW5RdWFydDogM1xuICogZWFzZU91dFF1YXJ0OiAtM1xuICogZWFzZUluUXVpbnQ6IDRcbiAqIGVhc2VPdXRRdWludDogLTRcbiAqL1xuZnVuY3Rpb24gZWFzZShwZXJjZW50LCBlYXNpbmcpIHtcbiAgICByZXR1cm4gZWFzaW5nID49IDAgPyBNYXRoLnBvdyhwZXJjZW50LCBlYXNpbmcgKyAxKSA6IDEgLSBNYXRoLnBvdygxIC0gcGVyY2VudCwgMSAtIGVhc2luZyk7XG59XG5cbi8vIFNWRyBlbGVtZW50cyBkbyBub3QgaW5oZXJpdCBmcm9tIEhUTUxFbGVtZW50XG5mdW5jdGlvbiBnZXRPZmZzZXRFbGVtZW50KGVsKSB7XG4gICAgcmV0dXJuIGVsID8gKCdvZmZzZXRUb3AnIGluIGVsID8gZWwgOiBnZXRPZmZzZXRFbGVtZW50KHBhcmVudChlbCkpKSA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICB1cGRhdGU6IHtcbiAgICAgICAgd3JpdGUoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggfHwgdGhpcy5kcmFnZ2luZykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldFZhbGlkSW5kZXgodGhpcy5pbmRleCk7XG5cbiAgICAgICAgICAgIGlmICghfnRoaXMucHJldkluZGV4IHx8IHRoaXMuaW5kZXggIT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93KGluZGV4KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNsYXRlKDEsIHRoaXMucHJldkluZGV4LCB0aGlzLmluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IFsncmVzaXplJ10sXG4gICAgfSxcbn07XG4iLCJpbXBvcnQgeyBsYXp5bG9hZCB9IGZyb20gJy4uLy4uL2FwaS9vYnNlcnZhYmxlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBvYnNlcnZlOiBsYXp5bG9hZCh7XG4gICAgICAgIHRhcmdldDogKHsgc2xpZGVzIH0pID0+IHNsaWRlcyxcbiAgICAgICAgdGFyZ2V0czogKGluc3RhbmNlKSA9PiBpbnN0YW5jZS5nZXRBZGphY2VudFNsaWRlcygpLFxuICAgIH0pLFxufTtcbiIsImltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gJy4uLy4uL21peGluL2ludGVybmFsL3NsaWRlc2hvdy1hbmltYXRpb25zJztcbmltcG9ydCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2xhbXAsXG4gICAgY3JlYXRlRXZlbnQsXG4gICAgY3NzLFxuICAgIERlZmVycmVkLFxuICAgIGRpbWVuc2lvbnMsXG4gICAgZmluZEluZGV4LFxuICAgIGluY2x1ZGVzLFxuICAgIGlzUnRsLFxuICAgIG5vb3AsXG4gICAgcG9zaXRpb24sXG4gICAgc3VtQnksXG4gICAgVHJhbnNpdGlvbixcbiAgICB0cmlnZ2VyLFxufSBmcm9tICd1aWtpdC11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHByZXYsIG5leHQsIGRpciwgeyBjZW50ZXIsIGVhc2luZywgbGlzdCB9KSB7XG4gICAgY29uc3QgZGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTtcblxuICAgIGNvbnN0IGZyb20gPSBwcmV2XG4gICAgICAgID8gZ2V0TGVmdChwcmV2LCBsaXN0LCBjZW50ZXIpXG4gICAgICAgIDogZ2V0TGVmdChuZXh0LCBsaXN0LCBjZW50ZXIpICsgZGltZW5zaW9ucyhuZXh0KS53aWR0aCAqIGRpcjtcbiAgICBjb25zdCB0byA9IG5leHRcbiAgICAgICAgPyBnZXRMZWZ0KG5leHQsIGxpc3QsIGNlbnRlcilcbiAgICAgICAgOiBmcm9tICsgZGltZW5zaW9ucyhwcmV2KS53aWR0aCAqIGRpciAqIChpc1J0bCA/IC0xIDogMSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBkaXIsXG5cbiAgICAgICAgc2hvdyhkdXJhdGlvbiwgcGVyY2VudCA9IDAsIGxpbmVhcikge1xuICAgICAgICAgICAgY29uc3QgdGltaW5nID0gbGluZWFyID8gJ2xpbmVhcicgOiBlYXNpbmc7XG4gICAgICAgICAgICBkdXJhdGlvbiAtPSBNYXRoLnJvdW5kKGR1cmF0aW9uICogY2xhbXAocGVyY2VudCwgLTEsIDEpKTtcblxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUocGVyY2VudCk7XG5cbiAgICAgICAgICAgIHBlcmNlbnQgPSBwcmV2ID8gcGVyY2VudCA6IGNsYW1wKHBlcmNlbnQsIDAsIDEpO1xuICAgICAgICAgICAgdHJpZ2dlclVwZGF0ZSh0aGlzLmdldEl0ZW1JbigpLCAnaXRlbWluJywgeyBwZXJjZW50LCBkdXJhdGlvbiwgdGltaW5nLCBkaXIgfSk7XG4gICAgICAgICAgICBwcmV2ICYmXG4gICAgICAgICAgICAgICAgdHJpZ2dlclVwZGF0ZSh0aGlzLmdldEl0ZW1Jbih0cnVlKSwgJ2l0ZW1vdXQnLCB7XG4gICAgICAgICAgICAgICAgICAgIHBlcmNlbnQ6IDEgLSBwZXJjZW50LFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgdGltaW5nLFxuICAgICAgICAgICAgICAgICAgICBkaXIsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFRyYW5zaXRpb24uc3RhcnQoXG4gICAgICAgICAgICAgICAgbGlzdCxcbiAgICAgICAgICAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC10byAqIChpc1J0bCA/IC0xIDogMSksICdweCcpIH0sXG4gICAgICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgICAgICAgICAgdGltaW5nXG4gICAgICAgICAgICApLnRoZW4oZGVmZXJyZWQucmVzb2x2ZSwgbm9vcCk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNhbmNlbCgpIHtcbiAgICAgICAgICAgIFRyYW5zaXRpb24uY2FuY2VsKGxpc3QpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlc2V0KCkge1xuICAgICAgICAgICAgY3NzKGxpc3QsICd0cmFuc2Zvcm0nLCAnJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZm9yd2FyZChkdXJhdGlvbiwgcGVyY2VudCA9IHRoaXMucGVyY2VudCgpKSB7XG4gICAgICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbChsaXN0KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3coZHVyYXRpb24sIHBlcmNlbnQsIHRydWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRyYW5zbGF0ZShwZXJjZW50KSB7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuZ2V0RGlzdGFuY2UoKSAqIGRpciAqIChpc1J0bCA/IC0xIDogMSk7XG5cbiAgICAgICAgICAgIGNzcyhcbiAgICAgICAgICAgICAgICBsaXN0LFxuICAgICAgICAgICAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZShcbiAgICAgICAgICAgICAgICAgICAgY2xhbXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAtdG8gKyAoZGlzdGFuY2UgLSBkaXN0YW5jZSAqIHBlcmNlbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLWdldFdpZHRoKGxpc3QpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9ucyhsaXN0KS53aWR0aFxuICAgICAgICAgICAgICAgICAgICApICogKGlzUnRsID8gLTEgOiAxKSxcbiAgICAgICAgICAgICAgICAgICAgJ3B4J1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZXMgPSB0aGlzLmdldEFjdGl2ZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1JbiA9IHRoaXMuZ2V0SXRlbUluKCk7XG4gICAgICAgICAgICBjb25zdCBpdGVtT3V0ID0gdGhpcy5nZXRJdGVtSW4odHJ1ZSk7XG5cbiAgICAgICAgICAgIHBlcmNlbnQgPSBwcmV2ID8gY2xhbXAocGVyY2VudCwgLTEsIDEpIDogMDtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzbGlkZSBvZiBjaGlsZHJlbihsaXN0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZlID0gaW5jbHVkZXMoYWN0aXZlcywgc2xpZGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzSW4gPSBzbGlkZSA9PT0gaXRlbUluO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzT3V0ID0gc2xpZGUgPT09IGl0ZW1PdXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlSW4gPVxuICAgICAgICAgICAgICAgICAgICBpc0luIHx8XG4gICAgICAgICAgICAgICAgICAgICghaXNPdXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0FjdGl2ZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXIgKiAoaXNSdGwgPyAtMSA6IDEpID09PSAtMSkgXlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0RWxMZWZ0KHNsaWRlLCBsaXN0KSA+IGdldEVsTGVmdChwcmV2IHx8IG5leHQpKSkpO1xuXG4gICAgICAgICAgICAgICAgdHJpZ2dlclVwZGF0ZShzbGlkZSwgYGl0ZW10cmFuc2xhdGUke3RyYW5zbGF0ZUluID8gJ2luJyA6ICdvdXQnfWAsIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyLFxuICAgICAgICAgICAgICAgICAgICBwZXJjZW50OiBpc091dCA/IDEgLSBwZXJjZW50IDogaXNJbiA/IHBlcmNlbnQgOiBpc0FjdGl2ZSA/IDEgOiAwLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHBlcmNlbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoXG4gICAgICAgICAgICAgICAgKGNzcyhsaXN0LCAndHJhbnNmb3JtJykuc3BsaXQoJywnKVs0XSAqIChpc1J0bCA/IC0xIDogMSkgKyBmcm9tKSAvICh0byAtIGZyb20pXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldERpc3RhbmNlKCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRvIC0gZnJvbSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0SXRlbUluKG91dCA9IGZhbHNlKSB7XG4gICAgICAgICAgICBsZXQgYWN0aXZlcyA9IHRoaXMuZ2V0QWN0aXZlcygpO1xuICAgICAgICAgICAgbGV0IG5leHRBY3RpdmVzID0gaW5WaWV3KGxpc3QsIGdldExlZnQobmV4dCB8fCBwcmV2LCBsaXN0LCBjZW50ZXIpKTtcblxuICAgICAgICAgICAgaWYgKG91dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBhY3RpdmVzO1xuICAgICAgICAgICAgICAgIGFjdGl2ZXMgPSBuZXh0QWN0aXZlcztcbiAgICAgICAgICAgICAgICBuZXh0QWN0aXZlcyA9IHRlbXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXh0QWN0aXZlc1tmaW5kSW5kZXgobmV4dEFjdGl2ZXMsIChlbCkgPT4gIWluY2x1ZGVzKGFjdGl2ZXMsIGVsKSldO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEFjdGl2ZXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5WaWV3KGxpc3QsIGdldExlZnQocHJldiB8fCBuZXh0LCBsaXN0LCBjZW50ZXIpKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRMZWZ0KGVsLCBsaXN0LCBjZW50ZXIpIHtcbiAgICBjb25zdCBsZWZ0ID0gZ2V0RWxMZWZ0KGVsLCBsaXN0KTtcblxuICAgIHJldHVybiBjZW50ZXIgPyBsZWZ0IC0gY2VudGVyRWwoZWwsIGxpc3QpIDogTWF0aC5taW4obGVmdCwgZ2V0TWF4KGxpc3QpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1heChsaXN0KSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIGdldFdpZHRoKGxpc3QpIC0gZGltZW5zaW9ucyhsaXN0KS53aWR0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaWR0aChsaXN0KSB7XG4gICAgcmV0dXJuIHN1bUJ5KGNoaWxkcmVuKGxpc3QpLCAoZWwpID0+IGRpbWVuc2lvbnMoZWwpLndpZHRoKTtcbn1cblxuZnVuY3Rpb24gY2VudGVyRWwoZWwsIGxpc3QpIHtcbiAgICByZXR1cm4gZGltZW5zaW9ucyhsaXN0KS53aWR0aCAvIDIgLSBkaW1lbnNpb25zKGVsKS53aWR0aCAvIDI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbExlZnQoZWwsIGxpc3QpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoZWwgJiZcbiAgICAgICAgICAgIChwb3NpdGlvbihlbCkubGVmdCArIChpc1J0bCA/IGRpbWVuc2lvbnMoZWwpLndpZHRoIC0gZGltZW5zaW9ucyhsaXN0KS53aWR0aCA6IDApKSAqXG4gICAgICAgICAgICAgICAgKGlzUnRsID8gLTEgOiAxKSkgfHxcbiAgICAgICAgMFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGluVmlldyhsaXN0LCBsaXN0TGVmdCkge1xuICAgIGxpc3RMZWZ0IC09IDE7XG4gICAgY29uc3QgbGlzdFdpZHRoID0gZGltZW5zaW9ucyhsaXN0KS53aWR0aDtcbiAgICBjb25zdCBsaXN0UmlnaHQgPSBsaXN0TGVmdCArIGxpc3RXaWR0aCArIDI7XG5cbiAgICByZXR1cm4gY2hpbGRyZW4obGlzdCkuZmlsdGVyKChzbGlkZSkgPT4ge1xuICAgICAgICBjb25zdCBzbGlkZUxlZnQgPSBnZXRFbExlZnQoc2xpZGUsIGxpc3QpO1xuICAgICAgICBjb25zdCBzbGlkZVJpZ2h0ID0gc2xpZGVMZWZ0ICsgTWF0aC5taW4oZGltZW5zaW9ucyhzbGlkZSkud2lkdGgsIGxpc3RXaWR0aCk7XG5cbiAgICAgICAgcmV0dXJuIHNsaWRlTGVmdCA+PSBsaXN0TGVmdCAmJiBzbGlkZVJpZ2h0IDw9IGxpc3RSaWdodDtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gdHJpZ2dlclVwZGF0ZShlbCwgdHlwZSwgZGF0YSkge1xuICAgIHRyaWdnZXIoZWwsIGNyZWF0ZUV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSwgZGF0YSkpO1xufVxuIiwiaW1wb3J0IENsYXNzIGZyb20gJy4uL21peGluL2NsYXNzJztcbmltcG9ydCB7IHJlc2l6ZSB9IGZyb20gJy4uL2FwaS9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgU2xpZGVyLCB7IHNwZWVkVXAgfSBmcm9tICcuLi9taXhpbi9zbGlkZXInO1xuaW1wb3J0IFNsaWRlclJlYWN0aXZlIGZyb20gJy4uL21peGluL3NsaWRlci1yZWFjdGl2ZSc7XG5pbXBvcnQgU2xpZGVyUHJlbG9hZCBmcm9tICcuL2ludGVybmFsL3NsaWRlci1wcmVsb2FkJztcbmltcG9ydCBUcmFuc2l0aW9uZXIsIHsgZ2V0TWF4LCBnZXRXaWR0aCB9IGZyb20gJy4vaW50ZXJuYWwvc2xpZGVyLXRyYW5zaXRpb25lcic7XG5pbXBvcnQge1xuICAgICQsXG4gICAgJCQsXG4gICAgYWRkQ2xhc3MsXG4gICAgYXR0cixcbiAgICBjaGlsZHJlbixcbiAgICBjc3MsXG4gICAgZGF0YSxcbiAgICBkaW1lbnNpb25zLFxuICAgIGZpbmRJbmRleCxcbiAgICBnZXRJbmRleCxcbiAgICBoYXNPd24sXG4gICAgaW5jbHVkZXMsXG4gICAgaXNWaXNpYmxlLFxuICAgIGxhc3QsXG4gICAgc2VsRm9jdXNhYmxlLFxuICAgIHN1bUJ5LFxuICAgIHRvRmxvYXQsXG4gICAgdG9nZ2xlQ2xhc3MsXG4gICAgdG9OdW1iZXIsXG59IGZyb20gJ3Vpa2l0LXV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbWl4aW5zOiBbQ2xhc3MsIFNsaWRlciwgU2xpZGVyUmVhY3RpdmUsIFNsaWRlclByZWxvYWRdLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY2VudGVyOiBCb29sZWFuLFxuICAgICAgICBzZXRzOiBCb29sZWFuLFxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICAgIGNlbnRlcjogZmFsc2UsXG4gICAgICAgIHNldHM6IGZhbHNlLFxuICAgICAgICBhdHRySXRlbTogJ3VrLXNsaWRlci1pdGVtJyxcbiAgICAgICAgc2VsTGlzdDogJy51ay1zbGlkZXItaXRlbXMnLFxuICAgICAgICBzZWxOYXY6ICcudWstc2xpZGVyLW5hdicsXG4gICAgICAgIGNsc0NvbnRhaW5lcjogJ3VrLXNsaWRlci1jb250YWluZXInLFxuICAgICAgICBUcmFuc2l0aW9uZXIsXG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIGF2Z1dpZHRoKCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldFdpZHRoKHRoaXMubGlzdCkgLyB0aGlzLmxlbmd0aDtcbiAgICAgICAgfSxcblxuICAgICAgICBmaW5pdGUoeyBmaW5pdGUgfSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbml0ZSB8fCBpc0Zpbml0ZSh0aGlzLmxpc3QsIHRoaXMuY2VudGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICBtYXhJbmRleCgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5maW5pdGUgfHwgKHRoaXMuY2VudGVyICYmICF0aGlzLnNldHMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY2VudGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3QodGhpcy5zZXRzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGxmdCA9IDA7XG4gICAgICAgICAgICBjb25zdCBtYXggPSBnZXRNYXgodGhpcy5saXN0KTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZmluZEluZGV4KHRoaXMuc2xpZGVzLCAoZWwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobGZ0ID49IG1heCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZnQgKz0gZGltZW5zaW9ucyhlbCkud2lkdGg7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIH5pbmRleCA/IGluZGV4IDogdGhpcy5sZW5ndGggLSAxO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldHMoeyBzZXRzOiBlbmFibGVkIH0pIHtcbiAgICAgICAgICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGxlZnQgPSAwO1xuICAgICAgICAgICAgY29uc3Qgc2V0cyA9IFtdO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBkaW1lbnNpb25zKHRoaXMubGlzdCkud2lkdGg7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzbGlkZVdpZHRoID0gZGltZW5zaW9ucyh0aGlzLnNsaWRlc1tpXSkud2lkdGg7XG5cbiAgICAgICAgICAgICAgICBpZiAobGVmdCArIHNsaWRlV2lkdGggPiB3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jZW50ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA8IHdpZHRoIC8gMiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIHNsaWRlV2lkdGggKyBkaW1lbnNpb25zKHRoaXMuc2xpZGVzWytpICsgMV0pLndpZHRoIC8gMiA+IHdpZHRoIC8gMlxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHMucHVzaCgraSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gd2lkdGggLyAyIC0gc2xpZGVXaWR0aCAvIDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0cy5wdXNoKE1hdGgubWluKCtpLCB0aGlzLm1heEluZGV4KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGVmdCArPSBzbGlkZVdpZHRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICB0cmFuc2l0aW9uT3B0aW9ucygpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY2VudGVyOiB0aGlzLmNlbnRlcixcbiAgICAgICAgICAgICAgICBsaXN0OiB0aGlzLmxpc3QsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIHNsaWRlcygpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbih0aGlzLmxpc3QpLmZpbHRlcihpc1Zpc2libGUpO1xuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBjb25uZWN0ZWQoKSB7XG4gICAgICAgIHRvZ2dsZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0NvbnRhaW5lciwgISQoYC4ke3RoaXMuY2xzQ29udGFpbmVyfWAsIHRoaXMuJGVsKSk7XG4gICAgfSxcblxuICAgIG9ic2VydmU6IHJlc2l6ZSh7XG4gICAgICAgIHRhcmdldDogKHsgc2xpZGVzIH0pID0+IHNsaWRlcyxcbiAgICB9KSxcblxuICAgIHVwZGF0ZToge1xuICAgICAgICB3cml0ZSgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5uYXZJdGVtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdG9OdW1iZXIoZGF0YShlbCwgdGhpcy5hdHRySXRlbSkpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuaGlkZGVuID1cbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLm1heEluZGV4IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA+IHRoaXMubWF4SW5kZXggfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnNldHMgJiYgIWluY2x1ZGVzKHRoaXMuc2V0cywgaW5kZXgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmxlbmd0aCAmJiAhdGhpcy5kcmFnZ2luZyAmJiAhdGhpcy5zdGFjay5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlb3JkZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlQ2xhc3NlcygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGV2ZW50czogWydyZXNpemUnXSxcbiAgICB9LFxuXG4gICAgZXZlbnRzOiB7XG4gICAgICAgIGJlZm9yZWl0ZW1zaG93KGUpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5kcmFnZ2luZyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0cyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2subGVuZ3RoIDwgMiAmJlxuICAgICAgICAgICAgICAgICFpbmNsdWRlcyh0aGlzLnNldHMsIHRoaXMuaW5kZXgpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy5nZXRWYWxpZEluZGV4KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4IC1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2SW5kZXggK1xuICAgICAgICAgICAgICAgICAgICAoKHRoaXMuZGlyID4gMCAmJiB0aGlzLmluZGV4IDwgdGhpcy5wcmV2SW5kZXgpIHx8XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmRpciA8IDAgJiYgdGhpcy5pbmRleCA+IHRoaXMucHJldkluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAodGhpcy5tYXhJbmRleCArIDEpICogdGhpcy5kaXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogMClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5kcmFnZ2luZyAmJiBkaWZmID4gMSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2suc3BsaWNlKDEsIDAsIHRoaXMuZGlyID4gMCA/ICduZXh0JyA6ICdwcmV2aW91cycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID1cbiAgICAgICAgICAgICAgICB0aGlzLmRpciA8IDAgfHwgIXRoaXMuc2xpZGVzW3RoaXMucHJldkluZGV4XSA/IHRoaXMuaW5kZXggOiB0aGlzLnByZXZJbmRleDtcbiAgICAgICAgICAgIHRoaXMuZHVyYXRpb24gPVxuICAgICAgICAgICAgICAgIHNwZWVkVXAodGhpcy5hdmdXaWR0aCAvIHRoaXMudmVsb2NpdHkpICpcbiAgICAgICAgICAgICAgICAoZGltZW5zaW9ucyh0aGlzLnNsaWRlc1tpbmRleF0pLndpZHRoIC8gdGhpcy5hdmdXaWR0aCk7XG5cbiAgICAgICAgICAgIHRoaXMucmVvcmRlcigpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGl0ZW1zaG93KCkge1xuICAgICAgICAgICAgaWYgKH50aGlzLnByZXZJbmRleCkge1xuICAgICAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuX2dldFRyYW5zaXRpb25lcigpLmdldEl0ZW1JbigpLCB0aGlzLmNsc0FjdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgaXRlbXNob3duKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVDbGFzc2VzKCk7XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgcmVvcmRlcigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbml0ZSkge1xuICAgICAgICAgICAgICAgIGNzcyh0aGlzLnNsaWRlcywgJ29yZGVyJywgJycpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRpciA+IDAgJiYgdGhpcy5zbGlkZXNbdGhpcy5wcmV2SW5kZXhdID8gdGhpcy5wcmV2SW5kZXggOiB0aGlzLmluZGV4O1xuXG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5mb3JFYWNoKChzbGlkZSwgaSkgPT5cbiAgICAgICAgICAgICAgICBjc3MoXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlLFxuICAgICAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpciA+IDAgJiYgaSA8IGluZGV4ID8gMSA6IHRoaXMuZGlyIDwgMCAmJiBpID49IHRoaXMuaW5kZXggPyAtMSA6ICcnXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmNlbnRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuc2xpZGVzW2luZGV4XTtcbiAgICAgICAgICAgIGxldCB3aWR0aCA9IGRpbWVuc2lvbnModGhpcy5saXN0KS53aWR0aCAvIDIgLSBkaW1lbnNpb25zKG5leHQpLndpZHRoIC8gMjtcbiAgICAgICAgICAgIGxldCBqID0gMDtcblxuICAgICAgICAgICAgd2hpbGUgKHdpZHRoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNsaWRlSW5kZXggPSB0aGlzLmdldEluZGV4KC0taiArIGluZGV4LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2xpZGUgPSB0aGlzLnNsaWRlc1tzbGlkZUluZGV4XTtcblxuICAgICAgICAgICAgICAgIGNzcyhzbGlkZSwgJ29yZGVyJywgc2xpZGVJbmRleCA+IGluZGV4ID8gLTIgOiAtMSk7XG4gICAgICAgICAgICAgICAgd2lkdGggLT0gZGltZW5zaW9ucyhzbGlkZSkud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlQWN0aXZlQ2xhc3NlcygpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZXMgPSB0aGlzLl9nZXRUcmFuc2l0aW9uZXIodGhpcy5pbmRleCkuZ2V0QWN0aXZlcygpO1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlQ2xhc3NlcyA9IFtcbiAgICAgICAgICAgICAgICB0aGlzLmNsc0FjdGl2ZSxcbiAgICAgICAgICAgICAgICAoKCF0aGlzLnNldHMgfHwgaW5jbHVkZXModGhpcy5zZXRzLCB0b0Zsb2F0KHRoaXMuaW5kZXgpKSkgJiYgdGhpcy5jbHNBY3RpdmF0ZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2xpZGUgb2YgdGhpcy5zbGlkZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBpbmNsdWRlcyhhY3RpdmVzLCBzbGlkZSk7XG4gICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2xpZGUsIGFjdGl2ZUNsYXNzZXMsIGFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgYXR0cihzbGlkZSwgJ2FyaWEtaGlkZGVuJywgIWFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmb2N1c2FibGUgb2YgJCQoc2VsRm9jdXNhYmxlLCBzbGlkZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNPd24oZm9jdXNhYmxlLCAnX3RhYmluZGV4JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZS5fdGFiaW5kZXggPSBhdHRyKGZvY3VzYWJsZSwgJ3RhYmluZGV4Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXR0cihmb2N1c2FibGUsICd0YWJpbmRleCcsIGFjdGl2ZSA/IGZvY3VzYWJsZS5fdGFiaW5kZXggOiAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGdldFZhbGlkSW5kZXgoaW5kZXggPSB0aGlzLmluZGV4LCBwcmV2SW5kZXggPSB0aGlzLnByZXZJbmRleCkge1xuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmdldEluZGV4KGluZGV4LCBwcmV2SW5kZXgpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2V0cykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHByZXY7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZXModGhpcy5zZXRzLCBpbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHByZXYgPSBpbmRleDtcbiAgICAgICAgICAgICAgICBpbmRleCA9IHRoaXMuZ2V0SW5kZXgoaW5kZXggKyB0aGlzLmRpciwgcHJldkluZGV4KTtcbiAgICAgICAgICAgIH0gd2hpbGUgKGluZGV4ICE9PSBwcmV2KTtcblxuICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEFkamFjZW50U2xpZGVzKCkge1xuICAgICAgICAgICAgY29uc3QgeyB3aWR0aCB9ID0gZGltZW5zaW9ucyh0aGlzLmxpc3QpO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IC13aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gd2lkdGggKiAyO1xuICAgICAgICAgICAgY29uc3Qgc2xpZGVXaWR0aCA9IGRpbWVuc2lvbnModGhpcy5zbGlkZXNbdGhpcy5pbmRleF0pLndpZHRoO1xuICAgICAgICAgICAgY29uc3Qgc2xpZGVMZWZ0ID0gdGhpcy5jZW50ZXIgPyB3aWR0aCAvIDIgLSBzbGlkZVdpZHRoIC8gMiA6IDA7XG4gICAgICAgICAgICBjb25zdCBzbGlkZXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGkgb2YgWy0xLCAxXSkge1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TGVmdCA9IHNsaWRlTGVmdCArIChpID4gMCA/IHNsaWRlV2lkdGggOiAwKTtcbiAgICAgICAgICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzbGlkZSA9IHRoaXMuc2xpZGVzW3RoaXMuZ2V0SW5kZXgodGhpcy5pbmRleCArIGkgKyBqKysgKiBpKV07XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMZWZ0ICs9IGRpbWVuc2lvbnMoc2xpZGUpLndpZHRoICogaTtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzLmFkZChzbGlkZSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAodGhpcy5sZW5ndGggPiBqICYmIGN1cnJlbnRMZWZ0ID4gbGVmdCAmJiBjdXJyZW50TGVmdCA8IHJpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHNsaWRlcyk7XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5cbmZ1bmN0aW9uIGlzRmluaXRlKGxpc3QsIGNlbnRlcikge1xuICAgIGlmICghbGlzdCB8fCBsaXN0Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgeyB3aWR0aDogbGlzdFdpZHRoIH0gPSBkaW1lbnNpb25zKGxpc3QpO1xuICAgIGlmICghY2VudGVyKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwoZ2V0V2lkdGgobGlzdCkpIDwgTWF0aC50cnVuYyhsaXN0V2lkdGggKyBnZXRNYXhFbFdpZHRoKGxpc3QpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzbGlkZXMgPSBjaGlsZHJlbihsaXN0KTtcbiAgICBjb25zdCBsaXN0SGFsZiA9IE1hdGgudHJ1bmMobGlzdFdpZHRoIC8gMik7XG4gICAgZm9yIChjb25zdCBpbmRleCBpbiBzbGlkZXMpIHtcbiAgICAgICAgY29uc3Qgc2xpZGUgPSBzbGlkZXNbaW5kZXhdO1xuICAgICAgICBjb25zdCBzbGlkZVdpZHRoID0gZGltZW5zaW9ucyhzbGlkZSkud2lkdGg7XG4gICAgICAgIGNvbnN0IHNsaWRlc0luVmlldyA9IG5ldyBTZXQoW3NsaWRlXSk7XG5cbiAgICAgICAgbGV0IGRpZmYgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgWy0xLCAxXSkge1xuICAgICAgICAgICAgbGV0IGxlZnQgPSBzbGlkZVdpZHRoIC8gMjtcblxuICAgICAgICAgICAgbGV0IGogPSAwO1xuXG4gICAgICAgICAgICB3aGlsZSAobGVmdCA8IGxpc3RIYWxmKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFNsaWRlID0gc2xpZGVzW2dldEluZGV4KCtpbmRleCArIGkgKyBqKysgKiBpLCBzbGlkZXMpXTtcblxuICAgICAgICAgICAgICAgIGlmIChzbGlkZXNJblZpZXcuaGFzKG5leHRTbGlkZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGVmdCArPSBkaW1lbnNpb25zKG5leHRTbGlkZSkud2lkdGg7XG4gICAgICAgICAgICAgICAgc2xpZGVzSW5WaWV3LmFkZChuZXh0U2xpZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlmZiA9IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIGRpZmYsXG4gICAgICAgICAgICAgICAgc2xpZGVXaWR0aCAvIDIgK1xuICAgICAgICAgICAgICAgICAgICBkaW1lbnNpb25zKHNsaWRlc1tnZXRJbmRleCgraW5kZXggKyBpLCBzbGlkZXMpXSkud2lkdGggLyAyIC1cbiAgICAgICAgICAgICAgICAgICAgKGxlZnQgLSBsaXN0SGFsZilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkaWZmID5cbiAgICAgICAgICAgIHN1bUJ5KFxuICAgICAgICAgICAgICAgIHNsaWRlcy5maWx0ZXIoKHNsaWRlKSA9PiAhc2xpZGVzSW5WaWV3LmhhcyhzbGlkZSkpLFxuICAgICAgICAgICAgICAgIChzbGlkZSkgPT4gZGltZW5zaW9ucyhzbGlkZSkud2lkdGhcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0TWF4RWxXaWR0aChsaXN0KSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIC4uLmNoaWxkcmVuKGxpc3QpLm1hcCgoZWwpID0+IGRpbWVuc2lvbnMoZWwpLndpZHRoKSk7XG59XG4iLCJpbXBvcnQgUGFyYWxsYXggZnJvbSAnLi4vbWl4aW4vcGFyYWxsYXgnO1xuaW1wb3J0IHsgY3NzLCBlbmRzV2l0aCwgZmFzdGRvbSwgbm9vcCwgcXVlcnksIFRyYW5zaXRpb24gfSBmcm9tICd1aWtpdC11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG1peGluczogW1BhcmFsbGF4XSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgc2VsSXRlbTogJyFsaScsXG4gICAgfSxcblxuICAgIGJlZm9yZUNvbm5lY3QoKSB7XG4gICAgICAgIHRoaXMuaXRlbSA9IHF1ZXJ5KHRoaXMuc2VsSXRlbSwgdGhpcy4kZWwpO1xuICAgIH0sXG5cbiAgICBkaXNjb25uZWN0ZWQoKSB7XG4gICAgICAgIHRoaXMuaXRlbSA9IG51bGw7XG4gICAgfSxcblxuICAgIGV2ZW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnaXRlbWluIGl0ZW1vdXQnLFxuXG4gICAgICAgICAgICBzZWxmOiB0cnVlLFxuXG4gICAgICAgICAgICBlbCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaGFuZGxlcih7IHR5cGUsIGRldGFpbDogeyBwZXJjZW50LCBkdXJhdGlvbiwgdGltaW5nLCBkaXIgfSB9KSB7XG4gICAgICAgICAgICAgICAgZmFzdGRvbS5yZWFkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoTWVkaWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzRnJvbSA9IHRoaXMuZ2V0Q3NzKGdldEN1cnJlbnRQZXJjZW50KHR5cGUsIGRpciwgcGVyY2VudCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wc1RvID0gdGhpcy5nZXRDc3MoaXNJbih0eXBlKSA/IDAuNSA6IGRpciA+IDAgPyAxIDogMCk7XG4gICAgICAgICAgICAgICAgICAgIGZhc3Rkb20ud3JpdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCBwcm9wc0Zyb20pO1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbi5zdGFydCh0aGlzLiRlbCwgcHJvcHNUbywgZHVyYXRpb24sIHRpbWluZykuY2F0Y2gobm9vcCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndHJhbnNpdGlvbmNhbmNlbGVkIHRyYW5zaXRpb25lbmQnLFxuXG4gICAgICAgICAgICBzZWxmOiB0cnVlLFxuXG4gICAgICAgICAgICBlbCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaGFuZGxlcigpIHtcbiAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbCh0aGlzLiRlbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdpdGVtdHJhbnNsYXRlaW4gaXRlbXRyYW5zbGF0ZW91dCcsXG5cbiAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgIGVsKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW07XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoYW5kbGVyKHsgdHlwZSwgZGV0YWlsOiB7IHBlcmNlbnQsIGRpciB9IH0pIHtcbiAgICAgICAgICAgICAgICBmYXN0ZG9tLnJlYWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2hNZWRpYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLmdldENzcyhnZXRDdXJyZW50UGVyY2VudCh0eXBlLCBkaXIsIHBlcmNlbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgZmFzdGRvbS53cml0ZSgoKSA9PiBjc3ModGhpcy4kZWwsIHByb3BzKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF0sXG59O1xuXG5mdW5jdGlvbiBpc0luKHR5cGUpIHtcbiAgICByZXR1cm4gZW5kc1dpdGgodHlwZSwgJ2luJyk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRQZXJjZW50KHR5cGUsIGRpciwgcGVyY2VudCkge1xuICAgIHBlcmNlbnQgLz0gMjtcblxuICAgIHJldHVybiBpc0luKHR5cGUpIF4gKGRpciA8IDApID8gcGVyY2VudCA6IDEgLSBwZXJjZW50O1xufVxuIiwiaW1wb3J0IEFuaW1hdGlvbnMsIHtcbiAgICBzY2FsZTNkLFxuICAgIHRyYW5zbGF0ZSxcbiAgICB0cmFuc2xhdGVkLFxufSBmcm9tICcuLi8uLi9taXhpbi9pbnRlcm5hbC9zbGlkZXNob3ctYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICd1aWtpdC11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIC4uLkFuaW1hdGlvbnMsXG4gICAgZmFkZToge1xuICAgICAgICBzaG93KCkge1xuICAgICAgICAgICAgcmV0dXJuIFt7IG9wYWNpdHk6IDAsIHpJbmRleDogMCB9LCB7IHpJbmRleDogLTEgfV07XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGVyY2VudChjdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gMSAtIGNzcyhjdXJyZW50LCAnb3BhY2l0eScpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRyYW5zbGF0ZShwZXJjZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gW3sgb3BhY2l0eTogMSAtIHBlcmNlbnQsIHpJbmRleDogMCB9LCB7IHpJbmRleDogLTEgfV07XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHNjYWxlOiB7XG4gICAgICAgIHNob3coKSB7XG4gICAgICAgICAgICByZXR1cm4gW3sgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiBzY2FsZTNkKDEgKyAwLjUpLCB6SW5kZXg6IDAgfSwgeyB6SW5kZXg6IC0xIH1dO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBlcmNlbnQoY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIDEgLSBjc3MoY3VycmVudCwgJ29wYWNpdHknKTtcbiAgICAgICAgfSxcblxuICAgICAgICB0cmFuc2xhdGUocGVyY2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICB7IG9wYWNpdHk6IDEgLSBwZXJjZW50LCB0cmFuc2Zvcm06IHNjYWxlM2QoMSArIDAuNSAqIHBlcmNlbnQpLCB6SW5kZXg6IDAgfSxcbiAgICAgICAgICAgICAgICB7IHpJbmRleDogLTEgfSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHB1bGw6IHtcbiAgICAgICAgc2hvdyhkaXIpIHtcbiAgICAgICAgICAgIHJldHVybiBkaXIgPCAwXG4gICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgzMCksIHpJbmRleDogLTEgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKCksIHpJbmRleDogMCB9LFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEwMCksIHpJbmRleDogMCB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoKSwgekluZGV4OiAtMSB9LFxuICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcblxuICAgICAgICBwZXJjZW50KGN1cnJlbnQsIG5leHQsIGRpcikge1xuICAgICAgICAgICAgcmV0dXJuIGRpciA8IDAgPyAxIC0gdHJhbnNsYXRlZChuZXh0KSA6IHRyYW5zbGF0ZWQoY3VycmVudCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdHJhbnNsYXRlKHBlcmNlbnQsIGRpcikge1xuICAgICAgICAgICAgcmV0dXJuIGRpciA8IDBcbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKDMwICogcGVyY2VudCksIHpJbmRleDogLTEgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAgKiAoMSAtIHBlcmNlbnQpKSwgekluZGV4OiAwIH0sXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgICAgICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtcGVyY2VudCAqIDEwMCksIHpJbmRleDogMCB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMzAgKiAoMSAtIHBlcmNlbnQpKSwgekluZGV4OiAtMSB9LFxuICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgcHVzaDoge1xuICAgICAgICBzaG93KGRpcikge1xuICAgICAgICAgICAgcmV0dXJuIGRpciA8IDBcbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMCksIHpJbmRleDogMCB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoKSwgekluZGV4OiAtMSB9LFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTMwKSwgekluZGV4OiAtMSB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoKSwgekluZGV4OiAwIH0sXG4gICAgICAgICAgICAgICAgICBdO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBlcmNlbnQoY3VycmVudCwgbmV4dCwgZGlyKSB7XG4gICAgICAgICAgICByZXR1cm4gZGlyID4gMCA/IDEgLSB0cmFuc2xhdGVkKG5leHQpIDogdHJhbnNsYXRlZChjdXJyZW50KTtcbiAgICAgICAgfSxcblxuICAgICAgICB0cmFuc2xhdGUocGVyY2VudCwgZGlyKSB7XG4gICAgICAgICAgICByZXR1cm4gZGlyIDwgMFxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUocGVyY2VudCAqIDEwMCksIHpJbmRleDogMCB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTMwICogKDEgLSBwZXJjZW50KSksIHpJbmRleDogLTEgfSxcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC0zMCAqIHBlcmNlbnQpLCB6SW5kZXg6IC0xIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDAgKiAoMSAtIHBlcmNlbnQpKSwgekluZGV4OiAwIH0sXG4gICAgICAgICAgICAgICAgICBdO1xuICAgICAgICB9LFxuICAgIH0sXG59O1xuIiwiaW1wb3J0IENsYXNzIGZyb20gJy4uL21peGluL2NsYXNzJztcbmltcG9ydCBTbGlkZXNob3cgZnJvbSAnLi4vbWl4aW4vc2xpZGVzaG93JztcbmltcG9ydCBBbmltYXRpb25zIGZyb20gJy4vaW50ZXJuYWwvc2xpZGVzaG93LWFuaW1hdGlvbnMnO1xuaW1wb3J0IFNsaWRlclJlYWN0aXZlIGZyb20gJy4uL21peGluL3NsaWRlci1yZWFjdGl2ZSc7XG5pbXBvcnQgU2xpZGVyUHJlbG9hZCBmcm9tICcuL2ludGVybmFsL3NsaWRlci1wcmVsb2FkJztcbmltcG9ydCB7IGJveE1vZGVsQWRqdXN0LCBjc3MgfSBmcm9tICd1aWtpdC11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG1peGluczogW0NsYXNzLCBTbGlkZXNob3csIFNsaWRlclJlYWN0aXZlLCBTbGlkZXJQcmVsb2FkXSxcblxuICAgIHByb3BzOiB7XG4gICAgICAgIHJhdGlvOiBTdHJpbmcsXG4gICAgICAgIG1pbkhlaWdodDogTnVtYmVyLFxuICAgICAgICBtYXhIZWlnaHQ6IE51bWJlcixcbiAgICB9LFxuXG4gICAgZGF0YToge1xuICAgICAgICByYXRpbzogJzE2OjknLFxuICAgICAgICBtaW5IZWlnaHQ6IGZhbHNlLFxuICAgICAgICBtYXhIZWlnaHQ6IGZhbHNlLFxuICAgICAgICBzZWxMaXN0OiAnLnVrLXNsaWRlc2hvdy1pdGVtcycsXG4gICAgICAgIGF0dHJJdGVtOiAndWstc2xpZGVzaG93LWl0ZW0nLFxuICAgICAgICBzZWxOYXY6ICcudWstc2xpZGVzaG93LW5hdicsXG4gICAgICAgIEFuaW1hdGlvbnMsXG4gICAgfSxcblxuICAgIHVwZGF0ZToge1xuICAgICAgICByZWFkKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBbd2lkdGgsIGhlaWdodF0gPSB0aGlzLnJhdGlvLnNwbGl0KCc6JykubWFwKE51bWJlcik7XG5cbiAgICAgICAgICAgIGhlaWdodCA9IChoZWlnaHQgKiB0aGlzLmxpc3Qub2Zmc2V0V2lkdGgpIC8gd2lkdGggfHwgMDtcblxuICAgICAgICAgICAgaWYgKHRoaXMubWluSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgodGhpcy5taW5IZWlnaHQsIGhlaWdodCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1heEhlaWdodCkge1xuICAgICAgICAgICAgICAgIGhlaWdodCA9IE1hdGgubWluKHRoaXMubWF4SGVpZ2h0LCBoZWlnaHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyBoZWlnaHQ6IGhlaWdodCAtIGJveE1vZGVsQWRqdXN0KHRoaXMubGlzdCwgJ2hlaWdodCcsICdjb250ZW50LWJveCcpIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgd3JpdGUoeyBoZWlnaHQgfSkge1xuICAgICAgICAgICAgaGVpZ2h0ID4gMCAmJiBjc3ModGhpcy5saXN0LCAnbWluSGVpZ2h0JywgaGVpZ2h0KTtcbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IFsncmVzaXplJ10sXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgZ2V0QWRqYWNlbnRTbGlkZXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gWzEsIC0xXS5tYXAoKGkpID0+IHRoaXMuc2xpZGVzW3RoaXMuZ2V0SW5kZXgodGhpcy5pbmRleCArIGkpXSk7XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG4iLCJpbXBvcnQgQW5pbWF0ZSBmcm9tICcuLi9taXhpbi9hbmltYXRlJztcbmltcG9ydCBDbGFzcyBmcm9tICcuLi9taXhpbi9jbGFzcyc7XG5pbXBvcnQge1xuICAgICQsXG4gICAgJCQsXG4gICAgYWRkQ2xhc3MsXG4gICAgYXBwZW5kLFxuICAgIGFzc2lnbixcbiAgICBhdHRyLFxuICAgIGJlZm9yZSxcbiAgICBjaGlsZHJlbixcbiAgICBjc3MsXG4gICAgZmluZEluZGV4LFxuICAgIGdldEV2ZW50UG9zLFxuICAgIGhhc1RvdWNoLFxuICAgIGhlaWdodCxcbiAgICBpbmRleCxcbiAgICBpc0VtcHR5LFxuICAgIGlzSW5wdXQsXG4gICAgaXNUYWcsXG4gICAgb2ZmLFxuICAgIG9mZnNldFZpZXdwb3J0LFxuICAgIG9uLFxuICAgIHBhcmVudCxcbiAgICBwb2ludGVyRG93bixcbiAgICBwb2ludGVyTW92ZSxcbiAgICBwb2ludGVyVXAsXG4gICAgcG9pbnRJblJlY3QsXG4gICAgcmVtb3ZlLFxuICAgIHJlbW92ZUNsYXNzLFxuICAgIHNjcm9sbFBhcmVudHMsXG4gICAgdG9nZ2xlQ2xhc3MsXG4gICAgVHJhbnNpdGlvbixcbiAgICB0cmlnZ2VyLFxuICAgIHdpdGhpbixcbn0gZnJvbSAndWlraXQtdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBtaXhpbnM6IFtDbGFzcywgQW5pbWF0ZV0sXG5cbiAgICBwcm9wczoge1xuICAgICAgICBncm91cDogU3RyaW5nLFxuICAgICAgICB0aHJlc2hvbGQ6IE51bWJlcixcbiAgICAgICAgY2xzSXRlbTogU3RyaW5nLFxuICAgICAgICBjbHNQbGFjZWhvbGRlcjogU3RyaW5nLFxuICAgICAgICBjbHNEcmFnOiBTdHJpbmcsXG4gICAgICAgIGNsc0RyYWdTdGF0ZTogU3RyaW5nLFxuICAgICAgICBjbHNCYXNlOiBTdHJpbmcsXG4gICAgICAgIGNsc05vRHJhZzogU3RyaW5nLFxuICAgICAgICBjbHNFbXB0eTogU3RyaW5nLFxuICAgICAgICBjbHNDdXN0b206IFN0cmluZyxcbiAgICAgICAgaGFuZGxlOiBTdHJpbmcsXG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgZ3JvdXA6IGZhbHNlLFxuICAgICAgICB0aHJlc2hvbGQ6IDUsXG4gICAgICAgIGNsc0l0ZW06ICd1ay1zb3J0YWJsZS1pdGVtJyxcbiAgICAgICAgY2xzUGxhY2Vob2xkZXI6ICd1ay1zb3J0YWJsZS1wbGFjZWhvbGRlcicsXG4gICAgICAgIGNsc0RyYWc6ICd1ay1zb3J0YWJsZS1kcmFnJyxcbiAgICAgICAgY2xzRHJhZ1N0YXRlOiAndWstZHJhZycsXG4gICAgICAgIGNsc0Jhc2U6ICd1ay1zb3J0YWJsZScsXG4gICAgICAgIGNsc05vRHJhZzogJ3VrLXNvcnRhYmxlLW5vZHJhZycsXG4gICAgICAgIGNsc0VtcHR5OiAndWstc29ydGFibGUtZW1wdHknLFxuICAgICAgICBjbHNDdXN0b206ICcnLFxuICAgICAgICBoYW5kbGU6IGZhbHNlLFxuICAgICAgICBwb3M6IHt9LFxuICAgIH0sXG5cbiAgICBjcmVhdGVkKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBbJ2luaXQnLCAnc3RhcnQnLCAnbW92ZScsICdlbmQnXSkge1xuICAgICAgICAgICAgY29uc3QgZm4gPSB0aGlzW2tleV07XG4gICAgICAgICAgICB0aGlzW2tleV0gPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFzc2lnbih0aGlzLnBvcywgZ2V0RXZlbnRQb3MoZSkpO1xuICAgICAgICAgICAgICAgIGZuKGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBldmVudHM6IHtcbiAgICAgICAgbmFtZTogcG9pbnRlckRvd24sXG4gICAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgICBoYW5kbGVyOiAnaW5pdCcsXG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIHRhcmdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4kZWwudEJvZGllcyB8fCBbdGhpcy4kZWxdKVswXTtcbiAgICAgICAgfSxcblxuICAgICAgICBpdGVtcygpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbih0aGlzLnRhcmdldCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaXNFbXB0eSgpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0VtcHR5KHRoaXMuaXRlbXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGhhbmRsZXMoeyBoYW5kbGUgfSwgZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGUgPyAkJChoYW5kbGUsIGVsKSA6IHRoaXMuaXRlbXM7XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHdhdGNoOiB7XG4gICAgICAgIGlzRW1wdHkoZW1wdHkpIHtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHRoaXMudGFyZ2V0LCB0aGlzLmNsc0VtcHR5LCBlbXB0eSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaGFuZGxlcyhoYW5kbGVzLCBwcmV2KSB7XG4gICAgICAgICAgICBjc3MocHJldiwgeyB0b3VjaEFjdGlvbjogJycsIHVzZXJTZWxlY3Q6ICcnIH0pO1xuICAgICAgICAgICAgY3NzKGhhbmRsZXMsIHsgdG91Y2hBY3Rpb246IGhhc1RvdWNoID8gJ25vbmUnIDogJycsIHVzZXJTZWxlY3Q6ICdub25lJyB9KTsgLy8gdG91Y2hBY3Rpb24gc2V0IHRvICdub25lJyBjYXVzZXMgYSBwZXJmb3JtYW5jZSBkcm9wIGluIENocm9tZSA4MFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICB1cGRhdGU6IHtcbiAgICAgICAgd3JpdGUoZGF0YSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRyYWcgfHwgIXBhcmVudCh0aGlzLnBsYWNlaG9sZGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIHBvczogeyB4LCB5IH0sXG4gICAgICAgICAgICAgICAgb3JpZ2luOiB7IG9mZnNldFRvcCwgb2Zmc2V0TGVmdCB9LFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgfSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGNzcyh0aGlzLmRyYWcsIHtcbiAgICAgICAgICAgICAgICB0b3A6IHkgLSBvZmZzZXRUb3AsXG4gICAgICAgICAgICAgICAgbGVmdDogeCAtIG9mZnNldExlZnQsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc29ydGFibGUgPSB0aGlzLmdldFNvcnRhYmxlKGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSkpO1xuXG4gICAgICAgICAgICBpZiAoIXNvcnRhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7IGl0ZW1zIH0gPSBzb3J0YWJsZTtcblxuICAgICAgICAgICAgaWYgKGl0ZW1zLnNvbWUoVHJhbnNpdGlvbi5pblByb2dyZXNzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZmluZFRhcmdldChpdGVtcywgeyB4LCB5IH0pO1xuXG4gICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoICYmICghdGFyZ2V0IHx8IHRhcmdldCA9PT0gcGxhY2Vob2xkZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMuZ2V0U29ydGFibGUocGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0VGFyZ2V0ID0gZmluZEluc2VydFRhcmdldChcbiAgICAgICAgICAgICAgICBzb3J0YWJsZS50YXJnZXQsXG4gICAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICBzb3J0YWJsZSA9PT0gcHJldmlvdXMgJiYgZGF0YS5tb3ZlZCAhPT0gdGFyZ2V0XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoaW5zZXJ0VGFyZ2V0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluc2VydFRhcmdldCAmJiBwbGFjZWhvbGRlciA9PT0gaW5zZXJ0VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc29ydGFibGUgIT09IHByZXZpb3VzKSB7XG4gICAgICAgICAgICAgICAgcHJldmlvdXMucmVtb3ZlKHBsYWNlaG9sZGVyKTtcbiAgICAgICAgICAgICAgICBkYXRhLm1vdmVkID0gdGFyZ2V0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YS5tb3ZlZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc29ydGFibGUuaW5zZXJ0KHBsYWNlaG9sZGVyLCBpbnNlcnRUYXJnZXQpO1xuXG4gICAgICAgICAgICB0aGlzLnRvdWNoZWQuYWRkKHNvcnRhYmxlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IFsnbW92ZSddLFxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGluaXQoZSkge1xuICAgICAgICAgICAgY29uc3QgeyB0YXJnZXQsIGJ1dHRvbiwgZGVmYXVsdFByZXZlbnRlZCB9ID0gZTtcbiAgICAgICAgICAgIGNvbnN0IFtwbGFjZWhvbGRlcl0gPSB0aGlzLml0ZW1zLmZpbHRlcigoZWwpID0+IHdpdGhpbih0YXJnZXQsIGVsKSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhcGxhY2Vob2xkZXIgfHxcbiAgICAgICAgICAgICAgICBkZWZhdWx0UHJldmVudGVkIHx8XG4gICAgICAgICAgICAgICAgYnV0dG9uID4gMCB8fFxuICAgICAgICAgICAgICAgIGlzSW5wdXQodGFyZ2V0KSB8fFxuICAgICAgICAgICAgICAgIHdpdGhpbih0YXJnZXQsIGAuJHt0aGlzLmNsc05vRHJhZ31gKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLmhhbmRsZSAmJiAhd2l0aGluKHRhcmdldCwgdGhpcy5oYW5kbGUpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHRoaXMudG91Y2hlZCA9IG5ldyBTZXQoW3RoaXNdKTtcbiAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luID0geyB0YXJnZXQsIGluZGV4OiBpbmRleChwbGFjZWhvbGRlciksIC4uLnRoaXMucG9zIH07XG5cbiAgICAgICAgICAgIG9uKGRvY3VtZW50LCBwb2ludGVyTW92ZSwgdGhpcy5tb3ZlKTtcbiAgICAgICAgICAgIG9uKGRvY3VtZW50LCBwb2ludGVyVXAsIHRoaXMuZW5kKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgc3RhcnQoZSkge1xuICAgICAgICAgICAgdGhpcy5kcmFnID0gYXBwZW5kRHJhZyh0aGlzLiRjb250YWluZXIsIHRoaXMucGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgY29uc3QgeyBsZWZ0LCB0b3AgfSA9IHRoaXMucGxhY2Vob2xkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBhc3NpZ24odGhpcy5vcmlnaW4sIHsgb2Zmc2V0TGVmdDogdGhpcy5wb3MueCAtIGxlZnQsIG9mZnNldFRvcDogdGhpcy5wb3MueSAtIHRvcCB9KTtcblxuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5kcmFnLCB0aGlzLmNsc0RyYWcsIHRoaXMuY2xzQ3VzdG9tKTtcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMucGxhY2Vob2xkZXIsIHRoaXMuY2xzUGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5pdGVtcywgdGhpcy5jbHNJdGVtKTtcbiAgICAgICAgICAgIGFkZENsYXNzKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhpcy5jbHNEcmFnU3RhdGUpO1xuXG4gICAgICAgICAgICB0cmlnZ2VyKHRoaXMuJGVsLCAnc3RhcnQnLCBbdGhpcywgdGhpcy5wbGFjZWhvbGRlcl0pO1xuXG4gICAgICAgICAgICB0cmFja1Njcm9sbCh0aGlzLnBvcyk7XG5cbiAgICAgICAgICAgIHRoaXMubW92ZShlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBtb3ZlKGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRyYWcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdtb3ZlJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIE1hdGguYWJzKHRoaXMucG9zLnggLSB0aGlzLm9yaWdpbi54KSA+IHRoaXMudGhyZXNob2xkIHx8XG4gICAgICAgICAgICAgICAgTWF0aC5hYnModGhpcy5wb3MueSAtIHRoaXMub3JpZ2luLnkpID4gdGhpcy50aHJlc2hvbGRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZW5kKCkge1xuICAgICAgICAgICAgb2ZmKGRvY3VtZW50LCBwb2ludGVyTW92ZSwgdGhpcy5tb3ZlKTtcbiAgICAgICAgICAgIG9mZihkb2N1bWVudCwgcG9pbnRlclVwLCB0aGlzLmVuZCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5kcmFnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bnRyYWNrU2Nyb2xsKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNvcnRhYmxlID0gdGhpcy5nZXRTb3J0YWJsZSh0aGlzLnBsYWNlaG9sZGVyKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMgPT09IHNvcnRhYmxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luLmluZGV4ICE9PSBpbmRleCh0aGlzLnBsYWNlaG9sZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHRoaXMuJGVsLCAnbW92ZWQnLCBbdGhpcywgdGhpcy5wbGFjZWhvbGRlcl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlcihzb3J0YWJsZS4kZWwsICdhZGRlZCcsIFtzb3J0YWJsZSwgdGhpcy5wbGFjZWhvbGRlcl0pO1xuICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdyZW1vdmVkJywgW3RoaXMsIHRoaXMucGxhY2Vob2xkZXJdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ3N0b3AnLCBbdGhpcywgdGhpcy5wbGFjZWhvbGRlcl0pO1xuXG4gICAgICAgICAgICByZW1vdmUodGhpcy5kcmFnKTtcbiAgICAgICAgICAgIHRoaXMuZHJhZyA9IG51bGw7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBjbHNQbGFjZWhvbGRlciwgY2xzSXRlbSB9IG9mIHRoaXMudG91Y2hlZCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc29ydGFibGUgb2YgdGhpcy50b3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKHNvcnRhYmxlLml0ZW1zLCBjbHNQbGFjZWhvbGRlciwgY2xzSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50b3VjaGVkID0gbnVsbDtcbiAgICAgICAgICAgIHJlbW92ZUNsYXNzKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhpcy5jbHNEcmFnU3RhdGUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGluc2VydChlbGVtZW50LCB0YXJnZXQpIHtcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuaXRlbXMsIHRoaXMuY2xzSXRlbSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGluc2VydCA9ICgpID0+ICh0YXJnZXQgPyBiZWZvcmUodGFyZ2V0LCBlbGVtZW50KSA6IGFwcGVuZCh0aGlzLnRhcmdldCwgZWxlbWVudCkpO1xuXG4gICAgICAgICAgICB0aGlzLmFuaW1hdGUoaW5zZXJ0KTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW1vdmUoZWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKCF3aXRoaW4oZWxlbWVudCwgdGhpcy50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFuaW1hdGUoKCkgPT4gcmVtb3ZlKGVsZW1lbnQpKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRTb3J0YWJsZShlbGVtZW50KSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc29ydGFibGUgPSB0aGlzLiRnZXRDb21wb25lbnQoZWxlbWVudCwgJ3NvcnRhYmxlJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlICYmXG4gICAgICAgICAgICAgICAgICAgIChzb3J0YWJsZSA9PT0gdGhpcyB8fCAodGhpcy5ncm91cCAhPT0gZmFsc2UgJiYgc29ydGFibGUuZ3JvdXAgPT09IHRoaXMuZ3JvdXApKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc29ydGFibGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAoKGVsZW1lbnQgPSBwYXJlbnQoZWxlbWVudCkpKTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxubGV0IHRyYWNrVGltZXI7XG5mdW5jdGlvbiB0cmFja1Njcm9sbChwb3MpIHtcbiAgICBsZXQgbGFzdCA9IERhdGUubm93KCk7XG4gICAgdHJhY2tUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgbGV0IHsgeCwgeSB9ID0gcG9zO1xuICAgICAgICB5ICs9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgICAgIGNvbnN0IGRpc3QgPSAoRGF0ZS5ub3coKSAtIGxhc3QpICogMC4zO1xuICAgICAgICBsYXN0ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICBzY3JvbGxQYXJlbnRzKGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCwgcG9zLnkpKVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLnNvbWUoKHNjcm9sbEVsKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHsgc2Nyb2xsVG9wOiBzY3JvbGwsIHNjcm9sbEhlaWdodCB9ID0gc2Nyb2xsRWw7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB7IHRvcCwgYm90dG9tLCBoZWlnaHQgfSA9IG9mZnNldFZpZXdwb3J0KHNjcm9sbEVsKTtcblxuICAgICAgICAgICAgICAgIGlmICh0b3AgPCB5ICYmIHRvcCArIDM1ID4geSkge1xuICAgICAgICAgICAgICAgICAgICBzY3JvbGwgLT0gZGlzdDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvdHRvbSA+IHkgJiYgYm90dG9tIC0gMzUgPCB5KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbCArPSBkaXN0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsID4gMCAmJiBzY3JvbGwgPCBzY3JvbGxIZWlnaHQgLSBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsRWwuc2Nyb2xsVG9wID0gc2Nyb2xsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9LCAxNSk7XG59XG5cbmZ1bmN0aW9uIHVudHJhY2tTY3JvbGwoKSB7XG4gICAgY2xlYXJJbnRlcnZhbCh0cmFja1RpbWVyKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kRHJhZyhjb250YWluZXIsIGVsZW1lbnQpIHtcbiAgICBsZXQgY2xvbmU7XG4gICAgaWYgKGlzVGFnKGVsZW1lbnQsICdsaScsICd0cicpKSB7XG4gICAgICAgIGNsb25lID0gJCgnPGRpdj4nKTtcbiAgICAgICAgYXBwZW5kKGNsb25lLCBlbGVtZW50LmNsb25lTm9kZSh0cnVlKS5jaGlsZHJlbik7XG4gICAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKSkge1xuICAgICAgICAgICAgYXR0cihjbG9uZSwgYXR0cmlidXRlLCBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNsb25lID0gZWxlbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgYXBwZW5kKGNvbnRhaW5lciwgY2xvbmUpO1xuXG4gICAgY3NzKGNsb25lLCAnbWFyZ2luJywgJzAnLCAnaW1wb3J0YW50Jyk7XG4gICAgY3NzKGNsb25lLCB7XG4gICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgICAgICB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgICAgcGFkZGluZzogY3NzKGVsZW1lbnQsICdwYWRkaW5nJyksXG4gICAgfSk7XG5cbiAgICBoZWlnaHQoY2xvbmUuZmlyc3RFbGVtZW50Q2hpbGQsIGhlaWdodChlbGVtZW50LmZpcnN0RWxlbWVudENoaWxkKSk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG59XG5cbmZ1bmN0aW9uIGZpbmRUYXJnZXQoaXRlbXMsIHBvaW50KSB7XG4gICAgcmV0dXJuIGl0ZW1zW2ZpbmRJbmRleChpdGVtcywgKGl0ZW0pID0+IHBvaW50SW5SZWN0KHBvaW50LCBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSldO1xufVxuXG5mdW5jdGlvbiBmaW5kSW5zZXJ0VGFyZ2V0KGxpc3QsIHRhcmdldCwgcGxhY2Vob2xkZXIsIHgsIHksIHNhbWVMaXN0KSB7XG4gICAgaWYgKCFjaGlsZHJlbihsaXN0KS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKCFzYW1lTGlzdCkge1xuICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbChsaXN0LCBwbGFjZWhvbGRlcikpIHtcbiAgICAgICAgICAgIHJldHVybiB5IDwgcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDIgPyB0YXJnZXQgOiB0YXJnZXQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBjb25zdCBwbGFjZWhvbGRlclJlY3QgPSBwbGFjZWhvbGRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBzYW1lUm93ID0gbGluZXNJbnRlcnNlY3QoXG4gICAgICAgIFtyZWN0LnRvcCwgcmVjdC5ib3R0b21dLFxuICAgICAgICBbcGxhY2Vob2xkZXJSZWN0LnRvcCwgcGxhY2Vob2xkZXJSZWN0LmJvdHRvbV1cbiAgICApO1xuXG4gICAgY29uc3QgW3BvaW50ZXJQb3MsIGxlbmd0aFByb3AsIHN0YXJ0UHJvcCwgZW5kUHJvcF0gPSBzYW1lUm93XG4gICAgICAgID8gW3gsICd3aWR0aCcsICdsZWZ0JywgJ3JpZ2h0J11cbiAgICAgICAgOiBbeSwgJ2hlaWdodCcsICd0b3AnLCAnYm90dG9tJ107XG5cbiAgICBjb25zdCBkaWZmID1cbiAgICAgICAgcGxhY2Vob2xkZXJSZWN0W2xlbmd0aFByb3BdIDwgcmVjdFtsZW5ndGhQcm9wXVxuICAgICAgICAgICAgPyByZWN0W2xlbmd0aFByb3BdIC0gcGxhY2Vob2xkZXJSZWN0W2xlbmd0aFByb3BdXG4gICAgICAgICAgICA6IDA7XG5cbiAgICBpZiAocGxhY2Vob2xkZXJSZWN0W3N0YXJ0UHJvcF0gPCByZWN0W3N0YXJ0UHJvcF0pIHtcbiAgICAgICAgaWYgKGRpZmYgJiYgcG9pbnRlclBvcyA8IHJlY3Rbc3RhcnRQcm9wXSArIGRpZmYpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgIH1cblxuICAgIGlmIChkaWZmICYmIHBvaW50ZXJQb3MgPiByZWN0W2VuZFByb3BdIC0gZGlmZikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gaXNIb3Jpem9udGFsKGxpc3QsIHBsYWNlaG9sZGVyKSB7XG4gICAgY29uc3Qgc2luZ2xlID0gY2hpbGRyZW4obGlzdCkubGVuZ3RoID09PSAxO1xuXG4gICAgaWYgKHNpbmdsZSkge1xuICAgICAgICBhcHBlbmQobGlzdCwgcGxhY2Vob2xkZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1zID0gY2hpbGRyZW4obGlzdCk7XG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gaXRlbXMuc29tZSgoZWwsIGkpID0+IHtcbiAgICAgICAgY29uc3QgcmVjdEEgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLnNsaWNlKGkgKyAxKS5zb21lKChlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVjdEIgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHJldHVybiAhbGluZXNJbnRlcnNlY3QoW3JlY3RBLmxlZnQsIHJlY3RBLnJpZ2h0XSwgW3JlY3RCLmxlZnQsIHJlY3RCLnJpZ2h0XSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKHNpbmdsZSkge1xuICAgICAgICByZW1vdmUocGxhY2Vob2xkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBpc0hvcml6b250YWw7XG59XG5cbmZ1bmN0aW9uIGxpbmVzSW50ZXJzZWN0KGxpbmVBLCBsaW5lQikge1xuICAgIHJldHVybiBsaW5lQVsxXSA+IGxpbmVCWzBdICYmIGxpbmVCWzFdID4gbGluZUFbMF07XG59XG4iLCJpbXBvcnQgQ29udGFpbmVyIGZyb20gJy4uL21peGluL2NvbnRhaW5lcic7XG5pbXBvcnQgVG9nZ2xhYmxlIGZyb20gJy4uL21peGluL3RvZ2dsYWJsZSc7XG5pbXBvcnQgUG9zaXRpb24gZnJvbSAnLi4vbWl4aW4vcG9zaXRpb24nO1xuaW1wb3J0IHtcbiAgICBhcHBlbmQsXG4gICAgYXR0cixcbiAgICBmbGlwUG9zaXRpb24sXG4gICAgaGFzQXR0cixcbiAgICBpbmNsdWRlcyxcbiAgICBpc0ZvY3VzYWJsZSxcbiAgICBpc1RvdWNoLFxuICAgIG1hdGNoZXMsXG4gICAgb2Zmc2V0LFxuICAgIG9uLFxuICAgIG9uY2UsXG4gICAgb3ZlcmZsb3dQYXJlbnRzLFxuICAgIHBvaW50ZXJEb3duLFxuICAgIHBvaW50ZXJFbnRlcixcbiAgICBwb2ludGVyTGVhdmUsXG4gICAgcmVtb3ZlLFxuICAgIHdpdGhpbixcbn0gZnJvbSAndWlraXQtdXRpbCc7XG5pbXBvcnQgeyBrZXlNYXAgfSBmcm9tICcuLi91dGlsL2tleXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVJZCB9IGZyb20gJy4uL2FwaS9pbnN0YW5jZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBtaXhpbnM6IFtDb250YWluZXIsIFRvZ2dsYWJsZSwgUG9zaXRpb25dLFxuXG4gICAgYXJnczogJ3RpdGxlJyxcblxuICAgIHByb3BzOiB7XG4gICAgICAgIGRlbGF5OiBOdW1iZXIsXG4gICAgICAgIHRpdGxlOiBTdHJpbmcsXG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgcG9zOiAndG9wJyxcbiAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICBkZWxheTogMCxcbiAgICAgICAgYW5pbWF0aW9uOiBbJ3VrLWFuaW1hdGlvbi1zY2FsZS11cCddLFxuICAgICAgICBkdXJhdGlvbjogMTAwLFxuICAgICAgICBjbHM6ICd1ay1hY3RpdmUnLFxuICAgIH0sXG5cbiAgICBiZWZvcmVDb25uZWN0KCkge1xuICAgICAgICB0aGlzLmlkID0gZ2VuZXJhdGVJZCh0aGlzKTtcbiAgICAgICAgdGhpcy5faGFzVGl0bGUgPSBoYXNBdHRyKHRoaXMuJGVsLCAndGl0bGUnKTtcbiAgICAgICAgYXR0cih0aGlzLiRlbCwge1xuICAgICAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiB0aGlzLmlkLFxuICAgICAgICB9KTtcbiAgICAgICAgbWFrZUZvY3VzYWJsZSh0aGlzLiRlbCk7XG4gICAgfSxcblxuICAgIGRpc2Nvbm5lY3RlZCgpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG5cbiAgICAgICAgaWYgKCFhdHRyKHRoaXMuJGVsLCAndGl0bGUnKSkge1xuICAgICAgICAgICAgYXR0cih0aGlzLiRlbCwgJ3RpdGxlJywgdGhpcy5faGFzVGl0bGUgPyB0aGlzLnRpdGxlIDogbnVsbCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgICBzaG93KCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNUb2dnbGVkKHRoaXMudG9vbHRpcCB8fCBudWxsKSB8fCAhdGhpcy50aXRsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2hvd1RpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1RpbWVyID0gc2V0VGltZW91dCh0aGlzLl9zaG93LCB0aGlzLmRlbGF5KTtcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBoaWRlKCkge1xuICAgICAgICAgICAgaWYgKG1hdGNoZXModGhpcy4kZWwsICdpbnB1dDpmb2N1cycpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zaG93VGltZXIpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNUb2dnbGVkKHRoaXMudG9vbHRpcCB8fCBudWxsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXdhaXQgdGhpcy50b2dnbGVFbGVtZW50KHRoaXMudG9vbHRpcCwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgIHJlbW92ZSh0aGlzLnRvb2x0aXApO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICBfc2hvdygpIHtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IGFwcGVuZChcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICBgPGRpdiBpZD1cIiR7dGhpcy5pZH1cIiBjbGFzcz1cInVrLSR7dGhpcy4kb3B0aW9ucy5uYW1lfVwiIHJvbGU9XCJ0b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1ay0ke3RoaXMuJG9wdGlvbnMubmFtZX0taW5uZXJcIj4ke3RoaXMudGl0bGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIG9uKHRoaXMudG9vbHRpcCwgJ3RvZ2dsZWQnLCAoZSwgdG9nZ2xlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdG9nZ2xlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlID0gKCkgPT4gdGhpcy5wb3NpdGlvbkF0KHRoaXMudG9vbHRpcCwgdGhpcy4kZWwpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZSgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgW2RpciwgYWxpZ25dID0gZ2V0QWxpZ25tZW50KHRoaXMudG9vbHRpcCwgdGhpcy4kZWwsIHRoaXMucG9zKTtcblxuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5heGlzID09PSAneSdcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7ZmxpcFBvc2l0aW9uKGRpcil9LSR7YWxpZ259YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgJHthbGlnbn0tJHtmbGlwUG9zaXRpb24oZGlyKX1gO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBbXG4gICAgICAgICAgICAgICAgICAgIG9uY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBrZXlkb3duICR7cG9pbnRlckRvd259YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUudHlwZSA9PT0gcG9pbnRlckRvd24gJiYgIXdpdGhpbihlLnRhcmdldCwgdGhpcy4kZWwpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleUNvZGUgPT09IGtleU1hcC5FU0MpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIG9uKFtkb2N1bWVudCwgLi4ub3ZlcmZsb3dQYXJlbnRzKHRoaXMuJGVsKV0sICdzY3JvbGwnLCB1cGRhdGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgb25jZSh0aGlzLnRvb2x0aXAsICdoaWRlJywgKCkgPT4gaGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlcigpKSwge1xuICAgICAgICAgICAgICAgICAgICBzZWxmOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLnRvb2x0aXAsIHRydWUpO1xuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBldmVudHM6IHtcbiAgICAgICAgZm9jdXM6ICdzaG93JyxcbiAgICAgICAgYmx1cjogJ2hpZGUnLFxuXG4gICAgICAgIFtgJHtwb2ludGVyRW50ZXJ9ICR7cG9pbnRlckxlYXZlfWBdKGUpIHtcbiAgICAgICAgICAgIGlmICghaXNUb3VjaChlKSkge1xuICAgICAgICAgICAgICAgIHRoaXNbZS50eXBlID09PSBwb2ludGVyRW50ZXIgPyAnc2hvdycgOiAnaGlkZSddKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gQ2xpY2tpbmcgYSBidXR0b24gZG9lcyBub3QgZ2l2ZSBpdCBmb2N1cyBvbiBhbGwgYnJvd3NlcnMgYW5kIHBsYXRmb3Jtc1xuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uI2NsaWNraW5nX2FuZF9mb2N1c1xuICAgICAgICBbcG9pbnRlckRvd25dKGUpIHtcbiAgICAgICAgICAgIGlmIChpc1RvdWNoKGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5cbmZ1bmN0aW9uIG1ha2VGb2N1c2FibGUoZWwpIHtcbiAgICBpZiAoIWlzRm9jdXNhYmxlKGVsKSkge1xuICAgICAgICBhdHRyKGVsLCAndGFiaW5kZXgnLCAnMCcpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KGVsLCB0YXJnZXQsIFtkaXIsIGFsaWduXSkge1xuICAgIGNvbnN0IGVsT2Zmc2V0ID0gb2Zmc2V0KGVsKTtcbiAgICBjb25zdCB0YXJnZXRPZmZzZXQgPSBvZmZzZXQodGFyZ2V0KTtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gW1xuICAgICAgICBbJ2xlZnQnLCAncmlnaHQnXSxcbiAgICAgICAgWyd0b3AnLCAnYm90dG9tJ10sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgcHJvcHMgb2YgcHJvcGVydGllcykge1xuICAgICAgICBpZiAoZWxPZmZzZXRbcHJvcHNbMF1dID49IHRhcmdldE9mZnNldFtwcm9wc1sxXV0pIHtcbiAgICAgICAgICAgIGRpciA9IHByb3BzWzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsT2Zmc2V0W3Byb3BzWzFdXSA8PSB0YXJnZXRPZmZzZXRbcHJvcHNbMF1dKSB7XG4gICAgICAgICAgICBkaXIgPSBwcm9wc1swXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcHMgPSBpbmNsdWRlcyhwcm9wZXJ0aWVzWzBdLCBkaXIpID8gcHJvcGVydGllc1sxXSA6IHByb3BlcnRpZXNbMF07XG4gICAgaWYgKGVsT2Zmc2V0W3Byb3BzWzBdXSA9PT0gdGFyZ2V0T2Zmc2V0W3Byb3BzWzBdXSkge1xuICAgICAgICBhbGlnbiA9IHByb3BzWzBdO1xuICAgIH0gZWxzZSBpZiAoZWxPZmZzZXRbcHJvcHNbMV1dID09PSB0YXJnZXRPZmZzZXRbcHJvcHNbMV1dKSB7XG4gICAgICAgIGFsaWduID0gcHJvcHNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICB9XG5cbiAgICByZXR1cm4gW2RpciwgYWxpZ25dO1xufVxuIiwiaW1wb3J0IEkxOG4gZnJvbSAnLi4vbWl4aW4vaTE4bic7XG5pbXBvcnQgeyBhZGRDbGFzcywgYXNzaWduLCBtYXRjaGVzLCBub29wLCBvbiwgcmVtb3ZlQ2xhc3MsIHRvQXJyYXksIHRyaWdnZXIgfSBmcm9tICd1aWtpdC11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG1peGluczogW0kxOG5dLFxuXG4gICAgaTE4bjoge1xuICAgICAgICBpbnZhbGlkTWltZTogJ0ludmFsaWQgRmlsZSBUeXBlOiAlcycsXG4gICAgICAgIGludmFsaWROYW1lOiAnSW52YWxpZCBGaWxlIE5hbWU6ICVzJyxcbiAgICAgICAgaW52YWxpZFNpemU6ICdJbnZhbGlkIEZpbGUgU2l6ZTogJXMgS2lsb2J5dGVzIE1heCcsXG4gICAgfSxcblxuICAgIHByb3BzOiB7XG4gICAgICAgIGFsbG93OiBTdHJpbmcsXG4gICAgICAgIGNsc0RyYWdvdmVyOiBTdHJpbmcsXG4gICAgICAgIGNvbmN1cnJlbnQ6IE51bWJlcixcbiAgICAgICAgbWF4U2l6ZTogTnVtYmVyLFxuICAgICAgICBtZXRob2Q6IFN0cmluZyxcbiAgICAgICAgbWltZTogU3RyaW5nLFxuICAgICAgICBtdWx0aXBsZTogQm9vbGVhbixcbiAgICAgICAgbmFtZTogU3RyaW5nLFxuICAgICAgICBwYXJhbXM6IE9iamVjdCxcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICB1cmw6IFN0cmluZyxcbiAgICB9LFxuXG4gICAgZGF0YToge1xuICAgICAgICBhbGxvdzogZmFsc2UsXG4gICAgICAgIGNsc0RyYWdvdmVyOiAndWstZHJhZ292ZXInLFxuICAgICAgICBjb25jdXJyZW50OiAxLFxuICAgICAgICBtYXhTaXplOiAwLFxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgbWltZTogZmFsc2UsXG4gICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgbmFtZTogJ2ZpbGVzW10nLFxuICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICB0eXBlOiAnJyxcbiAgICAgICAgdXJsOiAnJyxcbiAgICAgICAgYWJvcnQ6IG5vb3AsXG4gICAgICAgIGJlZm9yZUFsbDogbm9vcCxcbiAgICAgICAgYmVmb3JlU2VuZDogbm9vcCxcbiAgICAgICAgY29tcGxldGU6IG5vb3AsXG4gICAgICAgIGNvbXBsZXRlQWxsOiBub29wLFxuICAgICAgICBlcnJvcjogbm9vcCxcbiAgICAgICAgZmFpbDogbm9vcCxcbiAgICAgICAgbG9hZDogbm9vcCxcbiAgICAgICAgbG9hZEVuZDogbm9vcCxcbiAgICAgICAgbG9hZFN0YXJ0OiBub29wLFxuICAgICAgICBwcm9ncmVzczogbm9vcCxcbiAgICB9LFxuXG4gICAgZXZlbnRzOiB7XG4gICAgICAgIGNoYW5nZShlKSB7XG4gICAgICAgICAgICBpZiAoIW1hdGNoZXMoZS50YXJnZXQsICdpbnB1dFt0eXBlPVwiZmlsZVwiXScpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGlmIChlLnRhcmdldC5maWxlcykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkKGUudGFyZ2V0LmZpbGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSAnJztcbiAgICAgICAgfSxcblxuICAgICAgICBkcm9wKGUpIHtcbiAgICAgICAgICAgIHN0b3AoZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7XG5cbiAgICAgICAgICAgIGlmICghdHJhbnNmZXI/LmZpbGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLiRlbCwgdGhpcy5jbHNEcmFnb3Zlcik7XG5cbiAgICAgICAgICAgIHRoaXMudXBsb2FkKHRyYW5zZmVyLmZpbGVzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBkcmFnZW50ZXIoZSkge1xuICAgICAgICAgICAgc3RvcChlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBkcmFnb3ZlcihlKSB7XG4gICAgICAgICAgICBzdG9wKGUpO1xuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzRHJhZ292ZXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGRyYWdsZWF2ZShlKSB7XG4gICAgICAgICAgICBzdG9wKGUpO1xuICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzRHJhZ292ZXIpO1xuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGFzeW5jIHVwbG9hZChmaWxlcykge1xuICAgICAgICAgICAgZmlsZXMgPSB0b0FycmF5KGZpbGVzKTtcblxuICAgICAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICd1cGxvYWQnLCBbZmlsZXNdKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSAmJiB0aGlzLm1heFNpemUgKiAxMDAwIDwgZmlsZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFpbCh0aGlzLnQoJ2ludmFsaWRTaXplJywgdGhpcy5tYXhTaXplKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hbGxvdyAmJiAhbWF0Y2godGhpcy5hbGxvdywgZmlsZS5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWwodGhpcy50KCdpbnZhbGlkTmFtZScsIHRoaXMuYWxsb3cpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pbWUgJiYgIW1hdGNoKHRoaXMubWltZSwgZmlsZS50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWwodGhpcy50KCdpbnZhbGlkTWltZScsIHRoaXMubWltZSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICBmaWxlcyA9IGZpbGVzLnNsaWNlKDAsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmJlZm9yZUFsbCh0aGlzLCBmaWxlcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNodW5rcyA9IGNodW5rKGZpbGVzLCB0aGlzLmNvbmN1cnJlbnQpO1xuICAgICAgICAgICAgY29uc3QgdXBsb2FkID0gYXN5bmMgKGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgICAgICAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4gZGF0YS5hcHBlbmQodGhpcy5uYW1lLCBmaWxlKSk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChrZXksIHRoaXMucGFyYW1zW2tleV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IGF3YWl0IGFqYXgodGhpcy51cmwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiAoZW52KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB4aHIgfSA9IGVudjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbih4aHIudXBsb2FkLCAncHJvZ3Jlc3MnLCB0aGlzLnByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgWydsb2FkU3RhcnQnLCAnbG9hZCcsICdsb2FkRW5kJywgJ2Fib3J0J10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24oeGhyLCB0eXBlLnRvTG93ZXJDYXNlKCksIHRoaXNbdHlwZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZVNlbmQoZW52KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGUoeGhyKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2h1bmtzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdXBsb2FkKGNodW5rcy5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVBbGwoeGhyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBhd2FpdCB1cGxvYWQoY2h1bmtzLnNoaWZ0KCkpO1xuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG5mdW5jdGlvbiBtYXRjaChwYXR0ZXJuLCBwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGgubWF0Y2goXG4gICAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgICAgICBgXiR7cGF0dGVyblxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXC8vZywgJ1xcXFwvJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwqXFwqL2csICcoXFxcXC9bXlxcXFwvXSspKicpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcKi9nLCAnW15cXFxcL10rJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKCg/IVxcXFwpKVxcPy9nLCAnJDEuJyl9JGAsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGNodW5rKGZpbGVzLCBzaXplKSB7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkgKz0gc2l6ZSkge1xuICAgICAgICBjaHVua3MucHVzaChmaWxlcy5zbGljZShpLCBpICsgc2l6ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gY2h1bmtzO1xufVxuXG5mdW5jdGlvbiBzdG9wKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFqYXgodXJsLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgeGhyOiBuZXcgWE1MSHR0cFJlcXVlc3QoKSxcbiAgICAgICAgYmVmb3JlU2VuZDogbm9vcCxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnJyxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbigoKSA9PiBlbnYuYmVmb3JlU2VuZChlbnYpKVxuICAgICAgICAudGhlbigoKSA9PiBzZW5kKHVybCwgZW52KSk7XG59XG5cbmZ1bmN0aW9uIHNlbmQodXJsLCBlbnYpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB7IHhociB9ID0gZW52O1xuXG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBlbnYpIHtcbiAgICAgICAgICAgIGlmIChwcm9wIGluIHhocikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHhocltwcm9wXSA9IGVudltwcm9wXTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB4aHIub3BlbihlbnYubWV0aG9kLnRvVXBwZXJDYXNlKCksIHVybCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgaW4gZW52LmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgZW52LmhlYWRlcnNbaGVhZGVyXSk7XG4gICAgICAgIH1cblxuICAgICAgICBvbih4aHIsICdsb2FkJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDAgfHwgKHhoci5zdGF0dXMgPj0gMjAwICYmIHhoci5zdGF0dXMgPCAzMDApIHx8IHhoci5zdGF0dXMgPT09IDMwNCkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoeGhyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgICAgICBhc3NpZ24oRXJyb3IoeGhyLnN0YXR1c1RleHQpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgb24oeGhyLCAnZXJyb3InLCAoKSA9PiByZWplY3QoYXNzaWduKEVycm9yKCdOZXR3b3JrIEVycm9yJyksIHsgeGhyIH0pKSk7XG4gICAgICAgIG9uKHhociwgJ3RpbWVvdXQnLCAoKSA9PiByZWplY3QoYXNzaWduKEVycm9yKCdOZXR3b3JrIFRpbWVvdXQnKSwgeyB4aHIgfSkpKTtcblxuICAgICAgICB4aHIuc2VuZChlbnYuZGF0YSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgVUlraXQgZnJvbSAnLi91aWtpdC1jb3JlJztcbmltcG9ydCAqIGFzIGNvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzL2luZGV4JztcbmltcG9ydCB7IGVhY2ggfSBmcm9tICd1aWtpdC11dGlsJztcblxuZWFjaChjb21wb25lbnRzLCAoY29tcG9uZW50LCBuYW1lKSA9PiBVSWtpdC5jb21wb25lbnQobmFtZSwgY29tcG9uZW50KSk7XG5cbmV4cG9ydCBkZWZhdWx0IFVJa2l0O1xuIl0sIm5hbWVzIjpbInNvcnRCeSIsImNvdmVyIiwiZWxlbWVudCIsImZpbHRlciIsImNoaWxkcmVuIiwic2VsZWN0b3IiLCJvZmYiLCJkZXRhaWwiLCJ2YWx1ZSIsInByb3BlcnR5IiwiYXBwbHkiLCJjbHMiLCJhcmdzIiwidHJhbnNpdGlvbiIsImFuaW1hdGUiLCJwYXJlbnQiLCJodG1sIiwicmVtb3ZlIiwiZGlycyIsImRpbWVuc2lvbnMiLCJvZmZzZXQiLCJwcm9wIiwidW5pdFJlIiwicG9pbnRlckRvd24iLCJwb2ludGVyTW92ZSIsInBvaW50ZXJVcCIsIm9ic2VydmVyIiwib2JzZXJ2ZSIsInBhcmVudHMiLCJnZXRWaWV3cG9ydCIsImluc3RhbmNlcyIsImVsIiwidm0iLCJvcHRpb25zIiwiY29lcmNlIiwiZ2V0UHJvcHMiLCJkYXRhIiwiZ2V0RGF0YSIsImluaXQiLCJjb21wb25lbnRzIiwiY29tcG9uZW50Iiwic2Nyb2xsIiwiZSIsImluZGV4IiwiaGlkZSIsImFjdGl2ZSIsImxpc3RlbkZvckVzY0Nsb3NlIiwibGlzdGVuRm9yQmFja2dyb3VuZENsb3NlIiwibWF0Y2giLCJpbnN0YWxsIiwic3ZnIiwibmFtZSIsImdldE9mZnNldCIsImhlaWdodCIsImdldEhlaWdodCIsIlVJa2l0IiwiYXdhaXRGcmFtZSIsImdldENoaWxkcmVuIiwiYXR0ciIsIkFuaW1hdGlvbnMiLCJUcmFuc2l0aW9uZXIiLCJwZXJjZW50IiwidHJpZ2dlclVwZGF0ZSIsInByb3BzIiwiY3NzIiwidHJhbnNmb3JtRm4iLCJrZXlzIiwic2xpZGUiLCJzb3J0YWJsZSIsImlzSG9yaXpvbnRhbCIsImZpbGVzIiwieGhyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztJQUFBLE1BQU0sRUFBRSxjQUFBLEVBQWdCLFFBQVMsRUFBQSxHQUFJLE1BQU8sQ0FBQSxTQUFBLENBQUE7SUFFNUIsU0FBQSxNQUFBLENBQU8sS0FBSyxHQUFLLEVBQUE7SUFDN0IsRUFBTyxPQUFBLGNBQUEsQ0FBZSxJQUFLLENBQUEsR0FBQSxFQUFLLEdBQUcsQ0FBQSxDQUFBO0lBQ3ZDLENBQUE7SUFFQSxNQUFNLFdBQWMsR0FBQSxZQUFBLENBQUE7SUFFUCxNQUFBLFNBQUEsR0FBWSxPQUFRLENBQUEsQ0FBQyxHQUFRLEtBQUEsR0FBQSxDQUFJLFFBQVEsV0FBYSxFQUFBLEtBQUssQ0FBRSxDQUFBLFdBQUEsRUFBYSxDQUFBLENBQUE7SUFFdkYsTUFBTSxVQUFhLEdBQUEsUUFBQSxDQUFBO0lBRVosTUFBTSxRQUFXLEdBQUEsT0FBQTtJQUFBLEVBQVEsQ0FBQyxHQUM1QixLQUFBLENBQUEsR0FBQSxDQUFJLE9BQU8sQ0FBQyxDQUFBLENBQUUsYUFBZ0IsR0FBQSxHQUFBLENBQUksTUFBTSxDQUFDLENBQUEsRUFBRyxRQUFRLFVBQVksRUFBQSxDQUFDLEdBQUcsQ0FBTSxLQUFBLENBQUEsQ0FBRSxhQUFhLENBQUE7SUFDOUYsQ0FBQSxDQUFBO0lBRU8sTUFBTSxPQUFVLEdBQUEsT0FBQSxDQUFRLENBQUMsR0FBQSxLQUFRLEdBQUks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\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import UIkit from 'uikit';\r\nimport Icons from 'uikit/dist/js/uikit-icons';\r\n\r\n//do not remove !!!\r\nimport styles from '../sass/main.scss';\r\n\r\nwindow.UIkit = UIkit;\r\n\r\nUIkit.use(Icons);\r\n\r\n\r\nUIkit.icon.add({\r\n 'user': ''\r\n})\r\n"],"names":["module","exports","plugin","UIkit","installed","icon","add","window","use","factory","hasOwnProperty","toString","Object","prototype","hasOwn","obj","key","call","hyphenateRe","hyphenate","memoize","str","replace","toLowerCase","camelizeRe","camelize","charAt","slice","_","c","toUpperCase","ucfirst","startsWith","search","_a","endsWith","includes","findIndex","array","predicate","isArray","from","toArray","Array","assign","isFunction","isObject","isPlainObject","isWindow","isDocument","nodeType","isNode","isElement","isBoolean","value","isString","isNumber","isNumeric","isNaN","parseFloat","isEmpty","length","keys","isUndefined","toBoolean","toNumber","number","Number","toFloat","toNode","element","toNodes","filter","toWindow","document","ownerDocument","defaultView","isEqual","other","each","val","swap","a","b","RegExp","match","last","cb","sortBy$1","prop","sort","propA","propB","sumBy","iteratee","reduce","sum","item","uniqueBy","seen","Set","check","has","pick","props","res","clamp","min","max","Math","noop","intersectRect","rects","every","minProp","maxProp","map","pointInRect","point","rect","x","right","left","y","bottom","top","ratio","dimensions","aProp","round","contain","maxDimensions","cover$1","Dimensions","cover","getIndex","i","elements","current","finite","indexOf","fn","cache","create","Deferred","constructor","this","promise","Promise","resolve","reject","attr","name","getAttribute","el","removeAttr","setAttribute","hasAttr","some","element2","hasAttribute","forEach","removeAttribute","data","attribute","voidElements","area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr","isVoidElement","tagName","isVisible","offsetWidth","offsetHeight","getClientRects","selInput","isInput","matches","selFocusable","isFocusable","parent","parentElement","filter$1","selector","closest","Boolean","within","contains","parents","push","children","children2","index","ref","isSameSiteAnchor","part","location","getTargetedElement","id","decodeURIComponent","hash","substring","getElementById","getElementsByName","query","context","find","getContext","queryAll","findAll","_query","contextSelectorRe","isContextSelector","contextSanitizeRe","sanatize","queryFn","split","splitSelector","sel","ctx","selectors","substr","trim","join","prev","previousElementSibling","domPath","e","selectorRe","selector2","names","parentNode","unshift","escape","css","CSS","on","args","targets","types","listener","useCapture","getArgs","detail","self","selfFilter","delegate","type","target","addEventListener","off","removeEventListener","once","condition","off2","result","trigger","event","detail2","toEventTargets","dispatchEvent","createEvent","bubbles","cancelable","CustomEvent","splice","currentTarget","reverse","isEventTarget","toEventTarget","isTouch","pointerType","touches","getEventPos","_b","clientX","clientY","changedTouches","cssNumber","opacity","order","orphans","widows","zoom","property","priority","propName","getComputedStyle","getPropertyValue","style","setProperty","value2","property2","vendorPropName","documentElement","prefix","prefixedName","addClass","apply$1","removeClass","removeClasses","cls","replaceClass","hasClass","getClasses","node","classList","toggleClass","force","classes","cls2","toggle","args2","arg","concat","String","transition$1","duration","timing","all","timer","setTimeout","clearTimeout","transitionProperty","transitionDuration","transitionTimingFunction","Transition","start","async","inProgress","animationPrefix","animate$2","animation","origin","out","inProgressRe","Animation","in","test","cancel","ready","readyState","isTag","tagNames","empty","$","innerHTML","html","parent2","html2","append","prepend","applyFn","before","after","nodes","fragment","unwrapSingle","remove$1","remove","wrapAll","structure","firstChild","wrapInner","hasChildNodes","childNodes","unwrap","replaceWith","fragmentRe","singleTagRe","exec","createElement","container","insertAdjacentHTML","textContent","apply","firstElementChild","next","nextElementSibling","isHtml","$$","dirs$1","width","height","dimensions$1","getBoundingClientRect","offset","coordinates","currentOffset","scrollY","scrollX","offsetBy","dir","pos","position","body","offsetParent","parentOffset","offsetPosition","offset2","offsetTop","offsetLeft","win","dimension","doc","boxModelAdjust","sizing","prop2","flipPosition","toPx","offsetDim","parseCalc","unit","parseUnit","percent","getViewportHeight","calcRe","calc","unitRe$1","vh","vhEl","clientHeight","inBrowser","isRtl","hasTouch","hasPointerEvents","PointerEvent","pointerDown$1","pointerMove$1","pointerUp$1","pointerEnter","pointerLeave","pointerCancel","fastdom","reads","writes","read","task","scheduleFlush","write","clear","flush","recursion","runTasks","scheduled","RECURSION_LIMIT","then","requestAnimationFrame","tasks","shift","console","error","MouseTracker","intersect","x1","y1","x2","y2","x3","y3","x4","y4","denominator","ua","observeIntersection","options","intersecting","observer","IntersectionObserver","entries","observer2","entry","isIntersecting","observe","positions","init","unbind","interval","setInterval","clearInterval","movesTo","p","prevPosition","path","diagonal","intersection","hasResizeObserver","ResizeObserver","observeResize","box","observe$1","initResizeListener","listeners","unobserve","disconnect","delete","pendingResize","handleResize","observeMutation","MutationObserver","Observer","play","isIFrame","func","method","isHTML5","catch","pause","mute","muted","isVideo","isYoutube","isVimeo","src","cmd","enableApi","post","contentWindow","postMessage","JSON","stringify","stateKey","counter","youtube","vimeo","poller","parse","player_id","isInView","overflowParents","offsetViewport","scrollIntoView","parents2","scrollParents","scrollElement","scrollTop","scrollHeight","viewport","maxScroll","elHeight","elTop","ceil","scrollTo","scroll","getDuration","abs","Date","now","step","ease","dist","pow","k","cos","PI","scrolledOver","startOffset","endOffset","viewportHeight","elementOffsetTop","scrollable","scrollEl","scrollingElement","ancestors","fixedIndex","visualViewport","viewportElement","scale","pageTop","pageLeft","end","dirs","positionAt","attach","placement","getPosition","attachTo","boundary","viewportOffset","getViewport$2","isWithin","flip","scrollArea","getScrollArea","applyOffset","newPos","flipAxis","targetDim","elOffset","targetOffset","moveBy","dim","getIntersectionArea","commonScrollParents","axis","positionA","positionB","flipAttach","flipOffset","flipAttachAxis","newAttach","util","freeze","__proto__","pointerDown","pointerMove","pointerUp","sortBy","initWatches","instance","_watches","watches","$options","watch","registerWatch","_initial","handler","runWatches","values","immediate","initUpdates","_data","_updates","update","prependUpdate","clearUpdateData","callUpdate","_connected","_queued","runUpdates","events","initComputed","computed","_computed","registerComputed","_hasComputed","defineProperty","enumerable","get","$props","$el","set","initComputedUpdates","resetComputed","registerComputedObserver","instances$1","disconnectComputedUpdates","childList","subtree","initEvents","_events","registerEvent","unbindEvents","capture","passive","el2","bind","initObservers","_observers","registerObservable","observable","registerObserver","disconnectObservers","updateTargets","strats","mergeFnData","parentVal","childVal","vm","concatStrat","defaultStrat","mergeOptions","child","extends","mixins","mixin","mergeKey","parseOptions","options2","option","coerce$1","toList","initProps","getProps$1","exclude","methods","notIn","opts","data$1","arr","initPropsObserver","attributes","records","attributeName","$reset","attributeFilter","callHook","hook","callConnected","callDisconnected","created","beforeConnect","connected","beforeDisconnect","disconnected","destroy","i18n","vm2","uid","init$1","normalizeData","_uid","initData","initMethods","$mount","data2","App","version","PREFIX","DATA","components$2","component","extend","createComponent","opt","install","_initialized","functional","Component","getComponent","$destroy","getComponents","attachToElement","detachFromElement","globalApi","component2","Super","Sub","super","parentEl","updateElement","components","instanceApi","removeEl","$create","$emit","$update","$getComponent","defineProperties","$container","getOwnPropertyDescriptor","generateId","postfix","boot","connect","applyChildListMutation","applyAttributeMutation","addedNodes","removedNodes","getComponentName","components2","getAttributeNames","cmp","Class","Togglable","velocity","transition","clsEnter","clsLeave","hasAnimation","hasTransition","toggleElement","animate","show","isToggled","toggleTransition","toggleAnimation","toggleInstant","done","_toggle","toggled","changed","hidden","focus","blur","mode","startProp","dimProp","marginProp","marginStartProp","currentDim","prevProps","fromEntries","currentMargin","marginStart","endDim","wrapper","boxSizing","padding","border","minWidth","minHeight","overflow","endProps","keyMap","TAB","ESC","SPACE","END","HOME","LEFT","UP","RIGHT","DOWN","resize","mutation","lazyload","preload","scroll$1","swipe","e2","swipeDirection","observe2","emit","Accordion","active","collapsible","multiple","content","clsOpen","items","toggles","contents","_wrapper","isOpen","hide","keyCode","preventDefault","_off","keepScrollPosition","activeItems","index2","role","hide2","transition2","currentHeight","endHeight","scrollParent","frame","cancelAnimationFrame","alert","close","selClose","animate$1","marginTop","marginBottom","paddingTop","paddingBottom","borderTop","borderBottom","Video","automute","autoplay","inView","allow","visible","getPositionedParent","intrinsic","naturalWidth","videoWidth","clientWidth","naturalHeight","videoHeight","coverHeight","coverWidth","coverDim","Position","inset","align","getPositionOffset","getShiftOffset","restoreScrollPosition","storeScrollPosition","elDim","getViewportOffset","Container","prevented","active$1","preventBackgroundScroll","targetTouches","overflowY","supports","touchAction","paddingRight","drop","boundaryX","boundaryY","targetX","targetY","stretch","delayShow","delayHide","autoUpdate","clsDrop","animateOut","bgScroll","targetEl","tracker","createToggleComponent","_style","isActive","defaultPrevented","clearTimers","relatedTarget","handlers","listenForResize","listenForEscClose$1","listenForBackgroundClose$1","listenForScroll","delay","isDelaying","showTimer","getPositionedElements","hideTimer","viewports","getViewport$1","maxWidth","positionOffset","newTarget","Dropnav","dropbar","dropbarAnchor","clsDropbar","selNavItem","_dropbar","dropContainer","dropdowns","getDropdown","active2","getActive","focusFirstFocusableElement","click","handleNavItemNavigation","isDropbarDrop","adjustHeight","targetOffsets","minTop","maxBottom","dropbarOffset","transitionTo","_observer","newHeight","oldHeight","clipPath","finally","_c","formCustom","state","files","selected","Margin","margin","firstColumn","rows","getRows","columns","getColumns","row","column","sorted","j","endProp","getOffset","startDim","grid","masonry","parallax","clsStack","positionedAbsolute","translates","columnHeights","getMarginTop","getTranslates","newPadding","hgt","scrolled","rowHeights","heightMatch","match$1","heights","getHeight","toFixed","heightViewport","expand","offsetBottom","isScrollingElement","Svg","svg","getSvg","insertSVG","svgEl","applyWidthAndHeight","root","equals","lastElementChild","viewBox","I18n","t","params","icons","spinner","totop","marker","Icon","install$3","isIcon","getIcon","IconComponent","NavParentIcon","Search","Spinner","ButtonComponent","button","label","Slidenav","NavbarToggleIcon","Close","Marker","Totop","PaginationNext","PaginationPrevious","parsed","added","svg2","name2","applyRtl","cloneNode","nativeLazyLoad","HTMLImageElement","dataSrc","sources","loading","isImg","setSrcAttrs","ensureSrcAttribute","load","onload","rootMargin","image","getImageFromElement","currentSrc","setSourceProps","backgroundImage","srcProps","sourceEl","Image","wrapInPicture","parseSources","picture","attrs","Media","media","toMedia","matchMedia","mediaObj","offMediaObj","leader","fill","clsWrapper","clsHide","attrFill","trunc","Modal","selPanel","escClose","bgClose","stack","overlay","panel","transitionElement","modal","preventBackgroundFocus","listenForBackgroundClose","listenForEscClose","clsPage","_reject","toMs","time","install$2","openDialog","tmpl","hideFn","submitFn","dialog","deferred","resolved","message","ok","confirm","prompt","nav","navbar","justify","offcanvas","swiping","clsContainer","clsFlip","clsContainerAnimation","clsSidebarAnimation","clsMode","clsOverlay","suppressUserScale","resumeUserScale","getViewport","head","overflowAuto","selContainer","selContent","maxHeight","responsive","registerClick","unregisterClick","instances","size","clickHandler","href","history","pushState","scrollspy","repeat","inViewClass","elementData","Map","inview","queued","removeAnimationClasses","scrollspyNav","links","sticky","overflowFlip","clsActive","clsInactive","clsFixed","clsBelow","selTarget","showOnUp","coerce","placeholder","isFixed","setActive","reset","height$1","inactive","preventTransition","dynamicViewport","maxScrollHeight","referenceElement","offset$1","topOffset","parseProp","prevScroll","prevDir","overflowScroll","scroll2","offsetParentTop","isScrollUpdate","initTimestamp","initScroll","propOffset","refElement","getMaxPathLength","stroke","getTotalLength","strokeAnimation","applyAttributes","applyAnimation","complete","parseSVG","loadSVG","fetch","text","parseSymbols","symbolRe","symbols","lastIndex","selDisabled","Switcher","itemNav","followFocus","attrItem","selVertical","connects","connectChildren","flat","isVertical","tabindex","tab","KEY_SPACE","_preventClick","_showState","disabled","expanded","leaving","isLeaving","Alert","Cover","Drop","DropParentIcon","Dropdown","FormCustom","Grid","HeightMatch","HeightViewport","Img","Leader","Nav","Navbar","NavbarParentIcon","Offcanvas","OverflowAuto","OverlayIcon","Responsive","Scroll","Scrollspy","ScrollspyNav","SearchIcon","SlidenavNext","SlidenavPrevious","Sticky","Tab","Toggle","units","countdown","date","stop","timespan","getTimeSpan","total","digits","digit","seconds","minutes","hours","days","fade","action","stagger","transitionIndex","propsIn","propsOut","wrapIndexFn","leaveFn","getTransitionNodes","enterFn","awaitFrame$1","transitionNodes","transitions","awaitTimeout","alignContent","dataset","waitTransitionend","timeout","slide","awaitFrame","currentProps","getProps","targetProps","display","targetStyle","targetPropsTo","propsTo","propsFrom","getTransitionProps","attrsTo","resetProps","zIndex","pointerEvents","getPositionWithMargin","transform","Animate","selActive","updateState","actives","findButton","list","prevState","getState","newState","mergeState","isEqualState","setState","matchFilter","filterFn","applyState","getFilter","attr2","stateA","stateB","getSelector","sortItems","group","stateFilter","stateSort","stateOrder","localeCompare","numeric","Animations$2","translate","translated","scale3d","Animations$1","Transitioner$1","easing","percent2","linear","triggerUpdate$1","forward","props2","getDistance","SliderNav","previous","slideX","slideLabel","selNav","navChildren","navItems","ariaLabel","ariaControls","slides","navLength","ariaRoleDescription","maxIndex","updateNav","getValidIndex","focusEl","pointerOptions","pointerUpOptions","SliderDrag","draggable","threshold","prevPos","selList","hasSelectableText","drag","_transitioner","dragging","prevIndex","move","distance","dis","nextIndex","_getDistance","edge","itemShown","_translate","_show","dirChange","userSelect","Slider","autoplayInterval","pauseOnHover","startAutoplay","stopAutoplay","clsActivated","Transitioner","transitionOptions","speedUp","queueIndex","getDirection","_getTransitioner","transitioner","Slideshow","Animations","Animations2","beforeitemshow","itemshown","itemhidden","LightboxPanel","delayControls","videoAutoplay","template","selCaption","closeLabel","caption","showControls","hideControls","getItem","loadItem","alt","poster","setItem","iframeAttrs","allowfullscreen","createEl","setError","video","controls","playsinline","class","encodeURI","credentials","json","getSlide","childElementCount","controlsTimer","tag","lightbox","install$1","toItem","Lightbox","lightboxPanel","notification","status","clsClose","clsMsg","startProps","removeFn","closeAll","transformFn","rotate","color","colorFn","backgroundColor","borderColor","hue","fopacity","grayscale","invert","saturate","sepia","cssPropFn","strokeFn","bgx","backgroundFn","bgy","Parallax","fillObject","properties","stops","getCss","css2","willChange","transformFn2","getUnit","parseStops","getValue","getCssValue","parseColor","getStop","parseInt","strokeDashoffset","bgProps","backgroundCoverFn","getBackgroundPos","setBackgroundPosFn","dimImage","getBackgroundImageDimensions","dimEl","down","diff","backgroundSize","backgroundRepeat","toDimensions","nullIndex","leftPercent","targetPercent","unitRe","defaultUnit","keys2","getOffsetElement","SliderReactive","SliderPreload","getAdjacentSlides","center","getLeft","to","triggerUpdate","getItemIn","getWidth","getActives","itemIn","itemOut","isIn","isOut","getElLeft","nextActives","temp","centerEl","getMax","listLeft","listWidth","listRight","slideLeft","slideRight","slider","sets","avgWidth","isFinite","lft","enabled","slideWidth","reorder","updateActiveClasses","itemshow","slideIndex","activeClasses","focusable","_tabindex","currentLeft","getMaxElWidth","listHalf","slidesInView","nextSlide","slide2","sliderParallax","selItem","getCurrentPercent","pull","slideshow","sortable","clsItem","clsPlaceholder","clsDrag","clsDragState","clsBase","clsNoDrag","clsEmpty","clsCustom","handle","tBodies","handles","getSortable","elementFromPoint","findTarget","insertTarget","findInsertTarget","moved","insert","touched","appendDrag","trackScroll","untrackScroll","sortable2","trackTimer","height2","clone","sameList","isHorizontal","placeholderRect","sameRow","linesIntersect","pointerPos","lengthProp","single","isHorizontal2","rectA","rectB","lineA","lineB","tooltip","title","_hasTitle","makeFocusable","getAlignment","upload","invalidMime","invalidName","invalidSize","clsDragover","concurrent","maxSize","mime","url","abort","beforeAll","beforeSend","completeAll","fail","loadEnd","loadStart","progress","change","transfer","dataTransfer","dragenter","dragover","dragleave","file","chunks","chunk","files2","FormData","xhr","ajax","responseType","env","xhr2","pattern","stopPropagation","headers","XMLHttpRequest","send","open","header","setRequestHeader","Error","statusText","Countdown","Filter","Notification","SliderParallax","SlideshowParallax","Sortable","Tooltip","Upload","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","n","getter","__esModule","d","definition","o"],"sourceRoot":""}