markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE$1);\n }\n }\n }\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE$1);\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE$1);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst HOME_KEY = 'Home';\nconst END_KEY = 'End';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst CLASS_DROPDOWN = 'dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\nconst SELECTOR_OUTER = '.nav-item, .list-group-item';\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element);\n this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n if (!this._parent) {\n return;\n // TODO: should throw exception in v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren());\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n }\n\n // Getters\n static get NAME() {\n return NAME$1;\n }\n\n // Public\n show() {\n // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element;\n if (this._elemIsActive(innerElem)) {\n return;\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem();\n const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {\n relatedTarget: innerElem\n }) : null;\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {\n relatedTarget: active\n });\n if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\n return;\n }\n this._deactivate(active, innerElem);\n this._activate(innerElem, active);\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return;\n }\n element.classList.add(CLASS_NAME_ACTIVE);\n this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW$1);\n return;\n }\n element.removeAttribute('tabindex');\n element.setAttribute('aria-selected', true);\n this._toggleDropDown(element, true);\n EventHandler.trigger(element, EVENT_SHOWN$1, {\n relatedTarget: relatedElem\n });\n };\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n }\n _deactivate(element, relatedElem) {\n if (!element) {\n return;\n }\n element.classList.remove(CLASS_NAME_ACTIVE);\n element.blur();\n this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW$1);\n return;\n }\n element.setAttribute('aria-selected', false);\n element.setAttribute('tabindex', '-1');\n this._toggleDropDown(element, false);\n EventHandler.trigger(element, EVENT_HIDDEN$1, {\n relatedTarget: relatedElem\n });\n };\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n }\n _keydown(event) {\n if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {\n return;\n }\n event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault();\n const children = this._getChildren().filter(element => !isDisabled(element));\n let nextActiveElement;\n if ([HOME_KEY, END_KEY].includes(event.key)) {\n nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n } else {\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n nextActiveElement = getNextActiveElement(children, event.target, isNext, true);\n }\n if (nextActiveElement) {\n nextActiveElement.focus({\n preventScroll: true\n });\n Tab.getOrCreateInstance(nextActiveElement).show();\n }\n }\n _getChildren() {\n // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n }\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null;\n }\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist');\n for (const child of children) {\n this._setInitialAttributesOnChild(child);\n }\n }\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child);\n const isActive = this._elemIsActive(child);\n const outerElem = this._getOuterElement(child);\n child.setAttribute('aria-selected', isActive);\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n }\n if (!isActive) {\n child.setAttribute('tabindex', '-1');\n }\n this._setAttributeIfNotExists(child, 'role', 'tab');\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child);\n }\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child);\n if (!target) {\n return;\n }\n this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n }\n }\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element);\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return;\n }\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem);\n if (element) {\n element.classList.toggle(className, open);\n }\n };\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);\n outerElem.setAttribute('aria-expanded', open);\n }\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value);\n }\n }\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE);\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n Tab.getOrCreateInstance(this).show();\n});\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element);\n }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n};\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n};\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._timeout = null;\n this._hasMouseInteraction = false;\n this._hasKeyboardInteraction = false;\n this._setListeners();\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n static get DefaultType() {\n return DefaultType;\n }\n static get NAME() {\n return NAME;\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._clearTimeout();\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE);\n }\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING);\n EventHandler.trigger(this._element, EVENT_SHOWN);\n this._maybeScheduleHide();\n };\n this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n this._queueCallback(complete, this._element, this._config.animation);\n }\n hide() {\n if (!this.isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n EventHandler.trigger(this._element, EVENT_HIDDEN);\n };\n this._element.classList.add(CLASS_NAME_SHOWING);\n this._queueCallback(complete, this._element, this._config.animation);\n }\n dispose() {\n this._clearTimeout();\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW);\n }\n super.dispose();\n }\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW);\n }\n\n // Private\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return;\n }\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return;\n }\n this._timeout = setTimeout(() => {\n this.hide();\n }, this._config.delay);\n }\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout':\n {\n this._hasMouseInteraction = isInteracting;\n break;\n }\n case 'focusin':\n case 'focusout':\n {\n this._hasKeyboardInteraction = isInteracting;\n break;\n }\n }\n if (isInteracting) {\n this._clearTimeout();\n return;\n }\n const nextElement = event.relatedTarget;\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return;\n }\n this._maybeScheduleHide();\n }\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n }\n _clearTimeout() {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n","import { parents } from '../utils/helpers.js';\nimport 'bootstrap';\n\n// Factory Function\nconst ProductManager = (el = null, options = {}) => {\n // === DOM & VARS =======\n\n const module = el || document.querySelector('.product-manager') || console.warn('Product Manager Element not found');\n\n if (!module) return;\n\n const DOM = {\n module,\n table: module.querySelector('.table-products'),\n tbody: module.querySelector('tbody'),\n inputName: module.querySelector('.input-product-name'),\n inputPrice: module.querySelector('.input-product-price'),\n btnAdd: module.querySelector('.button-product-add'),\n templateRow: module.querySelector('.template-row'),\n };\n\n const SERVER_BASE_URL = 'http://127.0.0.1:8000';\n\n // console.log(DOM);\n\n // === INIT =============\n const init = () => {\n // Funktionsaufrufe zu beginn der Anwendung\n initProducts();\n DOM.btnAdd.disabled = true;\n // Event-Lauscher zu beginn der Anwendung\n DOM.btnAdd.addEventListener('click', onClickAdd);\n window.addEventListener('keyup', onKeyUp);\n };\n\n // === EVENTHANDLER =====\n const onKeyUp = (e) => {\n DOM.btnAdd.disabled = !(DOM.inputName.value !== '' && DOM.inputPrice.value !== '');\n // if (DOM.inputName.value !== '' && DOM.inputPrice.value !== '') {\n // DOM.btnAdd.disabled = false;\n // } else {\n // DOM.btnAdd.disabled = true;\n // }\n };\n\n const onClickAdd = (e) => {\n const product = {\n name: DOM.inputName.value, //\n price: Number(DOM.inputPrice.valueAsNumber),\n };\n\n // async API request\n createProduct(product).then((data) => {\n console.log(data);\n if (data.success) {\n loadProducts();\n resetInputFields();\n disableNonFunctionalButtons();\n }\n });\n\n // addProduct(product);\n };\n\n const onClickRemove = (e) => {\n const btn = e.currentTarget;\n const currentRow = parents(btn, 'tr')[0]; // btn.closest('tr'); // btn.parentNode.parentNode;\n\n currentRow.remove();\n // currentRow.parentNode.removeChild(currentRow); // IE11 support\n disableNonFunctionalButtons();\n };\n\n const onClickMoveUp = (e) => {\n const btn = e.currentTarget;\n const currentRow = parents(btn, 'tr')[0];\n\n currentRow.previousElementSibling.before(currentRow);\n // DOM.tbody.insertBefore(currentRow, currentRow.previousElementSibling);\n disableNonFunctionalButtons();\n };\n\n const onClickMoveDown = (e) => {\n const btn = e.currentTarget;\n const currentRow = parents(btn, 'tr')[0];\n currentRow.nextElementSibling.after(currentRow);\n // DOM.tbody.insertBefore(currentRow, currentRow.nextElementSibling.nextElementSibling);\n disableNonFunctionalButtons();\n };\n\n const onMouseDownDrag = (e) => {\n const btn = e.currentTarget;\n const currentRow = parents(btn, 'tr')[0]; // btn.closest('tr'); // btn.parentNode.parentNode;\n currentRow.draggable = true; // => ... \n };\n const onMouseUpDrag = (e) => {\n const btn = e.currentTarget;\n const currentRow = parents(btn, 'tr')[0]; // btn.closest('tr'); // btn.parentNode.parentNode;\n currentRow.draggable = false; // => ... \n };\n const onDragStart = (e) => {\n // console.log('DragEvent: ', e);\n const currentRow = e.currentTarget;\n const idx = [...currentRow.parentNode.children].indexOf(currentRow);\n\n e.dataTransfer.setData('text/plain', String(idx));\n\n // console.log('tr reference index: ', idx);\n };\n const onDragOver = (e) => {\n e.preventDefault(); // WICHTIG: sonst funktioniet drop-EventHandler nicht\n };\n const onDrop = (e) => {\n const currentRow = e.currentTarget; // <- Zielzeile, aud die gedroppt wird\n const targetIdx = [...currentRow.parentNode.children].indexOf(currentRow);\n const sourceIdx = Number(e.dataTransfer.getData('text/plain'));\n\n console.log({ targetIdx, sourceIdx });\n\n //const draggedRow = DOM.tbody.querySelector(`tr:nth-child(${sourceIdx + 1})`);\n const draggedRow = DOM.tbody.children[sourceIdx];\n\n // Guard wenn Element auf sich selbst losgelassen wurde, abbruch\n if (sourceIdx === targetIdx) return;\n\n // Verschiebe das Element im DOM\n if (sourceIdx > targetIdx) {\n currentRow.before(draggedRow);\n } else {\n currentRow.after(draggedRow);\n }\n\n disableNonFunctionalButtons();\n };\n\n // === XHR/FETCH ========\n\n // HTTP - Methode - POST\n // (C)RUD - Create\n // BRE(A)D - Add - hinzufügen eines neuen Produkts\n const createProduct = async (product) => {\n try {\n const response = await fetch(`${SERVER_BASE_URL}/api/products`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(product),\n }); // HTTP-Request URL\n\n if (!response.ok) {\n throw new Error('Fetch went wrong.');\n }\n const data = await response.json(); // HTTP-Response-Body in JS-Objekt geparsed -> Promise\n\n return data;\n } catch (error) {\n console.error(error);\n throw error;\n }\n };\n\n // HTTP - Methode - GET\n // C(R)UD - Read\n // (B)READ - Browse - auslesen aller Produkte\n const fetchProducts = async () => {\n try {\n const response = await fetch(`${SERVER_BASE_URL}/api/products`); // HTTP-Request URL\n\n if (!response.ok) {\n throw new Error('Fetch went wrong.');\n }\n const data = await response.json(); // HTTP-Response-Body in JS-Objekt geparsed -> Promise\n\n return data;\n } catch (error) {\n console.error(error);\n throw error;\n }\n };\n\n // === FUNCTIONS ========\n const initProducts = () => {\n fetchProducts().then((products) => {\n products.forEach(addProduct);\n disableNonFunctionalButtons();\n });\n };\n\n const loadProducts = () => {\n DOM.tbody.innerHTML = '';\n fetchProducts().then((data) => {\n // TODO: add fade Animation\n data.forEach(addProduct);\n disableNonFunctionalButtons();\n });\n };\n\n const addProduct = (product) => {\n const { name, price } = product;\n\n // https://developer.mozilla.org/de/docs/Web/HTML/Reference/Elements/template#anwendungshinweise\n const trEl = DOM.templateRow.content.firstElementChild.cloneNode(true);\n\n const tdNameEl = trEl.querySelector('.td-name');\n const tdPriceEl = trEl.querySelector('.td-price');\n const btnDragEl = trEl.querySelector('.button-product-drag');\n const btnRemoveEl = trEl.querySelector('.button-product-remove');\n const btnMoveUpEl = trEl.querySelector('.button-product-move-up');\n const btnMoveDownEl = trEl.querySelector('.button-product-move-down');\n\n // Drag 'n Drop hinzufügen.\n btnDragEl.addEventListener('mousedown', onMouseDownDrag);\n btnDragEl.addEventListener('mouseup', onMouseUpDrag);\n\n trEl.addEventListener('dragstart', onDragStart);\n trEl.addEventListener('dragover', onDragOver);\n trEl.addEventListener('drop', onDrop);\n\n tdNameEl.textContent = name;\n tdPriceEl.textContent = Number(price).toFixed(2);\n btnRemoveEl.addEventListener('click', onClickRemove);\n btnMoveUpEl.addEventListener('click', onClickMoveUp);\n btnMoveDownEl.addEventListener('click', onClickMoveDown);\n\n DOM.tbody.appendChild(trEl);\n };\n\n const disableNonFunctionalButtons = () => {\n DOM.tbody.querySelectorAll('tr').forEach((tr) => {\n tr.querySelector('.button-product-move-up').disabled = !tr.previousElementSibling;\n tr.querySelector('.button-product-move-down').disabled = !tr.nextElementSibling;\n });\n };\n\n const resetInputFields = () => {\n DOM.inputName.value = DOM.inputPrice.value = '';\n DOM.btnAdd.disabled = true;\n };\n\n // Helper\n // function parents(el, selector) {\n // const parents = [];\n // while ((el = el.parentNode) && el !== document) {\n // if (!selector || el.matches(selector)) parents.push(el);\n // }\n // return parents;\n // }\n\n init();\n\n return {\n element: DOM.module,\n init,\n };\n};\n\nexport default ProductManager;\n","import ProductManager from './modules/ProductManager'; // Dateiendung nicht notwendig ?\n\n(() => {\n // === DOM & VARS =======\n const DOM = {};\n\n // === INIT =============\n const init = () => {\n console.log('init!');\n // ProductManager();\n router();\n };\n\n // === EVENTHANDLER =====\n\n // === XHR/FETCH ========\n\n // === FUNCTIONS ========\n const router = () => {\n const path = window.location.pathname;\n console.log(path);\n\n switch (path) {\n case '/':\n case '/index.html':\n console.log('HOME');\n break;\n case '/projects/02_product-manager.html':\n console.log('PRODUCT_MANAGER');\n ProductManager();\n break;\n default:\n console.log('no scripts found');\n }\n };\n\n init();\n})();\n"],"names":["isElement","effect","getComputedStyle","min","max","mathMax","mathMin","hash","allPlacements","placements","popperOffsets","computeStyles","applyStyles","offset","flip","preventOverflow","arrow","hide"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsiZGV2L3NjcmlwdHMvdXRpbHMvaGVscGVycy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVTY3JvbGwuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGVib3VuY2UuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9jcmVhdGVQb3BwZXIuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci5qcyIsIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvZGlzdC9qcy9ib290c3RyYXAuZXNtLmpzIiwiZGV2L3NjcmlwdHMvbW9kdWxlcy9Qcm9kdWN0TWFuYWdlci5qcyIsImRldi9zY3JpcHRzL21haW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSGVscGVyXG5leHBvcnQgZnVuY3Rpb24gcGFyZW50cyhlbCwgc2VsZWN0b3IpIHtcbiAgY29uc3QgcGFyZW50cyA9IFtdO1xuICB3aGlsZSAoKGVsID0gZWwucGFyZW50Tm9kZSkgJiYgZWwgIT09IGRvY3VtZW50KSB7XG4gICAgaWYgKCFzZWxlY3RvciB8fCBlbC5tYXRjaGVzKHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsKTtcbiAgfVxuICByZXR1cm4gcGFyZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZENsYXNzKGVsLCBjbGFzc05hbWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2xhc3NOYW1lKSkge1xuICAgIGVsLmNsYXNzTGlzdC5hZGQoLi4uY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBlbC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gIH1cbiAgcmV0dXJuIGVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWwsIGNsYXNzTmFtZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShjbGFzc05hbWUpKSB7XG4gICAgZWwuY2xhc3NMaXN0LnJlbW92ZSguLi5jbGFzc05hbWUpO1xuICB9IGVsc2Uge1xuICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgfVxuICByZXR1cm4gZWw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcGFyZW50cyxcbiAgYWRkQ2xhc3MsXG4gIHJlbW92ZUNsYXNzLFxufTtcbiIsImV4cG9ydCB2YXIgdG9wID0gJ3RvcCc7XG5leHBvcnQgdmFyIGJvdHRvbSA9ICdib3R0b20nO1xuZXhwb3J0IHZhciByaWdodCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIGxlZnQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIGF1dG8gPSAnYXV0byc7XG5leHBvcnQgdmFyIGJhc2VQbGFjZW1lbnRzID0gW3RvcCwgYm90dG9tLCByaWdodCwgbGVmdF07XG5leHBvcnQgdmFyIHN0YXJ0ID0gJ3N0YXJ0JztcbmV4cG9ydCB2YXIgZW5kID0gJ2VuZCc7XG5leHBvcnQgdmFyIGNsaXBwaW5nUGFyZW50cyA9ICdjbGlwcGluZ1BhcmVudHMnO1xuZXhwb3J0IHZhciB2aWV3cG9ydCA9ICd2aWV3cG9ydCc7XG5leHBvcnQgdmFyIHBvcHBlciA9ICdwb3BwZXInO1xuZXhwb3J0IHZhciByZWZlcmVuY2UgPSAncmVmZXJlbmNlJztcbmV4cG9ydCB2YXIgdmFyaWF0aW9uUGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9iYXNlUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pO1xuZXhwb3J0IHZhciBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL1tdLmNvbmNhdChiYXNlUGxhY2VtZW50cywgW2F1dG9dKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQsIHBsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7IC8vIG1vZGlmaWVycyB0aGF0IG5lZWQgdG8gcmVhZCB0aGUgRE9NXG5cbmV4cG9ydCB2YXIgYmVmb3JlUmVhZCA9ICdiZWZvcmVSZWFkJztcbmV4cG9ydCB2YXIgcmVhZCA9ICdyZWFkJztcbmV4cG9ydCB2YXIgYWZ0ZXJSZWFkID0gJ2FmdGVyUmVhZCc7IC8vIHB1cmUtbG9naWMgbW9kaWZpZXJzXG5cbmV4cG9ydCB2YXIgYmVmb3JlTWFpbiA9ICdiZWZvcmVNYWluJztcbmV4cG9ydCB2YXIgbWFpbiA9ICdtYWluJztcbmV4cG9ydCB2YXIgYWZ0ZXJNYWluID0gJ2FmdGVyTWFpbic7IC8vIG1vZGlmaWVyIHdpdGggdGhlIHB1cnBvc2UgdG8gd3JpdGUgdG8gdGhlIERPTSAob3Igd3JpdGUgaW50byBhIGZyYW1ld29yayBzdGF0ZSlcblxuZXhwb3J0IHZhciBiZWZvcmVXcml0ZSA9ICdiZWZvcmVXcml0ZSc7XG5leHBvcnQgdmFyIHdyaXRlID0gJ3dyaXRlJztcbmV4cG9ydCB2YXIgYWZ0ZXJXcml0ZSA9ICdhZnRlcldyaXRlJztcbmV4cG9ydCB2YXIgbW9kaWZpZXJQaGFzZXMgPSBbYmVmb3JlUmVhZCwgcmVhZCwgYWZ0ZXJSZWFkLCBiZWZvcmVNYWluLCBtYWluLCBhZnRlck1haW4sIGJlZm9yZVdyaXRlLCB3cml0ZSwgYWZ0ZXJXcml0ZV07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3Qobm9kZSkge1xuICAvLyBJRSAxMSBoYXMgbm8gU2hhZG93Um9vdFxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuU2hhZG93Um9vdDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xufVxuXG5leHBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9OyIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdG8gZXh0ZW5kIHRoaXMgcHJvcGVydHksIGJ1dCBpdCdzIHRoZSBtb3N0XG4gICAgLy8gZWZmZWN0aXZlIHdheSB0byBhcHBseSBzdHlsZXMgdG8gYW4gSFRNTEVsZW1lbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cblxuXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGU7XG4gIHZhciBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICBpZiAoc3RhdGUuZWxlbWVudHMuYXJyb3cpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgICB2YXIgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUuc3R5bGVzLmhhc093blByb3BlcnR5KG5hbWUpID8gc3RhdGUuc3R5bGVzW25hbWVdIDogaW5pdGlhbFN0eWxlc1tuYW1lXSk7IC8vIFNldCBhbGwgdmFsdWVzIHRvIGFuIGVtcHR5IHN0cmluZyB0byB1bnNldCB0aGVtXG5cbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlLCBwcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZVtwcm9wZXJ0eV0gPSAnJztcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSwge30pOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBhcHBseVN0eWxlcyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTsiLCJpbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59IiwiZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCB2YXIgbWluID0gTWF0aC5taW47XG5leHBvcnQgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgdmFyIHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuXG4gIGlmICh1YURhdGEgIT0gbnVsbCAmJiB1YURhdGEuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwiaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTGF5b3V0Vmlld3BvcnQoKSB7XG4gIHJldHVybiAhL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChnZXRVQVN0cmluZygpKTtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cblxuICB2YXIgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSAxO1xuICB2YXIgc2NhbGVZID0gMTtcblxuICBpZiAoaW5jbHVkZVNjYWxlICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBzY2FsZVggPSBlbGVtZW50Lm9mZnNldFdpZHRoID4gMCA/IHJvdW5kKGNsaWVudFJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxIDogMTtcbiAgICBzY2FsZVkgPSBlbGVtZW50Lm9mZnNldEhlaWdodCA+IDAgPyByb3VuZChjbGllbnRSZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxIDogMTtcbiAgfVxuXG4gIHZhciBfcmVmID0gaXNFbGVtZW50KGVsZW1lbnQpID8gZ2V0V2luZG93KGVsZW1lbnQpIDogd2luZG93LFxuICAgICAgdmlzdWFsVmlld3BvcnQgPSBfcmVmLnZpc3VhbFZpZXdwb3J0O1xuXG4gIHZhciBhZGRWaXN1YWxPZmZzZXRzID0gIWlzTGF5b3V0Vmlld3BvcnQoKSAmJiBpc0ZpeGVkU3RyYXRlZ3k7XG4gIHZhciB4ID0gKGNsaWVudFJlY3QubGVmdCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCA6IDApKSAvIHNjYWxlWDtcbiAgdmFyIHkgPSAoY2xpZW50UmVjdC50b3AgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcCA6IDApKSAvIHNjYWxlWTtcbiAgdmFyIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlWDtcbiAgdmFyIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGVZO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgbGVmdDogeCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwiaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGFpbnMocGFyZW50LCBjaGlsZCkge1xuICB2YXIgcm9vdE5vZGUgPSBjaGlsZC5nZXRSb290Tm9kZSAmJiBjaGlsZC5nZXRSb290Tm9kZSgpOyAvLyBGaXJzdCwgYXR0ZW1wdCB3aXRoIGZhc3RlciBuYXRpdmUgbWV0aG9kXG5cbiAgaWYgKHBhcmVudC5jb250YWlucyhjaGlsZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyB0aGVuIGZhbGxiYWNrIHRvIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiB3aXRoIFNoYWRvdyBET00gc3VwcG9ydFxuICBlbHNlIGlmIChyb290Tm9kZSAmJiBpc1NoYWRvd1Jvb3Qocm9vdE5vZGUpKSB7XG4gICAgICB2YXIgbmV4dCA9IGNoaWxkO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChuZXh0ICYmIHBhcmVudC5pc1NhbWVOb2RlKG5leHQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddOiBuZWVkIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhpcy4uLlxuXG5cbiAgICAgICAgbmV4dCA9IG5leHQucGFyZW50Tm9kZSB8fCBuZXh0Lmhvc3Q7XG4gICAgICB9IHdoaWxlIChuZXh0KTtcbiAgICB9IC8vIEdpdmUgdXAsIHRoZSByZXN1bHQgaXMgZmFsc2VcblxuXG4gIHJldHVybiBmYWxzZTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsImltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSB7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgcmV0dXJuICgoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5vd25lckRvY3VtZW50IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIGVsZW1lbnQuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkuZG9jdW1lbnRFbGVtZW50O1xufSIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBhcmVudE5vZGUoZWxlbWVudCkge1xuICBpZiAoZ2V0Tm9kZU5hbWUoZWxlbWVudCkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuICgvLyB0aGlzIGlzIGEgcXVpY2tlciAoYnV0IGxlc3MgdHlwZSBzYWZlKSB3YXkgdG8gc2F2ZSBxdWl0ZSBzb21lIGJ5dGVzIGZyb20gdGhlIGJ1bmRsZVxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICBlbGVtZW50LmFzc2lnbmVkU2xvdCB8fCAvLyBzdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZVxuICAgIGVsZW1lbnQucGFyZW50Tm9kZSB8fCAoIC8vIERPTSBFbGVtZW50IGRldGVjdGVkXG4gICAgaXNTaGFkb3dSb290KGVsZW1lbnQpID8gZWxlbWVudC5ob3N0IDogbnVsbCkgfHwgLy8gU2hhZG93Um9vdCBkZXRlY3RlZFxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBIVE1MRWxlbWVudCBpcyBhIE5vZGVcbiAgICBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgLy8gZmFsbGJhY2tcblxuICApO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPj0gMCA/ICd4JyA6ICd5Jztcbn0iLCJpbXBvcnQgeyBtYXggYXMgbWF0aE1heCwgbWluIGFzIG1hdGhNaW4gfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluKG1pbiwgdmFsdWUsIG1heCkge1xuICByZXR1cm4gbWF0aE1heChtaW4sIG1hdGhNaW4odmFsdWUsIG1heCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbk1heENsYW1wKG1pbiwgdmFsdWUsIG1heCkge1xuICB2YXIgdiA9IHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpO1xuICByZXR1cm4gdiA+IG1heCA/IG1heCA6IHY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSIsImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4cGFuZFRvSGFzaE1hcCh2YWx1ZSwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKGhhc2hNYXAsIGtleSkge1xuICAgIGhhc2hNYXBba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBoYXNoTWFwO1xuICB9LCB7fSk7XG59IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn0iLCJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmLCB3aW4pIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55O1xuICB2YXIgZHByID0gd2luLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4ICogZHByKSAvIGRwciB8fCAwLFxuICAgIHk6IHJvdW5kKHkgKiBkcHIpIC8gZHByIHx8IDBcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBfT2JqZWN0JGFzc2lnbjI7XG5cbiAgdmFyIHBvcHBlciA9IF9yZWYyLnBvcHBlcixcbiAgICAgIHBvcHBlclJlY3QgPSBfcmVmMi5wb3BwZXJSZWN0LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgICAgdmFyaWF0aW9uID0gX3JlZjIudmFyaWF0aW9uLFxuICAgICAgb2Zmc2V0cyA9IF9yZWYyLm9mZnNldHMsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYyLnBvc2l0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX3JlZjIuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgYWRhcHRpdmUgPSBfcmVmMi5hZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9yZWYyLnJvdW5kT2Zmc2V0cyxcbiAgICAgIGlzRml4ZWQgPSBfcmVmMi5pc0ZpeGVkO1xuICB2YXIgX29mZnNldHMkeCA9IG9mZnNldHMueCxcbiAgICAgIHggPSBfb2Zmc2V0cyR4ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeCxcbiAgICAgIF9vZmZzZXRzJHkgPSBvZmZzZXRzLnksXG4gICAgICB5ID0gX29mZnNldHMkeSA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHk7XG5cbiAgdmFyIF9yZWYzID0gdHlwZW9mIHJvdW5kT2Zmc2V0cyA9PT0gJ2Z1bmN0aW9uJyA/IHJvdW5kT2Zmc2V0cyh7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmMy54O1xuICB5ID0gX3JlZjMueTtcbiAgdmFyIGhhc1ggPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd4Jyk7XG4gIHZhciBoYXNZID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneScpO1xuICB2YXIgc2lkZVggPSBsZWZ0O1xuICB2YXIgc2lkZVkgPSB0b3A7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG5cbiAgaWYgKGFkYXB0aXZlKSB7XG4gICAgdmFyIG9mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChwb3BwZXIpO1xuICAgIHZhciBoZWlnaHRQcm9wID0gJ2NsaWVudEhlaWdodCc7XG4gICAgdmFyIHdpZHRoUHJvcCA9ICdjbGllbnRXaWR0aCc7XG5cbiAgICBpZiAob2Zmc2V0UGFyZW50ID09PSBnZXRXaW5kb3cocG9wcGVyKSkge1xuICAgICAgb2Zmc2V0UGFyZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KHBvcHBlcik7XG5cbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gIT09ICdzdGF0aWMnICYmIHBvc2l0aW9uID09PSAnYWJzb2x1dGUnKSB7XG4gICAgICAgIGhlaWdodFByb3AgPSAnc2Nyb2xsSGVpZ2h0JztcbiAgICAgICAgd2lkdGhQcm9wID0gJ3Njcm9sbFdpZHRoJztcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhc3RdOiBmb3JjZSB0eXBlIHJlZmluZW1lbnQsIHdlIGNvbXBhcmUgb2Zmc2V0UGFyZW50IHdpdGggd2luZG93IGFib3ZlLCBidXQgRmxvdyBkb2Vzbid0IGRldGVjdCBpdFxuXG5cbiAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSB0b3AgfHwgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCBwbGFjZW1lbnQgPT09IHJpZ2h0KSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVkgPSBib3R0b207XG4gICAgICB2YXIgb2Zmc2V0WSA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LmhlaWdodCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W2hlaWdodFByb3BdO1xuICAgICAgeSAtPSBvZmZzZXRZIC0gcG9wcGVyUmVjdC5oZWlnaHQ7XG4gICAgICB5ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSBsZWZ0IHx8IChwbGFjZW1lbnQgPT09IHRvcCB8fCBwbGFjZW1lbnQgPT09IGJvdHRvbSkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVYID0gcmlnaHQ7XG4gICAgICB2YXIgb2Zmc2V0WCA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LndpZHRoIDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbd2lkdGhQcm9wXTtcbiAgICAgIHggLT0gb2Zmc2V0WCAtIHBvcHBlclJlY3Qud2lkdGg7XG4gICAgICB4ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tbW9uU3R5bGVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH0sIGFkYXB0aXZlICYmIHVuc2V0U2lkZXMpO1xuXG4gIHZhciBfcmVmNCA9IHJvdW5kT2Zmc2V0cyA9PT0gdHJ1ZSA/IHJvdW5kT2Zmc2V0c0J5RFBSKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSwgZ2V0V2luZG93KHBvcHBlcikpIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmNC54O1xuICB5ID0gX3JlZjQueTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMSA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNSkge1xuICB2YXIgc3RhdGUgPSBfcmVmNS5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNS5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvbixcbiAgICBpc0ZpeGVkOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciBwYXNzaXZlID0ge1xuICBwYXNzaXZlOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgaW5zdGFuY2UgPSBfcmVmLmluc3RhbmNlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJHNjcm9sbCA9IG9wdGlvbnMuc2Nyb2xsLFxuICAgICAgc2Nyb2xsID0gX29wdGlvbnMkc2Nyb2xsID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkc2Nyb2xsLFxuICAgICAgX29wdGlvbnMkcmVzaXplID0gb3B0aW9ucy5yZXNpemUsXG4gICAgICByZXNpemUgPSBfb3B0aW9ucyRyZXNpemUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyZXNpemU7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coc3RhdGUuZWxlbWVudHMucG9wcGVyKTtcbiAgdmFyIHNjcm9sbFBhcmVudHMgPSBbXS5jb25jYXQoc3RhdGUuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsIHN0YXRlLnNjcm9sbFBhcmVudHMucG9wcGVyKTtcblxuICBpZiAoc2Nyb2xsKSB7XG4gICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgIHNjcm9sbFBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlc2l6ZSkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgICBzY3JvbGxQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXNpemUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH1cbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2V2ZW50TGlzdGVuZXJzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBmdW5jdGlvbiBmbigpIHt9LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgZGF0YToge31cbn07IiwidmFyIGhhc2ggPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwidmFyIGhhc2ggPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGwobm9kZSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbi5wYWdlWU9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wXG4gIH07XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSB7XG4gIC8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbiAgLy8gaW5jb3JyZWN0IGZvciBSVEwuXG4gIC8vIFBvcHBlciAxIGlzIGJyb2tlbiBpbiB0aGlzIGNhc2UgYW5kIG5ldmVyIGhhZCBhIGJ1ZyByZXBvcnQgc28gbGV0J3MgYXNzdW1lXG4gIC8vIGl0J3Mgbm90IGFuIGlzc3VlLiBJIGRvbid0IHRoaW5rIGFueW9uZSBldmVyIHNwZWNpZmllcyB3aWR0aCBvbiA8aHRtbD5cbiAgLy8gYW55d2F5LlxuICAvLyBCcm93c2VycyB3aGVyZSB0aGUgbGVmdCBzY3JvbGxiYXIgZG9lc24ndCBjYXVzZSBhbiBpc3N1ZSByZXBvcnQgYDBgIGZvclxuICAvLyB0aGlzIChlLmcuIEVkZ2UgMjAxOSwgSUUxMSwgU2FmYXJpKVxuICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGdldFdpbmRvd1Njcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gRmlyZWZveCB3YW50cyB1cyB0byBjaGVjayBgLXhgIGFuZCBgLXlgIHZhcmlhdGlvbnMgYXMgd2VsbFxuICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvdyxcbiAgICAgIG92ZXJmbG93WCA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WCxcbiAgICAgIG92ZXJmbG93WSA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WTtcblxuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVuLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKTtcbn0iLCJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsImltcG9ydCBnZXRTY3JvbGxQYXJlbnQgZnJvbSBcIi4vZ2V0U2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG4vKlxuZ2l2ZW4gYSBET00gZWxlbWVudCwgcmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBzY3JvbGwgcGFyZW50cywgdXAgdGhlIGxpc3Qgb2YgYW5jZXNvcnNcbnVudGlsIHdlIGdldCB0byB0aGUgdG9wIHdpbmRvdyBvYmplY3QuIFRoaXMgbGlzdCBpcyB3aGF0IHdlIGF0dGFjaCBzY3JvbGwgbGlzdGVuZXJzXG50bywgYmVjYXVzZSBpZiBhbnkgb2YgdGhlc2UgcGFyZW50IGVsZW1lbnRzIHNjcm9sbCwgd2UnbGwgbmVlZCB0byByZS1jYWxjdWxhdGUgdGhlXG5yZWZlcmVuY2UgZWxlbWVudCdzIHBvc2l0aW9uLlxuKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFNjcm9sbFBhcmVudHMoZWxlbWVudCwgbGlzdCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cblxuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpO1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50ID09PSAoKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5KTtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhzY3JvbGxQYXJlbnQpO1xuICB2YXIgdGFyZ2V0ID0gaXNCb2R5ID8gW3dpbl0uY29uY2F0KHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNTY3JvbGxQYXJlbnQoc2Nyb2xsUGFyZW50KSA/IHNjcm9sbFBhcmVudCA6IFtdKSA6IHNjcm9sbFBhcmVudDtcbiAgdmFyIHVwZGF0ZWRMaXN0ID0gbGlzdC5jb25jYXQodGFyZ2V0KTtcbiAgcmV0dXJuIGlzQm9keSA/IHVwZGF0ZWRMaXN0IDogLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IGlzQm9keSB0ZWxscyB1cyB0YXJnZXQgd2lsbCBiZSBhbiBIVE1MRWxlbWVudCBoZXJlXG4gIHVwZGF0ZWRMaXN0LmNvbmNhdChsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKHRhcmdldCkpKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJlY3QsIHtcbiAgICBsZWZ0OiByZWN0LngsXG4gICAgdG9wOiByZWN0LnksXG4gICAgcmlnaHQ6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiByZWN0LnkgKyByZWN0LmhlaWdodFxuICB9KTtcbn0iLCJpbXBvcnQgeyB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZpZXdwb3J0UmVjdCBmcm9tIFwiLi9nZXRWaWV3cG9ydFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudFJlY3QgZnJvbSBcIi4vZ2V0RG9jdW1lbnRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi4vdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBmYWxzZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICByZWN0LnRvcCA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC53aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QueCA9IHJlY3QubGVmdDtcbiAgcmVjdC55ID0gcmVjdC50b3A7XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydCA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSkgOiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSA6IHJlY3RUb0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkpO1xufSAvLyBBIFwiY2xpcHBpbmcgcGFyZW50XCIgaXMgYW4gb3ZlcmZsb3dhYmxlIGNvbnRhaW5lciB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2l0aCBhIHBvc2l0aW9uIGRpZmZlcmVudCBmcm9tXG4vLyBgaW5pdGlhbGBcblxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkge1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIHZhciBjYW5Fc2NhcGVDbGlwcGluZyA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pID49IDA7XG4gIHZhciBjbGlwcGVyRWxlbWVudCA9IGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIGlmICghaXNFbGVtZW50KGNsaXBwZXJFbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuXG5cbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNsaXBwaW5nUGFyZW50KSB7XG4gICAgcmV0dXJuIGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgJiYgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJiBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5JztcbiAgfSk7XG59IC8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIHBhcmVudHNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoZWxlbWVudCwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpIHtcbiAgdmFyIG1haW5DbGlwcGluZ1BhcmVudHMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nUGFyZW50cycgPyBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gW10uY29uY2F0KG1haW5DbGlwcGluZ1BhcmVudHMsIFtyb290Qm91bmRhcnldKTtcbiAgdmFyIGZpcnN0Q2xpcHBpbmdQYXJlbnQgPSBjbGlwcGluZ1BhcmVudHNbMF07XG4gIHZhciBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ1BhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2NSZWN0LCBjbGlwcGluZ1BhcmVudCkge1xuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBmaXJzdENsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkpO1xuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG4gIHJldHVybiBjbGlwcGluZ1JlY3Q7XG59IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59IiwiaW1wb3J0IGdldENsaXBwaW5nUmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBjbGlwcGluZ1BhcmVudHMsIHJlZmVyZW5jZSwgcG9wcGVyLCBib3R0b20sIHRvcCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi9leHBhbmRUb0hhc2hNYXAuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIF9vcHRpb25zJHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zJHBsYWNlbWVudCA9PT0gdm9pZCAwID8gc3RhdGUucGxhY2VtZW50IDogX29wdGlvbnMkcGxhY2VtZW50LFxuICAgICAgX29wdGlvbnMkc3RyYXRlZ3kgPSBfb3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIHN0cmF0ZWd5ID0gX29wdGlvbnMkc3RyYXRlZ3kgPT09IHZvaWQgMCA/IHN0YXRlLnN0cmF0ZWd5IDogX29wdGlvbnMkc3RyYXRlZ3ksXG4gICAgICBfb3B0aW9ucyRib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucyRib3VuZGFyeSA9PT0gdm9pZCAwID8gY2xpcHBpbmdQYXJlbnRzIDogX29wdGlvbnMkYm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRyb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucyRyb290Qm91bmRhcnkgPT09IHZvaWQgMCA/IHZpZXdwb3J0IDogX29wdGlvbnMkcm9vdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZWxlbWVudENvbnRlID0gX29wdGlvbnMuZWxlbWVudENvbnRleHQsXG4gICAgICBlbGVtZW50Q29udGV4dCA9IF9vcHRpb25zJGVsZW1lbnRDb250ZSA9PT0gdm9pZCAwID8gcG9wcGVyIDogX29wdGlvbnMkZWxlbWVudENvbnRlLFxuICAgICAgX29wdGlvbnMkYWx0Qm91bmRhcnkgPSBfb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMkYWx0Qm91bmRhcnkgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucyRwYWRkaW5nID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkcGFkZGluZztcbiAgdmFyIHBhZGRpbmdPYmplY3QgPSBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xuICB2YXIgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyByZWZlcmVuY2UgOiBwb3BwZXI7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgdmFyIGNsaXBwaW5nQ2xpZW50UmVjdCA9IGdldENsaXBwaW5nUmVjdChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCBnZXREb2N1bWVudEVsZW1lbnQoc3RhdGUuZWxlbWVudHMucG9wcGVyKSwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpO1xuICB2YXIgcmVmZXJlbmNlQ2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChzdGF0ZS5lbGVtZW50cy5yZWZlcmVuY2UpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHJlZmVyZW5jZUNsaWVudFJlY3QsXG4gICAgZWxlbWVudDogcG9wcGVyUmVjdCxcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KTtcbiAgdmFyIHBvcHBlckNsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KE9iamVjdC5hc3NpZ24oe30sIHBvcHBlclJlY3QsIHBvcHBlck9mZnNldHMpKTtcbiAgdmFyIGVsZW1lbnRDbGllbnRSZWN0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHBvcHBlckNsaWVudFJlY3QgOiByZWZlcmVuY2VDbGllbnRSZWN0OyAvLyBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyByZWN0XG4gIC8vIDAgb3IgbmVnYXRpdmUgPSB3aXRoaW4gdGhlIGNsaXBwaW5nIHJlY3RcblxuICB2YXIgb3ZlcmZsb3dPZmZzZXRzID0ge1xuICAgIHRvcDogY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wLFxuICAgIGJvdHRvbTogZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tLFxuICAgIGxlZnQ6IGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCxcbiAgICByaWdodDogZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0XG4gIH07XG4gIHZhciBvZmZzZXREYXRhID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQ7IC8vIE9mZnNldHMgY2FuIGJlIGFwcGxpZWQgb25seSB0byB0aGUgcG9wcGVyIGVsZW1lbnRcblxuICBpZiAoZWxlbWVudENvbnRleHQgPT09IHBvcHBlciAmJiBvZmZzZXREYXRhKSB7XG4gICAgdmFyIG9mZnNldCA9IG9mZnNldERhdGFbcGxhY2VtZW50XTtcbiAgICBPYmplY3Qua2V5cyhvdmVyZmxvd09mZnNldHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIG11bHRpcGx5ID0gW3JpZ2h0LCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gMSA6IC0xO1xuICAgICAgdmFyIGF4aXMgPSBbdG9wLCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gJ3knIDogJ3gnO1xuICAgICAgb3ZlcmZsb3dPZmZzZXRzW2tleV0gKz0gb2Zmc2V0W2F4aXNdICogbXVsdGlwbHk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gb3ZlcmZsb3dPZmZzZXRzO1xufSIsImltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyB2YXJpYXRpb25QbGFjZW1lbnRzLCBiYXNlUGxhY2VtZW50cywgcGxhY2VtZW50cyBhcyBhbGxQbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9IF9vcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9PT0gdm9pZCAwID8gYWxsUGxhY2VtZW50cyA6IF9vcHRpb25zJGFsbG93ZWRBdXRvUDtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpO1xuICB2YXIgcGxhY2VtZW50cyA9IHZhcmlhdGlvbiA/IGZsaXBWYXJpYXRpb25zID8gdmFyaWF0aW9uUGxhY2VtZW50cyA6IHZhcmlhdGlvblBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHZhcmlhdGlvbjtcbiAgfSkgOiBiYXNlUGxhY2VtZW50cztcbiAgdmFyIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhbGxvd2VkQXV0b1BsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpID49IDA7XG4gIH0pO1xuXG4gIGlmIChhbGxvd2VkUGxhY2VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IEZsb3cgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIHR3byBhcnJheSB1bmlvbnMuLi5cblxuXG4gIHZhciBvdmVyZmxvd3MgPSBhbGxvd2VkUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KVtnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCldO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG92ZXJmbG93cykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBvdmVyZmxvd3NbYV0gLSBvdmVyZmxvd3NbYl07XG4gIH0pO1xufSIsImltcG9ydCBnZXRPcHBvc2l0ZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgY29tcHV0ZUF1dG9QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyBib3R0b20sIHRvcCwgc3RhcnQsIHJpZ2h0LCBsZWZ0LCBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgaWYgKGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0bykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5cbmZ1bmN0aW9uIGZsaXAoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgPSBvcHRpb25zLmZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9IG9wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGZsaXBWYXJpYXRpbyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IG9wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzO1xuICB2YXIgcHJlZmVycmVkUGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gYmFzZVBsYWNlbWVudCA9PT0gcHJlZmVycmVkUGxhY2VtZW50O1xuICB2YXIgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBWYXJpYXRpb25zID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocHJlZmVycmVkUGxhY2VtZW50KSk7XG4gIHZhciBwbGFjZW1lbnRzID0gW3ByZWZlcnJlZFBsYWNlbWVudF0uY29uY2F0KGZhbGxiYWNrUGxhY2VtZW50cykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0byA/IGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zOiBmbGlwVmFyaWF0aW9ucyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50czogYWxsb3dlZEF1dG9QbGFjZW1lbnRzXG4gICAgfSkgOiBwbGFjZW1lbnQpO1xuICB9LCBbXSk7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGNoZWNrc01hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIG1ha2VGYWxsYmFja0NoZWNrcyA9IHRydWU7XG4gIHZhciBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzWzBdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGxhY2VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwbGFjZW1lbnQgPSBwbGFjZW1lbnRzW2ldO1xuXG4gICAgdmFyIF9iYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gICAgdmFyIGlzU3RhcnRWYXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gc3RhcnQ7XG4gICAgdmFyIGlzVmVydGljYWwgPSBbdG9wLCBib3R0b21dLmluZGV4T2YoX2Jhc2VQbGFjZW1lbnQpID49IDA7XG4gICAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSk7XG4gICAgdmFyIG1haW5WYXJpYXRpb25TaWRlID0gaXNWZXJ0aWNhbCA/IGlzU3RhcnRWYXJpYXRpb24gPyByaWdodCA6IGxlZnQgOiBpc1N0YXJ0VmFyaWF0aW9uID8gYm90dG9tIDogdG9wO1xuXG4gICAgaWYgKHJlZmVyZW5jZVJlY3RbbGVuXSA+IHBvcHBlclJlY3RbbGVuXSkge1xuICAgICAgbWFpblZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgfVxuXG4gICAgdmFyIGFsdFZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgdmFyIGNoZWNrcyA9IFtdO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W19iYXNlUGxhY2VtZW50XSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1ttYWluVmFyaWF0aW9uU2lkZV0gPD0gMCwgb3ZlcmZsb3dbYWx0VmFyaWF0aW9uU2lkZV0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrcy5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgIHJldHVybiBjaGVjaztcbiAgICB9KSkge1xuICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgbWFrZUZhbGxiYWNrQ2hlY2tzID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjaGVja3NNYXAuc2V0KHBsYWNlbWVudCwgY2hlY2tzKTtcbiAgfVxuXG4gIGlmIChtYWtlRmFsbGJhY2tDaGVja3MpIHtcbiAgICAvLyBgMmAgbWF5IGJlIGRlc2lyZWQgaW4gc29tZSBjYXNlcyDigJMgcmVzZWFyY2ggbGF0ZXJcbiAgICB2YXIgbnVtYmVyT2ZDaGVja3MgPSBmbGlwVmFyaWF0aW9ucyA/IDMgOiAxO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX2kpIHtcbiAgICAgIHZhciBmaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50cy5maW5kKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICAgICAgdmFyIGNoZWNrcyA9IGNoZWNrc01hcC5nZXQocGxhY2VtZW50KTtcblxuICAgICAgICBpZiAoY2hlY2tzKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrcy5zbGljZSgwLCBfaSkuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZml0dGluZ1BsYWNlbWVudCkge1xuICAgICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBmaXR0aW5nUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBfaSA9IG51bWJlck9mQ2hlY2tzOyBfaSA+IDA7IF9pLS0pIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoX2kpO1xuXG4gICAgICBpZiAoX3JldCA9PT0gXCJicmVha1wiKSBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUucGxhY2VtZW50ICE9PSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwID0gdHJ1ZTtcbiAgICBzdGF0ZS5wbGFjZW1lbnQgPSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgc3RhdGUucmVzZXQgPSB0cnVlO1xuICB9XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdmbGlwJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGZsaXAsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J10sXG4gIGRhdGE6IHtcbiAgICBfc2tpcDogZmFsc2VcbiAgfVxufTsiLCJpbXBvcnQgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QsIHByZXZlbnRlZE9mZnNldHMpIHtcbiAgaWYgKHByZXZlbnRlZE9mZnNldHMgPT09IHZvaWQgMCkge1xuICAgIHByZXZlbnRlZE9mZnNldHMgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQgLSBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCArIHByZXZlbnRlZE9mZnNldHMueCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0ICsgcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoIC0gcHJldmVudGVkT2Zmc2V0cy54XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF0uc29tZShmdW5jdGlvbiAoc2lkZSkge1xuICAgIHJldHVybiBvdmVyZmxvd1tzaWRlXSA+PSAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGlkZShfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBwcmV2ZW50ZWRPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3c7XG4gIHZhciByZWZlcmVuY2VPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gIH0pO1xuICB2YXIgcG9wcGVyQWx0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gIH0pO1xuICB2YXIgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocmVmZXJlbmNlT3ZlcmZsb3csIHJlZmVyZW5jZVJlY3QpO1xuICB2YXIgcG9wcGVyRXNjYXBlT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHBvcHBlckFsdE92ZXJmbG93LCBwb3BwZXJSZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKTtcbiAgdmFyIGlzUmVmZXJlbmNlSGlkZGVuID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyk7XG4gIHZhciBoYXNQb3BwZXJFc2NhcGVkID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHBvcHBlckVzY2FwZU9mZnNldHMpO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0czogcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHM6IHBvcHBlckVzY2FwZU9mZnNldHMsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW46IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgIGhhc1BvcHBlckVzY2FwZWQ6IGhhc1BvcHBlckVzY2FwZWRcbiAgfTtcbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1yZWZlcmVuY2UtaGlkZGVuJzogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgJ2RhdGEtcG9wcGVyLWVzY2FwZWQnOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnaGlkZScsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J10sXG4gIGZuOiBoaWRlXG59OyIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBwbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBzdGFydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEFsdEF4aXMgZnJvbSBcIi4uL3V0aWxzL2dldEFsdEF4aXMuanNcIjtcbmltcG9ydCB7IHdpdGhpbiwgd2l0aGluTWF4Q2xhbXAgfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi4vdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5pbXBvcnQgeyBtaW4gYXMgbWF0aE1pbiwgbWF4IGFzIG1hdGhNYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXIgPSBvcHRpb25zLnRldGhlcixcbiAgICAgIHRldGhlciA9IF9vcHRpb25zJHRldGhlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHRldGhlcixcbiAgICAgIF9vcHRpb25zJHRldGhlck9mZnNldCA9IG9wdGlvbnMudGV0aGVyT2Zmc2V0LFxuICAgICAgdGV0aGVyT2Zmc2V0ID0gX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkdGV0aGVyT2Zmc2V0O1xuICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeVxuICB9KTtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9ICF2YXJpYXRpb247XG4gIHZhciBtYWluQXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGFsdEF4aXMgPSBnZXRBbHRBeGlzKG1haW5BeGlzKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IHRldGhlck9mZnNldChPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHRldGhlck9mZnNldDtcbiAgdmFyIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXRWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHRldGhlck9mZnNldFZhbHVlLFxuICAgIGFsdEF4aXM6IHRldGhlck9mZnNldFZhbHVlXG4gIH0gOiBPYmplY3QuYXNzaWduKHtcbiAgICBtYWluQXhpczogMCxcbiAgICBhbHRBeGlzOiAwXG4gIH0sIHRldGhlck9mZnNldFZhbHVlKTtcbiAgdmFyIG9mZnNldE1vZGlmaWVyU3RhdGUgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldCA/IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0W3N0YXRlLnBsYWNlbWVudF0gOiBudWxsO1xuICB2YXIgZGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQ7XG5cbiAgICB2YXIgbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgICB2YXIgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc107XG4gICAgdmFyIG1pbiA9IG9mZnNldCArIG92ZXJmbG93W21haW5TaWRlXTtcbiAgICB2YXIgbWF4ID0gb2Zmc2V0IC0gb3ZlcmZsb3dbYWx0U2lkZV07XG4gICAgdmFyIGFkZGl0aXZlID0gdGV0aGVyID8gLXBvcHBlclJlY3RbbGVuXSAvIDIgOiAwO1xuICAgIHZhciBtaW5MZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gcmVmZXJlbmNlUmVjdFtsZW5dIDogcG9wcGVyUmVjdFtsZW5dO1xuICAgIHZhciBtYXhMZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gLXBvcHBlclJlY3RbbGVuXSA6IC1yZWZlcmVuY2VSZWN0W2xlbl07IC8vIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgYXJyb3cgaW4gdGhlIGNhbGN1bGF0aW9uIHNvIHRoZSBhcnJvdyBkb2Vzbid0IGdvXG4gICAgLy8gb3V0c2lkZSB0aGUgcmVmZXJlbmNlIGJvdW5kc1xuXG4gICAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICAgIHZhciBhcnJvd1JlY3QgPSB0ZXRoZXIgJiYgYXJyb3dFbGVtZW50ID8gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICAgIHZhciBhcnJvd1BhZGRpbmdPYmplY3QgPSBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10gPyBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10ucGFkZGluZyA6IGdldEZyZXNoU2lkZU9iamVjdCgpO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNaW4gPSBhcnJvd1BhZGRpbmdPYmplY3RbbWFpblNpZGVdO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNYXggPSBhcnJvd1BhZGRpbmdPYmplY3RbYWx0U2lkZV07IC8vIElmIHRoZSByZWZlcmVuY2UgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgYXJyb3cgbGVuZ3RoLCB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaW5jbHVkZSBpdHMgZnVsbCBzaXplIGluIHRoZSBjYWxjdWxhdGlvbi4gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbFxuICAgIC8vIGFuZCBuZWFyIHRoZSBlZGdlIG9mIGEgYm91bmRhcnksIHRoZSBwb3BwZXIgY2FuIG92ZXJmbG93IGV2ZW4gaWYgdGhlXG4gICAgLy8gcmVmZXJlbmNlIGlzIG5vdCBvdmVyZmxvd2luZyBhcyB3ZWxsIChlLmcuIHZpcnR1YWwgZWxlbWVudHMgd2l0aCBub1xuICAgIC8vIHdpZHRoIG9yIGhlaWdodClcblxuICAgIHZhciBhcnJvd0xlbiA9IHdpdGhpbigwLCByZWZlcmVuY2VSZWN0W2xlbl0sIGFycm93UmVjdFtsZW5dKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiAtIGFkZGl0aXZlIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgbWF4T2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gLXJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgKyBhZGRpdGl2ZSArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWF4TGVuICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICB2YXIgY2xpZW50T2Zmc2V0ID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBtYWluQXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDAgOiAwO1xuICAgIHZhciBvZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJCA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbbWFpbkF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkIDogMDtcbiAgICB2YXIgdGV0aGVyTWluID0gb2Zmc2V0ICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICB2YXIgdGV0aGVyTWF4ID0gb2Zmc2V0ICsgbWF4T2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZTtcbiAgICB2YXIgcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKHRldGhlciA/IG1hdGhNaW4obWluLCB0ZXRoZXJNaW4pIDogbWluLCBvZmZzZXQsIHRldGhlciA/IG1hdGhNYXgobWF4LCB0ZXRoZXJNYXgpIDogbWF4KTtcbiAgICBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgfVxuXG4gIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkMjtcblxuICAgIHZhciBfbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gdG9wIDogbGVmdDtcblxuICAgIHZhciBfYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcblxuICAgIHZhciBfb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1thbHRBeGlzXTtcblxuICAgIHZhciBfbGVuID0gYWx0QXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgdmFyIF9taW4gPSBfb2Zmc2V0ICsgb3ZlcmZsb3dbX21haW5TaWRlXTtcblxuICAgIHZhciBfbWF4ID0gX29mZnNldCAtIG92ZXJmbG93W19hbHRTaWRlXTtcblxuICAgIHZhciBpc09yaWdpblNpZGUgPSBbdG9wLCBsZWZ0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVthbHRBeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJDIgOiAwO1xuXG4gICAgdmFyIF90ZXRoZXJNaW4gPSBpc09yaWdpblNpZGUgPyBfbWluIDogX29mZnNldCAtIHJlZmVyZW5jZVJlY3RbX2xlbl0gLSBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcztcblxuICAgIHZhciBfdGV0aGVyTWF4ID0gaXNPcmlnaW5TaWRlID8gX29mZnNldCArIHJlZmVyZW5jZVJlY3RbX2xlbl0gKyBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcyA6IF9tYXg7XG5cbiAgICB2YXIgX3ByZXZlbnRlZE9mZnNldCA9IHRldGhlciAmJiBpc09yaWdpblNpZGUgPyB3aXRoaW5NYXhDbGFtcChfdGV0aGVyTWluLCBfb2Zmc2V0LCBfdGV0aGVyTWF4KSA6IHdpdGhpbih0ZXRoZXIgPyBfdGV0aGVyTWluIDogX21pbiwgX29mZnNldCwgdGV0aGVyID8gX3RldGhlck1heCA6IF9tYXgpO1xuXG4gICAgcG9wcGVyT2Zmc2V0c1thbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVthbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQgLSBfb2Zmc2V0O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogcHJldmVudE92ZXJmbG93LFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEhUTUxFbGVtZW50U2Nyb2xsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRIVE1MRWxlbWVudFNjcm9sbCBmcm9tIFwiLi9nZXRIVE1MRWxlbWVudFNjcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChub2RlKSB7XG4gIGlmIChub2RlID09PSBnZXRXaW5kb3cobm9kZSkgfHwgIWlzSFRNTEVsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gZ2V0V2luZG93U2Nyb2xsKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudFNjcm9sbChub2RlKTtcbiAgfVxufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZVNjcm9sbCBmcm9tIFwiLi9nZXROb2RlU2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNjYWxlZChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IHJvdW5kKHJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcm91bmQocmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCwgaXNGaXhlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59IiwiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07IiwiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG5pbXBvcnQgb2Zmc2V0IGZyb20gXCIuL21vZGlmaWVycy9vZmZzZXQuanNcIjtcbmltcG9ydCBmbGlwIGZyb20gXCIuL21vZGlmaWVycy9mbGlwLmpzXCI7XG5pbXBvcnQgcHJldmVudE92ZXJmbG93IGZyb20gXCIuL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBhcnJvdyBmcm9tIFwiLi9tb2RpZmllcnMvYXJyb3cuanNcIjtcbmltcG9ydCBoaWRlIGZyb20gXCIuL21vZGlmaWVycy9oaWRlLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXMsIG9mZnNldCwgZmxpcCwgcHJldmVudE92ZXJmbG93LCBhcnJvdywgaGlkZV07XG52YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcih7XG4gIGRlZmF1bHRNb2RpZmllcnM6IGRlZmF1bHRNb2RpZmllcnNcbn0pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsiLCIvKiFcbiAgKiBCb290c3RyYXAgdjUuMy44IChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjUgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbmltcG9ydCAqIGFzIFBvcHBlciBmcm9tICdAcG9wcGVyanMvY29yZSc7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vZGF0YS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgZWxlbWVudE1hcCA9IG5ldyBNYXAoKTtcbmNvbnN0IERhdGEgPSB7XG4gIHNldChlbGVtZW50LCBrZXksIGluc3RhbmNlKSB7XG4gICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgZWxlbWVudE1hcC5zZXQoZWxlbWVudCwgbmV3IE1hcCgpKTtcbiAgICB9XG4gICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KTtcblxuICAgIC8vIG1ha2UgaXQgY2xlYXIgd2Ugb25seSB3YW50IG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudFxuICAgIC8vIGNhbiBiZSByZW1vdmVkIGxhdGVyIHdoZW4gbXVsdGlwbGUga2V5L2luc3RhbmNlcyBhcmUgZmluZSB0byBiZSB1c2VkXG4gICAgaWYgKCFpbnN0YW5jZU1hcC5oYXMoa2V5KSAmJiBpbnN0YW5jZU1hcC5zaXplICE9PSAwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihgQm9vdHN0cmFwIGRvZXNuJ3QgYWxsb3cgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudC4gQm91bmQgaW5zdGFuY2U6ICR7QXJyYXkuZnJvbShpbnN0YW5jZU1hcC5rZXlzKCkpWzBdfS5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5zdGFuY2VNYXAuc2V0KGtleSwgaW5zdGFuY2UpO1xuICB9LFxuICBnZXQoZWxlbWVudCwga2V5KSB7XG4gICAgaWYgKGVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gZWxlbWVudE1hcC5nZXQoZWxlbWVudCkuZ2V0KGtleSkgfHwgbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIHJlbW92ZShlbGVtZW50LCBrZXkpIHtcbiAgICBpZiAoIWVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudCk7XG4gICAgaW5zdGFuY2VNYXAuZGVsZXRlKGtleSk7XG5cbiAgICAvLyBmcmVlIHVwIGVsZW1lbnQgcmVmZXJlbmNlcyBpZiB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIGxlZnQgZm9yIGFuIGVsZW1lbnRcbiAgICBpZiAoaW5zdGFuY2VNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgZWxlbWVudE1hcC5kZWxldGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9pbmRleC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE1BWF9VSUQgPSAxMDAwMDAwO1xuY29uc3QgTUlMTElTRUNPTkRTX01VTFRJUExJRVIgPSAxMDAwO1xuY29uc3QgVFJBTlNJVElPTl9FTkQgPSAndHJhbnNpdGlvbmVuZCc7XG5cbi8qKlxuICogUHJvcGVybHkgZXNjYXBlIElEcyBzZWxlY3RvcnMgdG8gaGFuZGxlIHdlaXJkIElEc1xuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5jb25zdCBwYXJzZVNlbGVjdG9yID0gc2VsZWN0b3IgPT4ge1xuICBpZiAoc2VsZWN0b3IgJiYgd2luZG93LkNTUyAmJiB3aW5kb3cuQ1NTLmVzY2FwZSkge1xuICAgIC8vIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IgbmVlZHMgZXNjYXBpbmcgdG8gaGFuZGxlIElEcyAoaHRtbDUrKSBjb250YWluaW5nIGZvciBpbnN0YW5jZSAvXG4gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5yZXBsYWNlKC8jKFteXFxzXCIjJ10rKS9nLCAobWF0Y2gsIGlkKSA9PiBgIyR7Q1NTLmVzY2FwZShpZCl9YCk7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdG9yO1xufTtcblxuLy8gU2hvdXQtb3V0IEFuZ3VzIENyb2xsIChodHRwczovL2dvby5nbC9weHdRR3ApXG5jb25zdCB0b1R5cGUgPSBvYmplY3QgPT4ge1xuICBpZiAob2JqZWN0ID09PSBudWxsIHx8IG9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGAke29iamVjdH1gO1xuICB9XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKTtcbn07XG5cbi8qKlxuICogUHVibGljIFV0aWwgQVBJXG4gKi9cblxuY29uc3QgZ2V0VUlEID0gcHJlZml4ID0+IHtcbiAgZG8ge1xuICAgIHByZWZpeCArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBNQVhfVUlEKTtcbiAgfSB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSk7XG4gIHJldHVybiBwcmVmaXg7XG59O1xuY29uc3QgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBHZXQgdHJhbnNpdGlvbi1kdXJhdGlvbiBvZiB0aGUgZWxlbWVudFxuICBsZXQge1xuICAgIHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICB0cmFuc2l0aW9uRGVsYXlcbiAgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBjb25zdCBmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiA9IE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbik7XG4gIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KTtcblxuICAvLyBSZXR1cm4gMCBpZiBlbGVtZW50IG9yIHRyYW5zaXRpb24gZHVyYXRpb24gaXMgbm90IGZvdW5kXG4gIGlmICghZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gJiYgIWZsb2F0VHJhbnNpdGlvbkRlbGF5KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2UgdGhlIGZpcnN0XG4gIHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbi5zcGxpdCgnLCcpWzBdO1xuICB0cmFuc2l0aW9uRGVsYXkgPSB0cmFuc2l0aW9uRGVsYXkuc3BsaXQoJywnKVswXTtcbiAgcmV0dXJuIChOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KSkgKiBNSUxMSVNFQ09ORFNfTVVMVElQTElFUjtcbn07XG5jb25zdCB0cmlnZ2VyVHJhbnNpdGlvbkVuZCA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFRSQU5TSVRJT05fRU5EKSk7XG59O1xuY29uc3QgaXNFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgaWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiBvYmplY3QuanF1ZXJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgIG9iamVjdCA9IG9iamVjdFswXTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG9iamVjdC5ub2RlVHlwZSAhPT0gJ3VuZGVmaW5lZCc7XG59O1xuY29uc3QgZ2V0RWxlbWVudCA9IG9iamVjdCA9PiB7XG4gIC8vIGl0J3MgYSBqUXVlcnkgb2JqZWN0IG9yIGEgbm9kZSBlbGVtZW50XG4gIGlmIChpc0VsZW1lbnQob2JqZWN0KSkge1xuICAgIHJldHVybiBvYmplY3QuanF1ZXJ5ID8gb2JqZWN0WzBdIDogb2JqZWN0O1xuICB9XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJyAmJiBvYmplY3QubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBhcnNlU2VsZWN0b3Iob2JqZWN0KSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuY29uc3QgaXNWaXNpYmxlID0gZWxlbWVudCA9PiB7XG4gIGlmICghaXNFbGVtZW50KGVsZW1lbnQpIHx8IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZWxlbWVudElzVmlzaWJsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAndmlzaWJsZSc7XG4gIC8vIEhhbmRsZSBgZGV0YWlsc2AgZWxlbWVudCBhcyBpdHMgY29udGVudCBtYXkgZmFsc2llIGFwcGVhciB2aXNpYmxlIHdoZW4gaXQgaXMgY2xvc2VkXG4gIGNvbnN0IGNsb3NlZERldGFpbHMgPSBlbGVtZW50LmNsb3Nlc3QoJ2RldGFpbHM6bm90KFtvcGVuXSknKTtcbiAgaWYgKCFjbG9zZWREZXRhaWxzKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRJc1Zpc2libGU7XG4gIH1cbiAgaWYgKGNsb3NlZERldGFpbHMgIT09IGVsZW1lbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gZWxlbWVudC5jbG9zZXN0KCdzdW1tYXJ5Jyk7XG4gICAgaWYgKHN1bW1hcnkgJiYgc3VtbWFyeS5wYXJlbnROb2RlICE9PSBjbG9zZWREZXRhaWxzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzdW1tYXJ5ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbGVtZW50SXNWaXNpYmxlO1xufTtcbmNvbnN0IGlzRGlzYWJsZWQgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmRpc2FibGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBlbGVtZW50LmRpc2FibGVkO1xuICB9XG4gIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSAhPT0gJ2ZhbHNlJztcbn07XG5jb25zdCBmaW5kU2hhZG93Um9vdCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuICBpZiAodHlwZW9mIGVsZW1lbnQuZ2V0Um9vdE5vZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCByb290ID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuICAgIHJldHVybiByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBudWxsO1xuICB9XG4gIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgLy8gd2hlbiB3ZSBkb24ndCBmaW5kIGEgc2hhZG93IHJvb3RcbiAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKTtcbn07XG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbi8qKlxuICogVHJpY2sgdG8gcmVzdGFydCBhbiBlbGVtZW50J3MgYW5pbWF0aW9uXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB2b2lkXG4gKlxuICogQHNlZSBodHRwczovL3d3dy5oYXJyeXRoZW8uY29tL2Jsb2cvMjAyMS8wMi9yZXN0YXJ0LWEtY3NzLWFuaW1hdGlvbi13aXRoLWphdmFzY3JpcHQvI3Jlc3RhcnRpbmctYS1jc3MtYW5pbWF0aW9uXG4gKi9cbmNvbnN0IHJlZmxvdyA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50Lm9mZnNldEhlaWdodDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbn07XG5jb25zdCBnZXRqUXVlcnkgPSAoKSA9PiB7XG4gIGlmICh3aW5kb3cualF1ZXJ5ICYmICFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgnZGF0YS1icy1uby1qcXVlcnknKSkge1xuICAgIHJldHVybiB3aW5kb3cualF1ZXJ5O1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmNvbnN0IERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MgPSBbXTtcbmNvbnN0IG9uRE9NQ29udGVudExvYWRlZCA9IGNhbGxiYWNrID0+IHtcbiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykge1xuICAgIC8vIGFkZCBsaXN0ZW5lciBvbiB0aGUgZmlyc3QgY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBpcyBpbiBsb2FkaW5nIHN0YXRlXG4gICAgaWYgKCFET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcbmNvbnN0IGlzUlRMID0gKCkgPT4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PT0gJ3J0bCc7XG5jb25zdCBkZWZpbmVKUXVlcnlQbHVnaW4gPSBwbHVnaW4gPT4ge1xuICBvbkRPTUNvbnRlbnRMb2FkZWQoKCkgPT4ge1xuICAgIGNvbnN0ICQgPSBnZXRqUXVlcnkoKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoJCkge1xuICAgICAgY29uc3QgbmFtZSA9IHBsdWdpbi5OQU1FO1xuICAgICAgY29uc3QgSlFVRVJZX05PX0NPTkZMSUNUID0gJC5mbltuYW1lXTtcbiAgICAgICQuZm5bbmFtZV0gPSBwbHVnaW4ualF1ZXJ5SW50ZXJmYWNlO1xuICAgICAgJC5mbltuYW1lXS5Db25zdHJ1Y3RvciA9IHBsdWdpbjtcbiAgICAgICQuZm5bbmFtZV0ubm9Db25mbGljdCA9ICgpID0+IHtcbiAgICAgICAgJC5mbltuYW1lXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICAgICAgcmV0dXJuIHBsdWdpbi5qUXVlcnlJbnRlcmZhY2U7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgZXhlY3V0ZSA9IChwb3NzaWJsZUNhbGxiYWNrLCBhcmdzID0gW10sIGRlZmF1bHRWYWx1ZSA9IHBvc3NpYmxlQ2FsbGJhY2spID0+IHtcbiAgcmV0dXJuIHR5cGVvZiBwb3NzaWJsZUNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gcG9zc2libGVDYWxsYmFjay5jYWxsKC4uLmFyZ3MpIDogZGVmYXVsdFZhbHVlO1xufTtcbmNvbnN0IGV4ZWN1dGVBZnRlclRyYW5zaXRpb24gPSAoY2FsbGJhY2ssIHRyYW5zaXRpb25FbGVtZW50LCB3YWl0Rm9yVHJhbnNpdGlvbiA9IHRydWUpID0+IHtcbiAgaWYgKCF3YWl0Rm9yVHJhbnNpdGlvbikge1xuICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBkdXJhdGlvblBhZGRpbmcgPSA1O1xuICBjb25zdCBlbXVsYXRlZER1cmF0aW9uID0gZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodHJhbnNpdGlvbkVsZW1lbnQpICsgZHVyYXRpb25QYWRkaW5nO1xuICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gIGNvbnN0IGhhbmRsZXIgPSAoe1xuICAgIHRhcmdldFxuICB9KSA9PiB7XG4gICAgaWYgKHRhcmdldCAhPT0gdHJhbnNpdGlvbkVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICB0cmFuc2l0aW9uRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKTtcbiAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgfTtcbiAgdHJhbnNpdGlvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihUUkFOU0lUSU9OX0VORCwgaGFuZGxlcik7XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRWxlbWVudCk7XG4gICAgfVxuICB9LCBlbXVsYXRlZER1cmF0aW9uKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwcmV2aW91cy9uZXh0IGVsZW1lbnQgb2YgYSBsaXN0LlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IGxpc3QgICAgVGhlIGxpc3Qgb2YgZWxlbWVudHNcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50ICAgVGhlIGFjdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gc2hvdWxkR2V0TmV4dCAgIENob29zZSB0byBnZXQgbmV4dCBvciBwcmV2aW91cyBlbGVtZW50XG4gKiBAcGFyYW0gaXNDeWNsZUFsbG93ZWRcbiAqIEByZXR1cm4ge0VsZW1lbnR8ZWxlbX0gVGhlIHByb3BlciBlbGVtZW50XG4gKi9cbmNvbnN0IGdldE5leHRBY3RpdmVFbGVtZW50ID0gKGxpc3QsIGFjdGl2ZUVsZW1lbnQsIHNob3VsZEdldE5leHQsIGlzQ3ljbGVBbGxvd2VkKSA9PiB7XG4gIGNvbnN0IGxpc3RMZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gbGlzdC5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpO1xuXG4gIC8vIGlmIHRoZSBlbGVtZW50IGRvZXMgbm90IGV4aXN0IGluIHRoZSBsaXN0IHJldHVybiBhbiBlbGVtZW50XG4gIC8vIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIGFuZCBpZiBjeWNsZSBpcyBhbGxvd2VkXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gIXNob3VsZEdldE5leHQgJiYgaXNDeWNsZUFsbG93ZWQgPyBsaXN0W2xpc3RMZW5ndGggLSAxXSA6IGxpc3RbMF07XG4gIH1cbiAgaW5kZXggKz0gc2hvdWxkR2V0TmV4dCA/IDEgOiAtMTtcbiAgaWYgKGlzQ3ljbGVBbGxvd2VkKSB7XG4gICAgaW5kZXggPSAoaW5kZXggKyBsaXN0TGVuZ3RoKSAlIGxpc3RMZW5ndGg7XG4gIH1cbiAgcmV0dXJuIGxpc3RbTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGxpc3RMZW5ndGggLSAxKSldO1xufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9ldmVudC1oYW5kbGVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IG5hbWVzcGFjZVJlZ2V4ID0gL1teLl0qKD89XFwuLiopXFwufC4qLztcbmNvbnN0IHN0cmlwTmFtZVJlZ2V4ID0gL1xcLi4qLztcbmNvbnN0IHN0cmlwVWlkUmVnZXggPSAvOjpcXGQrJC87XG5jb25zdCBldmVudFJlZ2lzdHJ5ID0ge307IC8vIEV2ZW50cyBzdG9yYWdlXG5sZXQgdWlkRXZlbnQgPSAxO1xuY29uc3QgY3VzdG9tRXZlbnRzID0ge1xuICBtb3VzZWVudGVyOiAnbW91c2VvdmVyJyxcbiAgbW91c2VsZWF2ZTogJ21vdXNlb3V0J1xufTtcbmNvbnN0IG5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoWydjbGljaycsICdkYmxjbGljaycsICdtb3VzZXVwJywgJ21vdXNlZG93bicsICdjb250ZXh0bWVudScsICdtb3VzZXdoZWVsJywgJ0RPTU1vdXNlU2Nyb2xsJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdtb3VzZW1vdmUnLCAnc2VsZWN0c3RhcnQnLCAnc2VsZWN0ZW5kJywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnb3JpZW50YXRpb25jaGFuZ2UnLCAndG91Y2hzdGFydCcsICd0b3VjaG1vdmUnLCAndG91Y2hlbmQnLCAndG91Y2hjYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlcm1vdmUnLCAncG9pbnRlcnVwJywgJ3BvaW50ZXJsZWF2ZScsICdwb2ludGVyY2FuY2VsJywgJ2dlc3R1cmVzdGFydCcsICdnZXN0dXJlY2hhbmdlJywgJ2dlc3R1cmVlbmQnLCAnZm9jdXMnLCAnYmx1cicsICdjaGFuZ2UnLCAncmVzZXQnLCAnc2VsZWN0JywgJ3N1Ym1pdCcsICdmb2N1c2luJywgJ2ZvY3Vzb3V0JywgJ2xvYWQnLCAndW5sb2FkJywgJ2JlZm9yZXVubG9hZCcsICdyZXNpemUnLCAnbW92ZScsICdET01Db250ZW50TG9hZGVkJywgJ3JlYWR5c3RhdGVjaGFuZ2UnLCAnZXJyb3InLCAnYWJvcnQnLCAnc2Nyb2xsJ10pO1xuXG4vKipcbiAqIFByaXZhdGUgbWV0aG9kc1xuICovXG5cbmZ1bmN0aW9uIG1ha2VFdmVudFVpZChlbGVtZW50LCB1aWQpIHtcbiAgcmV0dXJuIHVpZCAmJiBgJHt1aWR9Ojoke3VpZEV2ZW50Kyt9YCB8fCBlbGVtZW50LnVpZEV2ZW50IHx8IHVpZEV2ZW50Kys7XG59XG5mdW5jdGlvbiBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpIHtcbiAgY29uc3QgdWlkID0gbWFrZUV2ZW50VWlkKGVsZW1lbnQpO1xuICBlbGVtZW50LnVpZEV2ZW50ID0gdWlkO1xuICBldmVudFJlZ2lzdHJ5W3VpZF0gPSBldmVudFJlZ2lzdHJ5W3VpZF0gfHwge307XG4gIHJldHVybiBldmVudFJlZ2lzdHJ5W3VpZF07XG59XG5mdW5jdGlvbiBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG4gICAgaHlkcmF0ZU9iaihldmVudCwge1xuICAgICAgZGVsZWdhdGVUYXJnZXQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgICBpZiAoaGFuZGxlci5vbmVPZmYpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkoZWxlbWVudCwgW2V2ZW50XSk7XG4gIH07XG59XG5mdW5jdGlvbiBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBzZWxlY3RvciwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gICAgZm9yIChsZXQge1xuICAgICAgdGFyZ2V0XG4gICAgfSA9IGV2ZW50OyB0YXJnZXQgJiYgdGFyZ2V0ICE9PSB0aGlzOyB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZSkge1xuICAgICAgZm9yIChjb25zdCBkb21FbGVtZW50IG9mIGRvbUVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50ICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBoeWRyYXRlT2JqKGV2ZW50LCB7XG4gICAgICAgICAgZGVsZWdhdGVUYXJnZXQ6IHRhcmdldFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBzZWxlY3RvciwgZm4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbi5hcHBseSh0YXJnZXQsIFtldmVudF0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRIYW5kbGVyKGV2ZW50cywgY2FsbGFibGUsIGRlbGVnYXRpb25TZWxlY3RvciA9IG51bGwpIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZXZlbnRzKS5maW5kKGV2ZW50ID0+IGV2ZW50LmNhbGxhYmxlID09PSBjYWxsYWJsZSAmJiBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IgPT09IGRlbGVnYXRpb25TZWxlY3Rvcik7XG59XG5mdW5jdGlvbiBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgY29uc3QgaXNEZWxlZ2F0ZWQgPSB0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZyc7XG4gIC8vIFRPRE86IHRvb2x0aXAgcGFzc2VzIGBmYWxzZWAgaW5zdGVhZCBvZiBzZWxlY3Rvciwgc28gd2UgbmVlZCB0byBjaGVja1xuICBjb25zdCBjYWxsYWJsZSA9IGlzRGVsZWdhdGVkID8gZGVsZWdhdGlvbkZ1bmN0aW9uIDogaGFuZGxlciB8fCBkZWxlZ2F0aW9uRnVuY3Rpb247XG4gIGxldCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQob3JpZ2luYWxUeXBlRXZlbnQpO1xuICBpZiAoIW5hdGl2ZUV2ZW50cy5oYXModHlwZUV2ZW50KSkge1xuICAgIHR5cGVFdmVudCA9IG9yaWdpbmFsVHlwZUV2ZW50O1xuICB9XG4gIHJldHVybiBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdO1xufVxuZnVuY3Rpb24gYWRkSGFuZGxlcihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBvbmVPZmYpIHtcbiAgaWYgKHR5cGVvZiBvcmlnaW5hbFR5cGVFdmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pO1xuXG4gIC8vIGluIGNhc2Ugb2YgbW91c2VlbnRlciBvciBtb3VzZWxlYXZlIHdyYXAgdGhlIGhhbmRsZXIgd2l0aGluIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgZm9yIGl0cyBET00gcG9zaXRpb25cbiAgLy8gdGhpcyBwcmV2ZW50cyB0aGUgaGFuZGxlciBmcm9tIGJlaW5nIGRpc3BhdGNoZWQgdGhlIHNhbWUgd2F5IGFzIG1vdXNlb3ZlciBvciBtb3VzZW91dCBkb2VzXG4gIGlmIChvcmlnaW5hbFR5cGVFdmVudCBpbiBjdXN0b21FdmVudHMpIHtcbiAgICBjb25zdCB3cmFwRnVuY3Rpb24gPSBmbiA9PiB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQucmVsYXRlZFRhcmdldCB8fCBldmVudC5yZWxhdGVkVGFyZ2V0ICE9PSBldmVudC5kZWxlZ2F0ZVRhcmdldCAmJiAhZXZlbnQuZGVsZWdhdGVUYXJnZXQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjYWxsYWJsZSA9IHdyYXBGdW5jdGlvbihjYWxsYWJsZSk7XG4gIH1cbiAgY29uc3QgZXZlbnRzID0gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KTtcbiAgY29uc3QgaGFuZGxlcnMgPSBldmVudHNbdHlwZUV2ZW50XSB8fCAoZXZlbnRzW3R5cGVFdmVudF0gPSB7fSk7XG4gIGNvbnN0IHByZXZpb3VzRnVuY3Rpb24gPSBmaW5kSGFuZGxlcihoYW5kbGVycywgY2FsbGFibGUsIGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGwpO1xuICBpZiAocHJldmlvdXNGdW5jdGlvbikge1xuICAgIHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmID0gcHJldmlvdXNGdW5jdGlvbi5vbmVPZmYgJiYgb25lT2ZmO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoY2FsbGFibGUsIG9yaWdpbmFsVHlwZUV2ZW50LnJlcGxhY2UobmFtZXNwYWNlUmVnZXgsICcnKSk7XG4gIGNvbnN0IGZuID0gaXNEZWxlZ2F0ZWQgPyBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBoYW5kbGVyLCBjYWxsYWJsZSkgOiBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGNhbGxhYmxlKTtcbiAgZm4uZGVsZWdhdGlvblNlbGVjdG9yID0gaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbDtcbiAgZm4uY2FsbGFibGUgPSBjYWxsYWJsZTtcbiAgZm4ub25lT2ZmID0gb25lT2ZmO1xuICBmbi51aWRFdmVudCA9IHVpZDtcbiAgaGFuZGxlcnNbdWlkXSA9IGZuO1xuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZUV2ZW50LCBmbiwgaXNEZWxlZ2F0ZWQpO1xufVxuZnVuY3Rpb24gcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKSB7XG4gIGNvbnN0IGZuID0gZmluZEhhbmRsZXIoZXZlbnRzW3R5cGVFdmVudF0sIGhhbmRsZXIsIGRlbGVnYXRpb25TZWxlY3Rvcik7XG4gIGlmICghZm4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIEJvb2xlYW4oZGVsZWdhdGlvblNlbGVjdG9yKSk7XG4gIGRlbGV0ZSBldmVudHNbdHlwZUV2ZW50XVtmbi51aWRFdmVudF07XG59XG5mdW5jdGlvbiByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIG5hbWVzcGFjZSkge1xuICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9O1xuICBmb3IgKGNvbnN0IFtoYW5kbGVyS2V5LCBldmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc3RvcmVFbGVtZW50RXZlbnQpKSB7XG4gICAgaWYgKGhhbmRsZXJLZXkuaW5jbHVkZXMobmFtZXNwYWNlKSkge1xuICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQuY2FsbGFibGUsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3Rvcik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRUeXBlRXZlbnQoZXZlbnQpIHtcbiAgLy8gYWxsb3cgdG8gZ2V0IHRoZSBuYXRpdmUgZXZlbnRzIGZyb20gbmFtZXNwYWNlZCBldmVudHMgKCdjbGljay5icy5idXR0b24nIC0tPiAnY2xpY2snKVxuICBldmVudCA9IGV2ZW50LnJlcGxhY2Uoc3RyaXBOYW1lUmVnZXgsICcnKTtcbiAgcmV0dXJuIGN1c3RvbUV2ZW50c1tldmVudF0gfHwgZXZlbnQ7XG59XG5jb25zdCBFdmVudEhhbmRsZXIgPSB7XG4gIG9uKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIGZhbHNlKTtcbiAgfSxcbiAgb25lKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIHRydWUpO1xuICB9LFxuICBvZmYoZWxlbWVudCwgb3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxUeXBlRXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pO1xuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gdHlwZUV2ZW50ICE9PSBvcmlnaW5hbFR5cGVFdmVudDtcbiAgICBjb25zdCBldmVudHMgPSBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpO1xuICAgIGNvbnN0IHN0b3JlRWxlbWVudEV2ZW50ID0gZXZlbnRzW3R5cGVFdmVudF0gfHwge307XG4gICAgY29uc3QgaXNOYW1lc3BhY2UgPSBvcmlnaW5hbFR5cGVFdmVudC5zdGFydHNXaXRoKCcuJyk7XG4gICAgaWYgKHR5cGVvZiBjYWxsYWJsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIFNpbXBsZXN0IGNhc2U6IGhhbmRsZXIgaXMgcGFzc2VkLCByZW1vdmUgdGhhdCBsaXN0ZW5lciBPTkxZLlxuICAgICAgaWYgKCFPYmplY3Qua2V5cyhzdG9yZUVsZW1lbnRFdmVudCkubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGNhbGxhYmxlLCBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzTmFtZXNwYWNlKSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnRFdmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgIHJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyhlbGVtZW50LCBldmVudHMsIGVsZW1lbnRFdmVudCwgb3JpZ2luYWxUeXBlRXZlbnQuc2xpY2UoMSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXlIYW5kbGVycywgZXZlbnRdIG9mIE9iamVjdC5lbnRyaWVzKHN0b3JlRWxlbWVudEV2ZW50KSkge1xuICAgICAgY29uc3QgaGFuZGxlcktleSA9IGtleUhhbmRsZXJzLnJlcGxhY2Uoc3RyaXBVaWRSZWdleCwgJycpO1xuICAgICAgaWYgKCFpbk5hbWVzcGFjZSB8fCBvcmlnaW5hbFR5cGVFdmVudC5pbmNsdWRlcyhoYW5kbGVyS2V5KSkge1xuICAgICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5jYWxsYWJsZSwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHRyaWdnZXIoZWxlbWVudCwgZXZlbnQsIGFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0ICQgPSBnZXRqUXVlcnkoKTtcbiAgICBjb25zdCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQoZXZlbnQpO1xuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gZXZlbnQgIT09IHR5cGVFdmVudDtcbiAgICBsZXQgalF1ZXJ5RXZlbnQgPSBudWxsO1xuICAgIGxldCBidWJibGVzID0gdHJ1ZTtcbiAgICBsZXQgbmF0aXZlRGlzcGF0Y2ggPSB0cnVlO1xuICAgIGxldCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgaWYgKGluTmFtZXNwYWNlICYmICQpIHtcbiAgICAgIGpRdWVyeUV2ZW50ID0gJC5FdmVudChldmVudCwgYXJncyk7XG4gICAgICAkKGVsZW1lbnQpLnRyaWdnZXIoalF1ZXJ5RXZlbnQpO1xuICAgICAgYnViYmxlcyA9ICFqUXVlcnlFdmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO1xuICAgICAgbmF0aXZlRGlzcGF0Y2ggPSAhalF1ZXJ5RXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTtcbiAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSBqUXVlcnlFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKTtcbiAgICB9XG4gICAgY29uc3QgZXZ0ID0gaHlkcmF0ZU9iaihuZXcgRXZlbnQoZXZlbnQsIHtcbiAgICAgIGJ1YmJsZXMsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgfSksIGFyZ3MpO1xuICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKG5hdGl2ZURpc3BhdGNoKSB7XG4gICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICB9XG4gICAgaWYgKGV2dC5kZWZhdWx0UHJldmVudGVkICYmIGpRdWVyeUV2ZW50KSB7XG4gICAgICBqUXVlcnlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICByZXR1cm4gZXZ0O1xuICB9XG59O1xuZnVuY3Rpb24gaHlkcmF0ZU9iaihvYmosIG1ldGEgPSB7fSkge1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRhKSkge1xuICAgIHRyeSB7XG4gICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZG9tL21hbmlwdWxhdG9yLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodmFsdWUgPT09IE51bWJlcih2YWx1ZSkudG9TdHJpbmcoKSkge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICB9XG4gIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09ICdudWxsJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGFLZXkoa2V5KSB7XG4gIHJldHVybiBrZXkucmVwbGFjZSgvW0EtWl0vZywgY2hyID0+IGAtJHtjaHIudG9Mb3dlckNhc2UoKX1gKTtcbn1cbmNvbnN0IE1hbmlwdWxhdG9yID0ge1xuICBzZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gLCB2YWx1ZSk7XG4gIH0sXG4gIHJlbW92ZURhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCk7XG4gIH0sXG4gIGdldERhdGFBdHRyaWJ1dGVzKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgIGNvbnN0IGJzS2V5cyA9IE9iamVjdC5rZXlzKGVsZW1lbnQuZGF0YXNldCkuZmlsdGVyKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgnYnMnKSAmJiAha2V5LnN0YXJ0c1dpdGgoJ2JzQ29uZmlnJykpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGJzS2V5cykge1xuICAgICAgbGV0IHB1cmVLZXkgPSBrZXkucmVwbGFjZSgvXmJzLywgJycpO1xuICAgICAgcHVyZUtleSA9IHB1cmVLZXkuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBwdXJlS2V5LnNsaWNlKDEpO1xuICAgICAgYXR0cmlidXRlc1twdXJlS2V5XSA9IG5vcm1hbGl6ZURhdGEoZWxlbWVudC5kYXRhc2V0W2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgfSxcbiAgZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXkpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplRGF0YShlbGVtZW50LmdldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gKSk7XG4gIH1cbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2NvbmZpZy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQ29uZmlnIHtcbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHRvIGltcGxlbWVudCB0aGUgc3RhdGljIG1ldGhvZCBcIk5BTUVcIiwgZm9yIGVhY2ggY29tcG9uZW50IScpO1xuICB9XG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0gdGhpcy5fbWVyZ2VDb25maWdPYmooY29uZmlnKTtcbiAgICBjb25maWcgPSB0aGlzLl9jb25maWdBZnRlck1lcmdlKGNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9tZXJnZUNvbmZpZ09iaihjb25maWcsIGVsZW1lbnQpIHtcbiAgICBjb25zdCBqc29uQ29uZmlnID0gaXNFbGVtZW50KGVsZW1lbnQpID8gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCAnY29uZmlnJykgOiB7fTsgLy8gdHJ5IHRvIHBhcnNlXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LFxuICAgICAgLi4uKHR5cGVvZiBqc29uQ29uZmlnID09PSAnb2JqZWN0JyA/IGpzb25Db25maWcgOiB7fSksXG4gICAgICAuLi4oaXNFbGVtZW50KGVsZW1lbnQpID8gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkgOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9O1xuICB9XG4gIF90eXBlQ2hlY2tDb25maWcoY29uZmlnLCBjb25maWdUeXBlcyA9IHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpIHtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgZXhwZWN0ZWRUeXBlc10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnVHlwZXMpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1twcm9wZXJ0eV07XG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSBpc0VsZW1lbnQodmFsdWUpID8gJ2VsZW1lbnQnIDogdG9UeXBlKHZhbHVlKTtcbiAgICAgIGlmICghbmV3IFJlZ0V4cChleHBlY3RlZFR5cGVzKS50ZXN0KHZhbHVlVHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUUudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcIiR7cHJvcGVydHl9XCIgcHJvdmlkZWQgdHlwZSBcIiR7dmFsdWVUeXBlfVwiIGJ1dCBleHBlY3RlZCB0eXBlIFwiJHtleHBlY3RlZFR5cGVzfVwiLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgYmFzZS1jb21wb25lbnQuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgVkVSU0lPTiA9ICc1LjMuOCc7XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEJhc2VDb21wb25lbnQgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIGVsZW1lbnQgPSBnZXRFbGVtZW50KGVsZW1lbnQpO1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICBEYXRhLnNldCh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBkaXNwb3NlKCkge1xuICAgIERhdGEucmVtb3ZlKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVkpO1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9LRVkpO1xuICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7XG4gICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX3F1ZXVlQ2FsbGJhY2soY2FsbGJhY2ssIGVsZW1lbnQsIGlzQW5pbWF0ZWQgPSB0cnVlKSB7XG4gICAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgZWxlbWVudCwgaXNBbmltYXRlZCk7XG4gIH1cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcsIHRoaXMuX2VsZW1lbnQpO1xuICAgIGNvbmZpZyA9IHRoaXMuX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKTtcbiAgICB0aGlzLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBnZXRJbnN0YW5jZShlbGVtZW50KSB7XG4gICAgcmV0dXJuIERhdGEuZ2V0KGdldEVsZW1lbnQoZWxlbWVudCksIHRoaXMuREFUQV9LRVkpO1xuICB9XG4gIHN0YXRpYyBnZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIGNvbmZpZyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2UoZWxlbWVudCkgfHwgbmV3IHRoaXMoZWxlbWVudCwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgcmV0dXJuIFZFUlNJT047XG4gIH1cbiAgc3RhdGljIGdldCBEQVRBX0tFWSgpIHtcbiAgICByZXR1cm4gYGJzLiR7dGhpcy5OQU1FfWA7XG4gIH1cbiAgc3RhdGljIGdldCBFVkVOVF9LRVkoKSB7XG4gICAgcmV0dXJuIGAuJHt0aGlzLkRBVEFfS0VZfWA7XG4gIH1cbiAgc3RhdGljIGV2ZW50TmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIGAke25hbWV9JHt0aGlzLkVWRU5UX0tFWX1gO1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vc2VsZWN0b3ItZW5naW5lLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgZ2V0U2VsZWN0b3IgPSBlbGVtZW50ID0+IHtcbiAgbGV0IHNlbGVjdG9yID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdGFyZ2V0Jyk7XG4gIGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICcjJykge1xuICAgIGxldCBocmVmQXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblxuICAgIC8vIFRoZSBvbmx5IHZhbGlkIGNvbnRlbnQgdGhhdCBjb3VsZCBkb3VibGUgYXMgYSBzZWxlY3RvciBhcmUgSURzIG9yIGNsYXNzZXMsXG4gICAgLy8gc28gZXZlcnl0aGluZyBzdGFydGluZyB3aXRoIGAjYCBvciBgLmAuIElmIGEgXCJyZWFsXCIgVVJMIGlzIHVzZWQgYXMgdGhlIHNlbGVjdG9yLFxuICAgIC8vIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCB3aWxsIHJpZ2h0ZnVsbHkgY29tcGxhaW4gaXQgaXMgaW52YWxpZC5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8zMjI3M1xuICAgIGlmICghaHJlZkF0dHJpYnV0ZSB8fCAhaHJlZkF0dHJpYnV0ZS5pbmNsdWRlcygnIycpICYmICFocmVmQXR0cmlidXRlLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gSnVzdCBpbiBjYXNlIHNvbWUgQ01TIHB1dHMgb3V0IGEgZnVsbCBVUkwgd2l0aCB0aGUgYW5jaG9yIGFwcGVuZGVkXG4gICAgaWYgKGhyZWZBdHRyaWJ1dGUuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHJpYnV0ZS5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgIGhyZWZBdHRyaWJ1dGUgPSBgIyR7aHJlZkF0dHJpYnV0ZS5zcGxpdCgnIycpWzFdfWA7XG4gICAgfVxuICAgIHNlbGVjdG9yID0gaHJlZkF0dHJpYnV0ZSAmJiBocmVmQXR0cmlidXRlICE9PSAnIycgPyBocmVmQXR0cmlidXRlLnRyaW0oKSA6IG51bGw7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdG9yID8gc2VsZWN0b3Iuc3BsaXQoJywnKS5tYXAoc2VsID0+IHBhcnNlU2VsZWN0b3Ioc2VsKSkuam9pbignLCcpIDogbnVsbDtcbn07XG5jb25zdCBTZWxlY3RvckVuZ2luZSA9IHtcbiAgZmluZChzZWxlY3RvciwgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiBbXS5jb25jYXQoLi4uRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbC5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKSk7XG4gIH0sXG4gIGZpbmRPbmUoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3Rvci5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKTtcbiAgfSxcbiAgY2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLmVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihjaGlsZCA9PiBjaGlsZC5tYXRjaGVzKHNlbGVjdG9yKSk7XG4gIH0sXG4gIHBhcmVudHMoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCBwYXJlbnRzID0gW107XG4gICAgbGV0IGFuY2VzdG9yID0gZWxlbWVudC5wYXJlbnROb2RlLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgcGFyZW50cy5wdXNoKGFuY2VzdG9yKTtcbiAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZS5jbG9zZXN0KHNlbGVjdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG4gIH0sXG4gIHByZXYoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBsZXQgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgd2hpbGUgKHByZXZpb3VzKSB7XG4gICAgICBpZiAocHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtwcmV2aW91c107XG4gICAgICB9XG4gICAgICBwcmV2aW91cyA9IHByZXZpb3VzLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfSxcbiAgLy8gVE9ETzogdGhpcyBpcyBub3cgdW51c2VkOyByZW1vdmUgbGF0ZXIgYWxvbmcgd2l0aCBwcmV2KClcbiAgbmV4dChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGxldCBuZXh0ID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgd2hpbGUgKG5leHQpIHtcbiAgICAgIGlmIChuZXh0Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBbbmV4dF07XG4gICAgICB9XG4gICAgICBuZXh0ID0gbmV4dC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfSxcbiAgZm9jdXNhYmxlQ2hpbGRyZW4oZWxlbWVudCkge1xuICAgIGNvbnN0IGZvY3VzYWJsZXMgPSBbJ2EnLCAnYnV0dG9uJywgJ2lucHV0JywgJ3RleHRhcmVhJywgJ3NlbGVjdCcsICdkZXRhaWxzJywgJ1t0YWJpbmRleF0nLCAnW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nXS5tYXAoc2VsZWN0b3IgPT4gYCR7c2VsZWN0b3J9Om5vdChbdGFiaW5kZXhePVwiLVwiXSlgKS5qb2luKCcsJyk7XG4gICAgcmV0dXJuIHRoaXMuZmluZChmb2N1c2FibGVzLCBlbGVtZW50KS5maWx0ZXIoZWwgPT4gIWlzRGlzYWJsZWQoZWwpICYmIGlzVmlzaWJsZShlbCkpO1xuICB9LFxuICBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yKGVsZW1lbnQpO1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IpID8gc2VsZWN0b3IgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KTtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yKSA6IG51bGw7XG4gIH0sXG4gIGdldE11bHRpcGxlRWxlbWVudHNGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgcmV0dXJuIHNlbGVjdG9yID8gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvcikgOiBbXTtcbiAgfVxufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IGVuYWJsZURpc21pc3NUcmlnZ2VyID0gKGNvbXBvbmVudCwgbWV0aG9kID0gJ2hpZGUnKSA9PiB7XG4gIGNvbnN0IGNsaWNrRXZlbnQgPSBgY2xpY2suZGlzbWlzcyR7Y29tcG9uZW50LkVWRU5UX0tFWX1gO1xuICBjb25zdCBuYW1lID0gY29tcG9uZW50Lk5BTUU7XG4gIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgY2xpY2tFdmVudCwgYFtkYXRhLWJzLWRpc21pc3M9XCIke25hbWV9XCJdYCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKSB8fCB0aGlzLmNsb3Nlc3QoYC4ke25hbWV9YCk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuXG4gICAgLy8gTWV0aG9kIGFyZ3VtZW50IGlzIGxlZnQsIGZvciBBbGVydCBhbmQgb25seSwgYXMgaXQgZG9lc24ndCBpbXBsZW1lbnQgdGhlICdoaWRlJyBtZXRob2RcbiAgICBpbnN0YW5jZVttZXRob2RdKCk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGFsZXJ0LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkZiA9ICdhbGVydCc7XG5jb25zdCBEQVRBX0tFWSRhID0gJ2JzLmFsZXJ0JztcbmNvbnN0IEVWRU5UX0tFWSRiID0gYC4ke0RBVEFfS0VZJGF9YDtcbmNvbnN0IEVWRU5UX0NMT1NFID0gYGNsb3NlJHtFVkVOVF9LRVkkYn1gO1xuY29uc3QgRVZFTlRfQ0xPU0VEID0gYGNsb3NlZCR7RVZFTlRfS0VZJGJ9YDtcbmNvbnN0IENMQVNTX05BTUVfRkFERSQ1ID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDggPSAnc2hvdyc7XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEFsZXJ0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGY7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgY2xvc2UoKSB7XG4gICAgY29uc3QgY2xvc2VFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFKTtcbiAgICBpZiAoY2xvc2VFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckOCk7XG4gICAgY29uc3QgaXNBbmltYXRlZCA9IHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQ1KTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHRoaXMuX2Rlc3Ryb3lFbGVtZW50KCksIHRoaXMuX2VsZW1lbnQsIGlzQW5pbWF0ZWQpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZGVzdHJveUVsZW1lbnQoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKTtcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTE9TRUQpO1xuICAgIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQWxlcnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoQWxlcnQsICdjbG9zZScpO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihBbGVydCk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBidXR0b24uanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRlID0gJ2J1dHRvbic7XG5jb25zdCBEQVRBX0tFWSQ5ID0gJ2JzLmJ1dHRvbic7XG5jb25zdCBFVkVOVF9LRVkkYSA9IGAuJHtEQVRBX0tFWSQ5fWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkNiA9ICcuZGF0YS1hcGknO1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUkMyA9ICdhY3RpdmUnO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkNSA9ICdbZGF0YS1icy10b2dnbGU9XCJidXR0b25cIl0nO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNiA9IGBjbGljayR7RVZFTlRfS0VZJGF9JHtEQVRBX0FQSV9LRVkkNn1gO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBCdXR0b24gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkZTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUoKSB7XG4gICAgLy8gVG9nZ2xlIGNsYXNzIGFuZCBzeW5jIHRoZSBgYXJpYS1wcmVzc2VkYCBhdHRyaWJ1dGUgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBgLnRvZ2dsZSgpYCBtZXRob2RcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKENMQVNTX05BTUVfQUNUSVZFJDMpKTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IEJ1dHRvbi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpO1xuICAgICAgaWYgKGNvbmZpZyA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNiwgU0VMRUNUT1JfREFUQV9UT0dHTEUkNSwgZXZlbnQgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBjb25zdCBidXR0b24gPSBldmVudC50YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ1KTtcbiAgY29uc3QgZGF0YSA9IEJ1dHRvbi5nZXRPckNyZWF0ZUluc3RhbmNlKGJ1dHRvbik7XG4gIGRhdGEudG9nZ2xlKCk7XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQnV0dG9uKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvc3dpcGUuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRkID0gJ3N3aXBlJztcbmNvbnN0IEVWRU5UX0tFWSQ5ID0gJy5icy5zd2lwZSc7XG5jb25zdCBFVkVOVF9UT1VDSFNUQVJUID0gYHRvdWNoc3RhcnQke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBFVkVOVF9UT1VDSE1PVkUgPSBgdG91Y2htb3ZlJHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgRVZFTlRfVE9VQ0hFTkQgPSBgdG91Y2hlbmQke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBFVkVOVF9QT0lOVEVSRE9XTiA9IGBwb2ludGVyZG93biR7RVZFTlRfS0VZJDl9YDtcbmNvbnN0IEVWRU5UX1BPSU5URVJVUCA9IGBwb2ludGVydXAke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBQT0lOVEVSX1RZUEVfVE9VQ0ggPSAndG91Y2gnO1xuY29uc3QgUE9JTlRFUl9UWVBFX1BFTiA9ICdwZW4nO1xuY29uc3QgQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UID0gJ3BvaW50ZXItZXZlbnQnO1xuY29uc3QgU1dJUEVfVEhSRVNIT0xEID0gNDA7XG5jb25zdCBEZWZhdWx0JGMgPSB7XG4gIGVuZENhbGxiYWNrOiBudWxsLFxuICBsZWZ0Q2FsbGJhY2s6IG51bGwsXG4gIHJpZ2h0Q2FsbGJhY2s6IG51bGxcbn07XG5jb25zdCBEZWZhdWx0VHlwZSRjID0ge1xuICBlbmRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIGxlZnRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIHJpZ2h0Q2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTd2lwZSBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFTd2lwZS5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2RlbHRhWCA9IDA7XG4gICAgdGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMgPSBCb29sZWFuKHdpbmRvdy5Qb2ludGVyRXZlbnQpO1xuICAgIHRoaXMuX2luaXRFdmVudHMoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JGM7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkYztcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkZDtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBkaXNwb3NlKCkge1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZJDkpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfc3RhcnQoZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQuY2xpZW50WDtcbiAgICB9XG4gIH1cbiAgX2VuZChldmVudCkge1xuICAgIGlmICh0aGlzLl9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuX2RlbHRhWDtcbiAgICB9XG4gICAgdGhpcy5faGFuZGxlU3dpcGUoKTtcbiAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5lbmRDYWxsYmFjayk7XG4gIH1cbiAgX21vdmUoZXZlbnQpIHtcbiAgICB0aGlzLl9kZWx0YVggPSBldmVudC50b3VjaGVzICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMSA/IDAgOiBldmVudC50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9kZWx0YVg7XG4gIH1cbiAgX2hhbmRsZVN3aXBlKCkge1xuICAgIGNvbnN0IGFic0RlbHRhWCA9IE1hdGguYWJzKHRoaXMuX2RlbHRhWCk7XG4gICAgaWYgKGFic0RlbHRhWCA8PSBTV0lQRV9USFJFU0hPTEQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGlyZWN0aW9uID0gYWJzRGVsdGFYIC8gdGhpcy5fZGVsdGFYO1xuICAgIHRoaXMuX2RlbHRhWCA9IDA7XG4gICAgaWYgKCFkaXJlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhlY3V0ZShkaXJlY3Rpb24gPiAwID8gdGhpcy5fY29uZmlnLnJpZ2h0Q2FsbGJhY2sgOiB0aGlzLl9jb25maWcubGVmdENhbGxiYWNrKTtcbiAgfVxuICBfaW5pdEV2ZW50cygpIHtcbiAgICBpZiAodGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSRE9XTiwgZXZlbnQgPT4gdGhpcy5fc3RhcnQoZXZlbnQpKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSVVAsIGV2ZW50ID0+IHRoaXMuX2VuZChldmVudCkpO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSFNUQVJULCBldmVudCA9PiB0aGlzLl9zdGFydChldmVudCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1RPVUNITU9WRSwgZXZlbnQgPT4gdGhpcy5fbW92ZShldmVudCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1RPVUNIRU5ELCBldmVudCA9PiB0aGlzLl9lbmQoZXZlbnQpKTtcbiAgICB9XG4gIH1cbiAgX2V2ZW50SXNQb2ludGVyUGVuVG91Y2goZXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMgJiYgKGV2ZW50LnBvaW50ZXJUeXBlID09PSBQT0lOVEVSX1RZUEVfUEVOIHx8IGV2ZW50LnBvaW50ZXJUeXBlID09PSBQT0lOVEVSX1RZUEVfVE9VQ0gpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBpc1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDA7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGNhcm91c2VsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkYyA9ICdjYXJvdXNlbCc7XG5jb25zdCBEQVRBX0tFWSQ4ID0gJ2JzLmNhcm91c2VsJztcbmNvbnN0IEVWRU5UX0tFWSQ4ID0gYC4ke0RBVEFfS0VZJDh9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQ1ID0gJy5kYXRhLWFwaSc7XG5jb25zdCBBUlJPV19MRUZUX0tFWSQxID0gJ0Fycm93TGVmdCc7XG5jb25zdCBBUlJPV19SSUdIVF9LRVkkMSA9ICdBcnJvd1JpZ2h0JztcbmNvbnN0IFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgPSA1MDA7IC8vIFRpbWUgZm9yIG1vdXNlIGNvbXBhdCBldmVudHMgdG8gZmlyZSBhZnRlciB0b3VjaFxuXG5jb25zdCBPUkRFUl9ORVhUID0gJ25leHQnO1xuY29uc3QgT1JERVJfUFJFViA9ICdwcmV2JztcbmNvbnN0IERJUkVDVElPTl9MRUZUID0gJ2xlZnQnO1xuY29uc3QgRElSRUNUSU9OX1JJR0hUID0gJ3JpZ2h0JztcbmNvbnN0IEVWRU5UX1NMSURFID0gYHNsaWRlJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfU0xJRCA9IGBzbGlkJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTiQxID0gYGtleWRvd24ke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9NT1VTRUVOVEVSJDEgPSBgbW91c2VlbnRlciR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX01PVVNFTEVBVkUkMSA9IGBtb3VzZWxlYXZlJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfRFJBR19TVEFSVCA9IGBkcmFnc3RhcnQke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJJDMgPSBgbG9hZCR7RVZFTlRfS0VZJDh9JHtEQVRBX0FQSV9LRVkkNX1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNSA9IGBjbGljayR7RVZFTlRfS0VZJDh9JHtEQVRBX0FQSV9LRVkkNX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9DQVJPVVNFTCA9ICdjYXJvdXNlbCc7XG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSQyID0gJ2FjdGl2ZSc7XG5jb25zdCBDTEFTU19OQU1FX1NMSURFID0gJ3NsaWRlJztcbmNvbnN0IENMQVNTX05BTUVfRU5EID0gJ2Nhcm91c2VsLWl0ZW0tZW5kJztcbmNvbnN0IENMQVNTX05BTUVfU1RBUlQgPSAnY2Fyb3VzZWwtaXRlbS1zdGFydCc7XG5jb25zdCBDTEFTU19OQU1FX05FWFQgPSAnY2Fyb3VzZWwtaXRlbS1uZXh0JztcbmNvbnN0IENMQVNTX05BTUVfUFJFViA9ICdjYXJvdXNlbC1pdGVtLXByZXYnO1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFID0gJy5hY3RpdmUnO1xuY29uc3QgU0VMRUNUT1JfSVRFTSA9ICcuY2Fyb3VzZWwtaXRlbSc7XG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkVfSVRFTSA9IFNFTEVDVE9SX0FDVElWRSArIFNFTEVDVE9SX0lURU07XG5jb25zdCBTRUxFQ1RPUl9JVEVNX0lNRyA9ICcuY2Fyb3VzZWwtaXRlbSBpbWcnO1xuY29uc3QgU0VMRUNUT1JfSU5ESUNBVE9SUyA9ICcuY2Fyb3VzZWwtaW5kaWNhdG9ycyc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NMSURFID0gJ1tkYXRhLWJzLXNsaWRlXSwgW2RhdGEtYnMtc2xpZGUtdG9dJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfUklERSA9ICdbZGF0YS1icy1yaWRlPVwiY2Fyb3VzZWxcIl0nO1xuY29uc3QgS0VZX1RPX0RJUkVDVElPTiA9IHtcbiAgW0FSUk9XX0xFRlRfS0VZJDFdOiBESVJFQ1RJT05fUklHSFQsXG4gIFtBUlJPV19SSUdIVF9LRVkkMV06IERJUkVDVElPTl9MRUZUXG59O1xuY29uc3QgRGVmYXVsdCRiID0ge1xuICBpbnRlcnZhbDogNTAwMCxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHBhdXNlOiAnaG92ZXInLFxuICByaWRlOiBmYWxzZSxcbiAgdG91Y2g6IHRydWUsXG4gIHdyYXA6IHRydWVcbn07XG5jb25zdCBEZWZhdWx0VHlwZSRiID0ge1xuICBpbnRlcnZhbDogJyhudW1iZXJ8Ym9vbGVhbiknLFxuICAvLyBUT0RPOnY2IHJlbW92ZSBib29sZWFuIHN1cHBvcnRcbiAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgcGF1c2U6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgcmlkZTogJyhib29sZWFufHN0cmluZyknLFxuICB0b3VjaDogJ2Jvb2xlYW4nLFxuICB3cmFwOiAnYm9vbGVhbidcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENhcm91c2VsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLl9zd2lwZUhlbHBlciA9IG51bGw7XG4gICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0lORElDQVRPUlMsIHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5yaWRlID09PSBDTEFTU19OQU1FX0NBUk9VU0VMKSB7XG4gICAgICB0aGlzLmN5Y2xlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkYjtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSRiO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRjO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIG5leHQoKSB7XG4gICAgdGhpcy5fc2xpZGUoT1JERVJfTkVYVCk7XG4gIH1cbiAgbmV4dFdoZW5WaXNpYmxlKCkge1xuICAgIC8vIEZJWE1FIFRPRE8gdXNlIGBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGVgXG4gICAgLy8gRG9uJ3QgY2FsbCBuZXh0IHdoZW4gdGhlIHBhZ2UgaXNuJ3QgdmlzaWJsZVxuICAgIC8vIG9yIHRoZSBjYXJvdXNlbCBvciBpdHMgcGFyZW50IGlzbid0IHZpc2libGVcbiAgICBpZiAoIWRvY3VtZW50LmhpZGRlbiAmJiBpc1Zpc2libGUodGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cbiAgfVxuICBwcmV2KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX1BSRVYpO1xuICB9XG4gIHBhdXNlKCkge1xuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIHRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhckludGVydmFsKCk7XG4gIH1cbiAgY3ljbGUoKSB7XG4gICAgdGhpcy5fY2xlYXJJbnRlcnZhbCgpO1xuICAgIHRoaXMuX3VwZGF0ZUludGVydmFsKCk7XG4gICAgdGhpcy5faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLm5leHRXaGVuVmlzaWJsZSgpLCB0aGlzLl9jb25maWcuaW50ZXJ2YWwpO1xuICB9XG4gIF9tYXliZUVuYWJsZUN5Y2xlKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnJpZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLmN5Y2xlKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmN5Y2xlKCk7XG4gIH1cbiAgdG8oaW5kZXgpIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2dldEl0ZW1zKCk7XG4gICAgaWYgKGluZGV4ID4gaXRlbXMubGVuZ3RoIC0gMSB8fCBpbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLnRvKGluZGV4KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2dldEFjdGl2ZSgpKTtcbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IGluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9yZGVyID0gaW5kZXggPiBhY3RpdmVJbmRleCA/IE9SREVSX05FWFQgOiBPUkRFUl9QUkVWO1xuICAgIHRoaXMuX3NsaWRlKG9yZGVyLCBpdGVtc1tpbmRleF0pO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMuX3N3aXBlSGVscGVyKSB7XG4gICAgICB0aGlzLl9zd2lwZUhlbHBlci5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLmRlZmF1bHRJbnRlcnZhbCA9IGNvbmZpZy5pbnRlcnZhbDtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTiQxLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdob3ZlcicpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRUVOVEVSJDEsICgpID0+IHRoaXMucGF1c2UoKSk7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VMRUFWRSQxLCAoKSA9PiB0aGlzLl9tYXliZUVuYWJsZUN5Y2xlKCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnRvdWNoICYmIFN3aXBlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9XG4gIH1cbiAgX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgZm9yIChjb25zdCBpbWcgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JVEVNX0lNRywgdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbihpbWcsIEVWRU5UX0RSQUdfU1RBUlQsIGV2ZW50ID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpO1xuICAgIH1cbiAgICBjb25zdCBlbmRDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgIT09ICdob3ZlcicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBpdCdzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2UsIG1vdXNlZW50ZXIvbGVhdmUgYXJlIGZpcmVkIGFzXG4gICAgICAvLyBwYXJ0IG9mIHRoZSBtb3VzZSBjb21wYXRpYmlsaXR5IGV2ZW50cyBvbiBmaXJzdCB0YXAgLSB0aGUgY2Fyb3VzZWxcbiAgICAgIC8vIHdvdWxkIHN0b3AgY3ljbGluZyB1bnRpbCB1c2VyIHRhcHBlZCBvdXQgb2YgaXQ7XG4gICAgICAvLyBoZXJlLCB3ZSBsaXN0ZW4gZm9yIHRvdWNoZW5kLCBleHBsaWNpdGx5IHBhdXNlIHRoZSBjYXJvdXNlbFxuICAgICAgLy8gKGFzIGlmIGl0J3MgdGhlIHNlY29uZCB0aW1lIHdlIHRhcCBvbiBpdCwgbW91c2VlbnRlciBjb21wYXQgZXZlbnRcbiAgICAgIC8vIGlzIE5PVCBmaXJlZCkgYW5kIGFmdGVyIGEgdGltZW91dCAodG8gYWxsb3cgZm9yIG1vdXNlIGNvbXBhdGliaWxpdHlcbiAgICAgIC8vIGV2ZW50cyB0byBmaXJlKSB3ZSBleHBsaWNpdGx5IHJlc3RhcnQgY3ljbGluZ1xuXG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICBpZiAodGhpcy50b3VjaFRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG91Y2hUaW1lb3V0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLl9tYXliZUVuYWJsZUN5Y2xlKCksIFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgKyB0aGlzLl9jb25maWcuaW50ZXJ2YWwpO1xuICAgIH07XG4gICAgY29uc3Qgc3dpcGVDb25maWcgPSB7XG4gICAgICBsZWZ0Q2FsbGJhY2s6ICgpID0+IHRoaXMuX3NsaWRlKHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoRElSRUNUSU9OX0xFRlQpKSxcbiAgICAgIHJpZ2h0Q2FsbGJhY2s6ICgpID0+IHRoaXMuX3NsaWRlKHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoRElSRUNUSU9OX1JJR0hUKSksXG4gICAgICBlbmRDYWxsYmFjazogZW5kQ2FsbEJhY2tcbiAgICB9O1xuICAgIHRoaXMuX3N3aXBlSGVscGVyID0gbmV3IFN3aXBlKHRoaXMuX2VsZW1lbnQsIHN3aXBlQ29uZmlnKTtcbiAgfVxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaXJlY3Rpb24gPSBLRVlfVE9fRElSRUNUSU9OW2V2ZW50LmtleV07XG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuX3NsaWRlKHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoZGlyZWN0aW9uKSk7XG4gICAgfVxuICB9XG4gIF9nZXRJdGVtSW5kZXgoZWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtcygpLmluZGV4T2YoZWxlbWVudCk7XG4gIH1cbiAgX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQoaW5kZXgpIHtcbiAgICBpZiAoIXRoaXMuX2luZGljYXRvcnNFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUluZGljYXRvciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFLCB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCk7XG4gICAgYWN0aXZlSW5kaWNhdG9yLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUkMik7XG4gICAgYWN0aXZlSW5kaWNhdG9yLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50Jyk7XG4gICAgY29uc3QgbmV3QWN0aXZlSW5kaWNhdG9yID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShgW2RhdGEtYnMtc2xpZGUtdG89XCIke2luZGV4fVwiXWAsIHRoaXMuX2luZGljYXRvcnNFbGVtZW50KTtcbiAgICBpZiAobmV3QWN0aXZlSW5kaWNhdG9yKSB7XG4gICAgICBuZXdBY3RpdmVJbmRpY2F0b3IuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSQyKTtcbiAgICAgIG5ld0FjdGl2ZUluZGljYXRvci5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsICd0cnVlJyk7XG4gICAgfVxuICB9XG4gIF91cGRhdGVJbnRlcnZhbCgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fYWN0aXZlRWxlbWVudCB8fCB0aGlzLl9nZXRBY3RpdmUoKTtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudEludGVydmFsID0gTnVtYmVyLnBhcnNlSW50KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLWludGVydmFsJyksIDEwKTtcbiAgICB0aGlzLl9jb25maWcuaW50ZXJ2YWwgPSBlbGVtZW50SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbDtcbiAgfVxuICBfc2xpZGUob3JkZXIsIGVsZW1lbnQgPSBudWxsKSB7XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdGhpcy5fZ2V0QWN0aXZlKCk7XG4gICAgY29uc3QgaXNOZXh0ID0gb3JkZXIgPT09IE9SREVSX05FWFQ7XG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBlbGVtZW50IHx8IGdldE5leHRBY3RpdmVFbGVtZW50KHRoaXMuX2dldEl0ZW1zKCksIGFjdGl2ZUVsZW1lbnQsIGlzTmV4dCwgdGhpcy5fY29uZmlnLndyYXApO1xuICAgIGlmIChuZXh0RWxlbWVudCA9PT0gYWN0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0RWxlbWVudEluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KG5leHRFbGVtZW50KTtcbiAgICBjb25zdCB0cmlnZ2VyRXZlbnQgPSBldmVudE5hbWUgPT4ge1xuICAgICAgcmV0dXJuIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIGV2ZW50TmFtZSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiBuZXh0RWxlbWVudCxcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl9vcmRlclRvRGlyZWN0aW9uKG9yZGVyKSxcbiAgICAgICAgZnJvbTogdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpLFxuICAgICAgICB0bzogbmV4dEVsZW1lbnRJbmRleFxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzbGlkZUV2ZW50ID0gdHJpZ2dlckV2ZW50KEVWRU5UX1NMSURFKTtcbiAgICBpZiAoc2xpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCAhbmV4dEVsZW1lbnQpIHtcbiAgICAgIC8vIFNvbWUgd2VpcmRuZXNzIGlzIGhhcHBlbmluZywgc28gd2UgYmFpbFxuICAgICAgLy8gVE9ETzogY2hhbmdlIHRlc3RzIHRoYXQgdXNlIGVtcHR5IGRpdnMgdG8gYXZvaWQgdGhpcyBjaGVja1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc0N5Y2xpbmcgPSBCb29sZWFuKHRoaXMuX2ludGVydmFsKTtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5faXNTbGlkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KG5leHRFbGVtZW50SW5kZXgpO1xuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBuZXh0RWxlbWVudDtcbiAgICBjb25zdCBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IGlzTmV4dCA/IENMQVNTX05BTUVfU1RBUlQgOiBDTEFTU19OQU1FX0VORDtcbiAgICBjb25zdCBvcmRlckNsYXNzTmFtZSA9IGlzTmV4dCA/IENMQVNTX05BTUVfTkVYVCA6IENMQVNTX05BTUVfUFJFVjtcbiAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKG9yZGVyQ2xhc3NOYW1lKTtcbiAgICByZWZsb3cobmV4dEVsZW1lbnQpO1xuICAgIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZGlyZWN0aW9uYWxDbGFzc05hbWUsIG9yZGVyQ2xhc3NOYW1lKTtcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMik7XG4gICAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUkMiwgb3JkZXJDbGFzc05hbWUsIGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgdHJpZ2dlckV2ZW50KEVWRU5UX1NMSUQpO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxCYWNrLCBhY3RpdmVFbGVtZW50LCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgIHRoaXMuY3ljbGUoKTtcbiAgICB9XG4gIH1cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0xJREUpO1xuICB9XG4gIF9nZXRBY3RpdmUoKSB7XG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFX0lURU0sIHRoaXMuX2VsZW1lbnQpO1xuICB9XG4gIF9nZXRJdGVtcygpIHtcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JVEVNLCB0aGlzLl9lbGVtZW50KTtcbiAgfVxuICBfY2xlYXJJbnRlcnZhbCgpIHtcbiAgICBpZiAodGhpcy5faW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuICBfZGlyZWN0aW9uVG9PcmRlcihkaXJlY3Rpb24pIHtcbiAgICBpZiAoaXNSVEwoKSkge1xuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQgPyBPUkRFUl9QUkVWIDogT1JERVJfTkVYVDtcbiAgICB9XG4gICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQgPyBPUkRFUl9ORVhUIDogT1JERVJfUFJFVjtcbiAgfVxuICBfb3JkZXJUb0RpcmVjdGlvbihvcmRlcikge1xuICAgIGlmIChpc1JUTCgpKSB7XG4gICAgICByZXR1cm4gb3JkZXIgPT09IE9SREVSX1BSRVYgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgICB9XG4gICAgcmV0dXJuIG9yZGVyID09PSBPUkRFUl9QUkVWID8gRElSRUNUSU9OX1JJR0hUIDogRElSRUNUSU9OX0xFRlQ7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZGF0YS50byhjb25maWcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQ1LCBTRUxFQ1RPUl9EQVRBX1NMSURFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKTtcbiAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9DQVJPVVNFTCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgY29uc3QgY2Fyb3VzZWwgPSBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldCk7XG4gIGNvbnN0IHNsaWRlSW5kZXggPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1icy1zbGlkZS10bycpO1xuICBpZiAoc2xpZGVJbmRleCkge1xuICAgIGNhcm91c2VsLnRvKHNsaWRlSW5kZXgpO1xuICAgIGNhcm91c2VsLl9tYXliZUVuYWJsZUN5Y2xlKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKHRoaXMsICdzbGlkZScpID09PSAnbmV4dCcpIHtcbiAgICBjYXJvdXNlbC5uZXh0KCk7XG4gICAgY2Fyb3VzZWwuX21heWJlRW5hYmxlQ3ljbGUoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY2Fyb3VzZWwucHJldigpO1xuICBjYXJvdXNlbC5fbWF5YmVFbmFibGVDeWNsZSgpO1xufSk7XG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJJDMsICgpID0+IHtcbiAgY29uc3QgY2Fyb3VzZWxzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1JJREUpO1xuICBmb3IgKGNvbnN0IGNhcm91c2VsIG9mIGNhcm91c2Vscykge1xuICAgIENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UoY2Fyb3VzZWwpO1xuICB9XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ2Fyb3VzZWwpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgY29sbGFwc2UuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRiID0gJ2NvbGxhcHNlJztcbmNvbnN0IERBVEFfS0VZJDcgPSAnYnMuY29sbGFwc2UnO1xuY29uc3QgRVZFTlRfS0VZJDcgPSBgLiR7REFUQV9LRVkkN31gO1xuY29uc3QgREFUQV9BUElfS0VZJDQgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVWRU5UX1NIT1ckNiA9IGBzaG93JHtFVkVOVF9LRVkkN31gO1xuY29uc3QgRVZFTlRfU0hPV04kNiA9IGBzaG93biR7RVZFTlRfS0VZJDd9YDtcbmNvbnN0IEVWRU5UX0hJREUkNiA9IGBoaWRlJHtFVkVOVF9LRVkkN31gO1xuY29uc3QgRVZFTlRfSElEREVOJDYgPSBgaGlkZGVuJHtFVkVOVF9LRVkkN31gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNCA9IGBjbGljayR7RVZFTlRfS0VZJDd9JHtEQVRBX0FQSV9LRVkkNH1gO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDcgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNFID0gJ2NvbGxhcHNlJztcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0lORyA9ICdjb2xsYXBzaW5nJztcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0VEID0gJ2NvbGxhcHNlZCc7XG5jb25zdCBDTEFTU19OQU1FX0RFRVBFUl9DSElMRFJFTiA9IGA6c2NvcGUgLiR7Q0xBU1NfTkFNRV9DT0xMQVBTRX0gLiR7Q0xBU1NfTkFNRV9DT0xMQVBTRX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9IT1JJWk9OVEFMID0gJ2NvbGxhcHNlLWhvcml6b250YWwnO1xuY29uc3QgV0lEVEggPSAnd2lkdGgnO1xuY29uc3QgSEVJR0hUID0gJ2hlaWdodCc7XG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkVTID0gJy5jb2xsYXBzZS5zaG93LCAuY29sbGFwc2UuY29sbGFwc2luZyc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ0ID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCJdJztcbmNvbnN0IERlZmF1bHQkYSA9IHtcbiAgcGFyZW50OiBudWxsLFxuICB0b2dnbGU6IHRydWVcbn07XG5jb25zdCBEZWZhdWx0VHlwZSRhID0ge1xuICBwYXJlbnQ6ICcobnVsbHxlbGVtZW50KScsXG4gIHRvZ2dsZTogJ2Jvb2xlYW4nXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDb2xsYXBzZSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3RyaWdnZXJBcnJheSA9IFtdO1xuICAgIGNvbnN0IHRvZ2dsZUxpc3QgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFJDQpO1xuICAgIGZvciAoY29uc3QgZWxlbSBvZiB0b2dnbGVMaXN0KSB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IFNlbGVjdG9yRW5naW5lLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbSk7XG4gICAgICBjb25zdCBmaWx0ZXJFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvcikuZmlsdGVyKGZvdW5kRWxlbWVudCA9PiBmb3VuZEVsZW1lbnQgPT09IHRoaXMuX2VsZW1lbnQpO1xuICAgICAgaWYgKHNlbGVjdG9yICE9PSBudWxsICYmIGZpbHRlckVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJBcnJheS5wdXNoKGVsZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9pbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl90cmlnZ2VyQXJyYXksIHRoaXMuX2lzU2hvd24oKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcudG9nZ2xlKSB7XG4gICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JGE7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkYTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkYjtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH1cbiAgfVxuICBzaG93KCkge1xuICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBhY3RpdmVDaGlsZHJlbiA9IFtdO1xuXG4gICAgLy8gZmluZCBhY3RpdmUgY2hpbGRyZW5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgYWN0aXZlQ2hpbGRyZW4gPSB0aGlzLl9nZXRGaXJzdExldmVsQ2hpbGRyZW4oU0VMRUNUT1JfQUNUSVZFUykuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudCAhPT0gdGhpcy5fZWxlbWVudCkubWFwKGVsZW1lbnQgPT4gQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCB7XG4gICAgICAgIHRvZ2dsZTogZmFsc2VcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgaWYgKGFjdGl2ZUNoaWxkcmVuLmxlbmd0aCAmJiBhY3RpdmVDaGlsZHJlblswXS5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XJDYpO1xuICAgIGlmIChzdGFydEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhY3RpdmVJbnN0YW5jZSBvZiBhY3RpdmVDaGlsZHJlbikge1xuICAgICAgYWN0aXZlSW5zdGFuY2UuaGlkZSgpO1xuICAgIH1cbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTRSk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0lORyk7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gMDtcbiAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LCB0cnVlKTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1ckNyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJztcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOJDYpO1xuICAgIH07XG4gICAgY29uc3QgY2FwaXRhbGl6ZWREaW1lbnNpb24gPSBkaW1lbnNpb25bMF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSgxKTtcbiAgICBjb25zdCBzY3JvbGxTaXplID0gYHNjcm9sbCR7Y2FwaXRhbGl6ZWREaW1lbnNpb259YDtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0cnVlKTtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSBgJHt0aGlzLl9lbGVtZW50W3Njcm9sbFNpemVdfXB4YDtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGFydEV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSQ2KTtcbiAgICBpZiAoc3RhcnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IGAke3RoaXMuX2VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZGltZW5zaW9uXX1weGA7XG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNJTkcpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1ckNyk7XG4gICAgZm9yIChjb25zdCB0cmlnZ2VyIG9mIHRoaXMuX3RyaWdnZXJBcnJheSkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodHJpZ2dlcik7XG4gICAgICBpZiAoZWxlbWVudCAmJiAhdGhpcy5faXNTaG93bihlbGVtZW50KSkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW3RyaWdnZXJdLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNJTkcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0UpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOJDYpO1xuICAgIH07XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gJyc7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdHJ1ZSk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pc1Nob3duKGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVyQ3KTtcbiAgfVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICBjb25maWcudG9nZ2xlID0gQm9vbGVhbihjb25maWcudG9nZ2xlKTsgLy8gQ29lcmNlIHN0cmluZyB2YWx1ZXNcbiAgICBjb25maWcucGFyZW50ID0gZ2V0RWxlbWVudChjb25maWcucGFyZW50KTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9nZXREaW1lbnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfSE9SSVpPTlRBTCkgPyBXSURUSCA6IEhFSUdIVDtcbiAgfVxuICBfaW5pdGlhbGl6ZUNoaWxkcmVuKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldEZpcnN0TGV2ZWxDaGlsZHJlbihTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ0KTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KTtcbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW2VsZW1lbnRdLCB0aGlzLl9pc1Nob3duKHNlbGVjdGVkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9nZXRGaXJzdExldmVsQ2hpbGRyZW4oc2VsZWN0b3IpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmQoQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4sIHRoaXMuX2NvbmZpZy5wYXJlbnQpO1xuICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBpZiBncmVhdGVyIGRlcHRoXG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IsIHRoaXMuX2NvbmZpZy5wYXJlbnQpLmZpbHRlcihlbGVtZW50ID0+ICFjaGlsZHJlbi5pbmNsdWRlcyhlbGVtZW50KSk7XG4gIH1cbiAgX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0cmlnZ2VyQXJyYXksIGlzT3Blbikge1xuICAgIGlmICghdHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdHJpZ2dlckFycmF5KSB7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoQ0xBU1NfTkFNRV9DT0xMQVBTRUQsICFpc09wZW4pO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIGNvbnN0IF9jb25maWcgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycgJiYgL3Nob3d8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICBfY29uZmlnLnRvZ2dsZSA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIF9jb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNCwgU0VMRUNUT1JfREFUQV9UT0dHTEUkNCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIC8vIHByZXZlbnREZWZhdWx0IG9ubHkgZm9yIDxhPiBlbGVtZW50cyAod2hpY2ggY2hhbmdlIHRoZSBVUkwpIG5vdCBpbnNpZGUgdGhlIGNvbGxhcHNpYmxlIGVsZW1lbnRcbiAgaWYgKGV2ZW50LnRhcmdldC50YWdOYW1lID09PSAnQScgfHwgZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgZXZlbnQuZGVsZWdhdGVUYXJnZXQudGFnTmFtZSA9PT0gJ0EnKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU2VsZWN0b3JFbmdpbmUuZ2V0TXVsdGlwbGVFbGVtZW50c0Zyb21TZWxlY3Rvcih0aGlzKSkge1xuICAgIENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwge1xuICAgICAgdG9nZ2xlOiBmYWxzZVxuICAgIH0pLnRvZ2dsZSgpO1xuICB9XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ29sbGFwc2UpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZHJvcGRvd24uanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRhID0gJ2Ryb3Bkb3duJztcbmNvbnN0IERBVEFfS0VZJDYgPSAnYnMuZHJvcGRvd24nO1xuY29uc3QgRVZFTlRfS0VZJDYgPSBgLiR7REFUQV9LRVkkNn1gO1xuY29uc3QgREFUQV9BUElfS0VZJDMgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVTQ0FQRV9LRVkkMiA9ICdFc2NhcGUnO1xuY29uc3QgVEFCX0tFWSQxID0gJ1RhYic7XG5jb25zdCBBUlJPV19VUF9LRVkkMSA9ICdBcnJvd1VwJztcbmNvbnN0IEFSUk9XX0RPV05fS0VZJDEgPSAnQXJyb3dEb3duJztcbmNvbnN0IFJJR0hUX01PVVNFX0JVVFRPTiA9IDI7IC8vIE1vdXNlRXZlbnQuYnV0dG9uIHZhbHVlIGZvciB0aGUgc2Vjb25kYXJ5IGJ1dHRvbiwgdXN1YWxseSB0aGUgcmlnaHQgYnV0dG9uXG5cbmNvbnN0IEVWRU5UX0hJREUkNSA9IGBoaWRlJHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfSElEREVOJDUgPSBgaGlkZGVuJHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfU0hPVyQ1ID0gYHNob3cke0VWRU5UX0tFWSQ2fWA7XG5jb25zdCBFVkVOVF9TSE9XTiQ1ID0gYHNob3duJHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMyA9IGBjbGljayR7RVZFTlRfS0VZJDZ9JHtEQVRBX0FQSV9LRVkkM31gO1xuY29uc3QgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSA9IGBrZXlkb3duJHtFVkVOVF9LRVkkNn0ke0RBVEFfQVBJX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9LRVlVUF9EQVRBX0FQSSA9IGBrZXl1cCR7RVZFTlRfS0VZJDZ9JHtEQVRBX0FQSV9LRVkkM31gO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDYgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX0RST1BVUCA9ICdkcm9wdXAnO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRU5EID0gJ2Ryb3BlbmQnO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QU1RBUlQgPSAnZHJvcHN0YXJ0JztcbmNvbnN0IENMQVNTX05BTUVfRFJPUFVQX0NFTlRFUiA9ICdkcm9wdXAtY2VudGVyJztcbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fQ0VOVEVSID0gJ2Ryb3Bkb3duLWNlbnRlcic7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJdOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFX1NIT1dOID0gYCR7U0VMRUNUT1JfREFUQV9UT0dHTEUkM30uJHtDTEFTU19OQU1FX1NIT1ckNn1gO1xuY29uc3QgU0VMRUNUT1JfTUVOVSA9ICcuZHJvcGRvd24tbWVudSc7XG5jb25zdCBTRUxFQ1RPUl9OQVZCQVIgPSAnLm5hdmJhcic7XG5jb25zdCBTRUxFQ1RPUl9OQVZCQVJfTkFWID0gJy5uYXZiYXItbmF2JztcbmNvbnN0IFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMgPSAnLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZCknO1xuY29uc3QgUExBQ0VNRU5UX1RPUCA9IGlzUlRMKCkgPyAndG9wLWVuZCcgOiAndG9wLXN0YXJ0JztcbmNvbnN0IFBMQUNFTUVOVF9UT1BFTkQgPSBpc1JUTCgpID8gJ3RvcC1zdGFydCcgOiAndG9wLWVuZCc7XG5jb25zdCBQTEFDRU1FTlRfQk9UVE9NID0gaXNSVEwoKSA/ICdib3R0b20tZW5kJyA6ICdib3R0b20tc3RhcnQnO1xuY29uc3QgUExBQ0VNRU5UX0JPVFRPTUVORCA9IGlzUlRMKCkgPyAnYm90dG9tLXN0YXJ0JyA6ICdib3R0b20tZW5kJztcbmNvbnN0IFBMQUNFTUVOVF9SSUdIVCA9IGlzUlRMKCkgPyAnbGVmdC1zdGFydCcgOiAncmlnaHQtc3RhcnQnO1xuY29uc3QgUExBQ0VNRU5UX0xFRlQgPSBpc1JUTCgpID8gJ3JpZ2h0LXN0YXJ0JyA6ICdsZWZ0LXN0YXJ0JztcbmNvbnN0IFBMQUNFTUVOVF9UT1BDRU5URVIgPSAndG9wJztcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01DRU5URVIgPSAnYm90dG9tJztcbmNvbnN0IERlZmF1bHQkOSA9IHtcbiAgYXV0b0Nsb3NlOiB0cnVlLFxuICBib3VuZGFyeTogJ2NsaXBwaW5nUGFyZW50cycsXG4gIGRpc3BsYXk6ICdkeW5hbWljJyxcbiAgb2Zmc2V0OiBbMCwgMl0sXG4gIHBvcHBlckNvbmZpZzogbnVsbCxcbiAgcmVmZXJlbmNlOiAndG9nZ2xlJ1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDkgPSB7XG4gIGF1dG9DbG9zZTogJyhib29sZWFufHN0cmluZyknLFxuICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICBkaXNwbGF5OiAnc3RyaW5nJyxcbiAgb2Zmc2V0OiAnKGFycmF5fHN0cmluZ3xmdW5jdGlvbiknLFxuICBwb3BwZXJDb25maWc6ICcobnVsbHxvYmplY3R8ZnVuY3Rpb24pJyxcbiAgcmVmZXJlbmNlOiAnKHN0cmluZ3xlbGVtZW50fG9iamVjdCknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBEcm9wZG93biBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlOyAvLyBkcm9wZG93biB3cmFwcGVyXG4gICAgLy8gVE9ETzogdjYgcmV2ZXJ0ICMzNzAxMSAmIGNoYW5nZSBtYXJrdXAgaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvNS4zL2Zvcm1zL2lucHV0LWdyb3VwL1xuICAgIHRoaXMuX21lbnUgPSBTZWxlY3RvckVuZ2luZS5uZXh0KHRoaXMuX2VsZW1lbnQsIFNFTEVDVE9SX01FTlUpWzBdIHx8IFNlbGVjdG9yRW5naW5lLnByZXYodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF0gfHwgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NRU5VLCB0aGlzLl9wYXJlbnQpO1xuICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ5O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDk7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGE7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duKCkgPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdygpO1xuICB9XG4gIHNob3coKSB7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcy5fZWxlbWVudCkgfHwgdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgfTtcbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XJDUsIHJlbGF0ZWRUYXJnZXQpO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jcmVhdGVQb3BwZXIoKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRlbGVnYXRpb24gb24gaU9TXG4gICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAhdGhpcy5fcGFyZW50LmNsb3Nlc3QoU0VMRUNUT1JfTkFWQkFSX05BVikpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgdGhpcy5fbWVudS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDYpO1xuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOJDUsIHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcy5fZWxlbWVudCkgfHwgIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH07XG4gICAgdGhpcy5fY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG4gIHVwZGF0ZSgpIHtcbiAgICB0aGlzLl9pbk5hdmJhciA9IHRoaXMuX2RldGVjdE5hdmJhcigpO1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb21wbGV0ZUhpZGUocmVsYXRlZFRhcmdldCkge1xuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUkNSwgcmVsYXRlZFRhcmdldCk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XG4gICAgfVxuICAgIHRoaXMuX21lbnUuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckNik7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgIE1hbmlwdWxhdG9yLnJlbW92ZURhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicpO1xuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiQ1LCByZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHN1cGVyLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWZlcmVuY2UgPT09ICdvYmplY3QnICYmICFpc0VsZW1lbnQoY29uZmlnLnJlZmVyZW5jZSkgJiYgdHlwZW9mIGNvbmZpZy5yZWZlcmVuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBQb3BwZXIgdmlydHVhbCBlbGVtZW50cyByZXF1aXJlIGEgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG1ldGhvZFxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtOQU1FJGEudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcInJlZmVyZW5jZVwiIHByb3ZpZGVkIHR5cGUgXCJvYmplY3RcIiB3aXRob3V0IGEgcmVxdWlyZWQgXCJnZXRCb3VuZGluZ0NsaWVudFJlY3RcIiBtZXRob2QuYCk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2NyZWF0ZVBvcHBlcigpIHtcbiAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgZHJvcGRvd25zIHJlcXVpcmUgUG9wcGVyIChodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pJyk7XG4gICAgfVxuICAgIGxldCByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcbiAgICBpZiAodGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ3BhcmVudCcpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9wYXJlbnQ7XG4gICAgfSBlbHNlIGlmIChpc0VsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSkpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSBnZXRFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UgPT09ICdvYmplY3QnKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fY29uZmlnLnJlZmVyZW5jZTtcbiAgICB9XG4gICAgY29uc3QgcG9wcGVyQ29uZmlnID0gdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKCk7XG4gICAgdGhpcy5fcG9wcGVyID0gUG9wcGVyLmNyZWF0ZVBvcHBlcihyZWZlcmVuY2VFbGVtZW50LCB0aGlzLl9tZW51LCBwb3BwZXJDb25maWcpO1xuICB9XG4gIF9pc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLl9tZW51LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1ckNik7XG4gIH1cbiAgX2dldFBsYWNlbWVudCgpIHtcbiAgICBjb25zdCBwYXJlbnREcm9wZG93biA9IHRoaXMuX3BhcmVudDtcbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUEVORCkpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfUklHSFQ7XG4gICAgfVxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QU1RBUlQpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0xFRlQ7XG4gICAgfVxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QVVBfQ0VOVEVSKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9UT1BDRU5URVI7XG4gICAgfVxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9DRU5URVIpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0JPVFRPTUNFTlRFUjtcbiAgICB9XG5cbiAgICAvLyBXZSBuZWVkIHRvIHRyaW0gdGhlIHZhbHVlIGJlY2F1c2UgY3VzdG9tIHByb3BlcnRpZXMgY2FuIGFsc28gaW5jbHVkZSBzcGFjZXNcbiAgICBjb25zdCBpc0VuZCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fbWVudSkuZ2V0UHJvcGVydHlWYWx1ZSgnLS1icy1wb3NpdGlvbicpLnRyaW0oKSA9PT0gJ2VuZCc7XG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUCkpIHtcbiAgICAgIHJldHVybiBpc0VuZCA/IFBMQUNFTUVOVF9UT1BFTkQgOiBQTEFDRU1FTlRfVE9QO1xuICAgIH1cbiAgICByZXR1cm4gaXNFbmQgPyBQTEFDRU1FTlRfQk9UVE9NRU5EIDogUExBQ0VNRU5UX0JPVFRPTTtcbiAgfVxuICBfZGV0ZWN0TmF2YmFyKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTkFWQkFSKSAhPT0gbnVsbDtcbiAgfVxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9mZnNldFxuICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gb2Zmc2V0LnNwbGl0KCcsJykubWFwKHZhbHVlID0+IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBwb3BwZXJEYXRhID0+IG9mZnNldChwb3BwZXJEYXRhLCB0aGlzLl9lbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuICBfZ2V0UG9wcGVyQ29uZmlnKCkge1xuICAgIGNvbnN0IGRlZmF1bHRCc1BvcHBlckNvbmZpZyA9IHtcbiAgICAgIHBsYWNlbWVudDogdGhpcy5fZ2V0UGxhY2VtZW50KCksXG4gICAgICBtb2RpZmllcnM6IFt7XG4gICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYm91bmRhcnk6IHRoaXMuX2NvbmZpZy5ib3VuZGFyeVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgb2Zmc2V0OiB0aGlzLl9nZXRPZmZzZXQoKVxuICAgICAgICB9XG4gICAgICB9XVxuICAgIH07XG5cbiAgICAvLyBEaXNhYmxlIFBvcHBlciBpZiB3ZSBoYXZlIGEgc3RhdGljIGRpc3BsYXkgb3IgRHJvcGRvd24gaXMgaW4gTmF2YmFyXG4gICAgaWYgKHRoaXMuX2luTmF2YmFyIHx8IHRoaXMuX2NvbmZpZy5kaXNwbGF5ID09PSAnc3RhdGljJykge1xuICAgICAgTWFuaXB1bGF0b3Iuc2V0RGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCAncG9wcGVyJywgJ3N0YXRpYycpOyAvLyBUT0RPOiB2NiByZW1vdmVcbiAgICAgIGRlZmF1bHRCc1BvcHBlckNvbmZpZy5tb2RpZmllcnMgPSBbe1xuICAgICAgICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfV07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0QnNQb3BwZXJDb25maWcsXG4gICAgICAuLi5leGVjdXRlKHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcsIFt1bmRlZmluZWQsIGRlZmF1bHRCc1BvcHBlckNvbmZpZ10pXG4gICAgfTtcbiAgfVxuICBfc2VsZWN0TWVudUl0ZW0oe1xuICAgIGtleSxcbiAgICB0YXJnZXRcbiAgfSkge1xuICAgIGNvbnN0IGl0ZW1zID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9WSVNJQkxFX0lURU1TLCB0aGlzLl9tZW51KS5maWx0ZXIoZWxlbWVudCA9PiBpc1Zpc2libGUoZWxlbWVudCkpO1xuICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGFyZ2V0IGlzbid0IGluY2x1ZGVkIGluIGl0ZW1zIChlLmcuIHdoZW4gZXhwYW5kaW5nIHRoZSBkcm9wZG93bilcbiAgICAvLyBhbGxvdyBjeWNsaW5nIHRvIGdldCB0aGUgbGFzdCBpdGVtIGluIGNhc2Uga2V5IGVxdWFscyBBUlJPV19VUF9LRVlcbiAgICBnZXROZXh0QWN0aXZlRWxlbWVudChpdGVtcywgdGFyZ2V0LCBrZXkgPT09IEFSUk9XX0RPV05fS0VZJDEsICFpdGVtcy5pbmNsdWRlcyh0YXJnZXQpKS5mb2N1cygpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgfSk7XG4gIH1cbiAgc3RhdGljIGNsZWFyTWVudXMoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuYnV0dG9uID09PSBSSUdIVF9NT1VTRV9CVVRUT04gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC5rZXkgIT09IFRBQl9LRVkkMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcGVuVG9nZ2xlcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04pO1xuICAgIGZvciAoY29uc3QgdG9nZ2xlIG9mIG9wZW5Ub2dnbGVzKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gRHJvcGRvd24uZ2V0SW5zdGFuY2UodG9nZ2xlKTtcbiAgICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSBmYWxzZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXBvc2VkUGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuICAgICAgY29uc3QgaXNNZW51VGFyZ2V0ID0gY29tcG9zZWRQYXRoLmluY2x1ZGVzKGNvbnRleHQuX21lbnUpO1xuICAgICAgaWYgKGNvbXBvc2VkUGF0aC5pbmNsdWRlcyhjb250ZXh0Ll9lbGVtZW50KSB8fCBjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSAnaW5zaWRlJyAmJiAhaXNNZW51VGFyZ2V0IHx8IGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09ICdvdXRzaWRlJyAmJiBpc01lbnVUYXJnZXQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFRhYiBuYXZpZ2F0aW9uIHRocm91Z2ggdGhlIGRyb3Bkb3duIG1lbnUgb3IgZXZlbnRzIGZyb20gY29udGFpbmVkIGlucHV0cyBzaG91bGRuJ3QgY2xvc2UgdGhlIG1lbnVcbiAgICAgIGlmIChjb250ZXh0Ll9tZW51LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiYgKGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgZXZlbnQua2V5ID09PSBUQUJfS0VZJDEgfHwgL2lucHV0fHNlbGVjdHxvcHRpb258dGV4dGFyZWF8Zm9ybS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IGNvbnRleHQuX2VsZW1lbnRcbiAgICAgIH07XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICByZWxhdGVkVGFyZ2V0LmNsaWNrRXZlbnQgPSBldmVudDtcbiAgICAgIH1cbiAgICAgIGNvbnRleHQuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KTtcbiAgICB9XG4gIH1cbiAgc3RhdGljIGRhdGFBcGlLZXlkb3duSGFuZGxlcihldmVudCkge1xuICAgIC8vIElmIG5vdCBhbiBVUCB8IERPV04gfCBFU0NBUEUga2V5ID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICAvLyBJZiBpbnB1dC90ZXh0YXJlYSAmJiBpZiBrZXkgaXMgb3RoZXIgdGhhbiBFU0NBUEUgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuXG4gICAgY29uc3QgaXNJbnB1dCA9IC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpO1xuICAgIGNvbnN0IGlzRXNjYXBlRXZlbnQgPSBldmVudC5rZXkgPT09IEVTQ0FQRV9LRVkkMjtcbiAgICBjb25zdCBpc1VwT3JEb3duRXZlbnQgPSBbQVJST1dfVVBfS0VZJDEsIEFSUk9XX0RPV05fS0VZJDFdLmluY2x1ZGVzKGV2ZW50LmtleSk7XG4gICAgaWYgKCFpc1VwT3JEb3duRXZlbnQgJiYgIWlzRXNjYXBlRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzSW5wdXQgJiYgIWlzRXNjYXBlRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIFRPRE86IHY2IHJldmVydCAjMzcwMTEgJiBjaGFuZ2UgbWFya3VwIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzUuMy9mb3Jtcy9pbnB1dC1ncm91cC9cbiAgICBjb25zdCBnZXRUb2dnbGVCdXR0b24gPSB0aGlzLm1hdGNoZXMoU0VMRUNUT1JfREFUQV9UT0dHTEUkMykgPyB0aGlzIDogU2VsZWN0b3JFbmdpbmUucHJldih0aGlzLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzKVswXSB8fCBTZWxlY3RvckVuZ2luZS5uZXh0KHRoaXMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMpWzBdIHx8IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfREFUQV9UT0dHTEUkMywgZXZlbnQuZGVsZWdhdGVUYXJnZXQucGFyZW50Tm9kZSk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKGdldFRvZ2dsZUJ1dHRvbik7XG4gICAgaWYgKGlzVXBPckRvd25FdmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpbnN0YW5jZS5zaG93KCk7XG4gICAgICBpbnN0YW5jZS5fc2VsZWN0TWVudUl0ZW0oZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaW5zdGFuY2UuX2lzU2hvd24oKSkge1xuICAgICAgLy8gZWxzZSBpcyBlc2NhcGUgYW5kIHdlIGNoZWNrIGlmIGl0IGlzIHNob3duXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGluc3RhbmNlLmhpZGUoKTtcbiAgICAgIGdldFRvZ2dsZUJ1dHRvbi5mb2N1cygpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzLCBEcm9wZG93bi5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpO1xuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJLCBTRUxFQ1RPUl9NRU5VLCBEcm9wZG93bi5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpO1xuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQzLCBEcm9wZG93bi5jbGVhck1lbnVzKTtcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZVVBfREFUQV9BUEksIERyb3Bkb3duLmNsZWFyTWVudXMpO1xuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQzLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKS50b2dnbGUoKTtcbn0pO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihEcm9wZG93bik7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2JhY2tkcm9wLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkOSA9ICdiYWNrZHJvcCc7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkNCA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ1ID0gJ3Nob3cnO1xuY29uc3QgRVZFTlRfTU9VU0VET1dOID0gYG1vdXNlZG93bi5icy4ke05BTUUkOX1gO1xuY29uc3QgRGVmYXVsdCQ4ID0ge1xuICBjbGFzc05hbWU6ICdtb2RhbC1iYWNrZHJvcCcsXG4gIGNsaWNrQ2FsbGJhY2s6IG51bGwsXG4gIGlzQW5pbWF0ZWQ6IGZhbHNlLFxuICBpc1Zpc2libGU6IHRydWUsXG4gIC8vIGlmIGZhbHNlLCB3ZSB1c2UgdGhlIGJhY2tkcm9wIGhlbHBlciB3aXRob3V0IGFkZGluZyBhbnkgZWxlbWVudCB0byB0aGUgZG9tXG4gIHJvb3RFbGVtZW50OiAnYm9keScgLy8gZ2l2ZSB0aGUgY2hvaWNlIHRvIHBsYWNlIGJhY2tkcm9wIHVuZGVyIGRpZmZlcmVudCBlbGVtZW50c1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDggPSB7XG4gIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gIGNsaWNrQ2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknLFxuICBpc0FuaW1hdGVkOiAnYm9vbGVhbicsXG4gIGlzVmlzaWJsZTogJ2Jvb2xlYW4nLFxuICByb290RWxlbWVudDogJyhlbGVtZW50fHN0cmluZyknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBCYWNrZHJvcCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkODtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ4O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ5O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHNob3coY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5pc1Zpc2libGUpIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9hcHBlbmQoKTtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpO1xuICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgcmVmbG93KGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDUpO1xuICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cbiAgaGlkZShjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2dldEVsZW1lbnQoKS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQ1KTtcbiAgICB0aGlzLl9lbXVsYXRlQW5pbWF0aW9uKCgpID0+IHtcbiAgICAgIHRoaXMuZGlzcG9zZSgpO1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRURPV04pO1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlKCk7XG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IGZhbHNlO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZ2V0RWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGJhY2tkcm9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBiYWNrZHJvcC5jbGFzc05hbWUgPSB0aGlzLl9jb25maWcuY2xhc3NOYW1lO1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKSB7XG4gICAgICAgIGJhY2tkcm9wLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9GQURFJDQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZWxlbWVudCA9IGJhY2tkcm9wO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudDtcbiAgfVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICAvLyB1c2UgZ2V0RWxlbWVudCgpIHdpdGggdGhlIGRlZmF1bHQgXCJib2R5XCIgdG8gZ2V0IGEgZnJlc2ggRWxlbWVudCBvbiBlYWNoIGluc3RhbnRpYXRpb25cbiAgICBjb25maWcucm9vdEVsZW1lbnQgPSBnZXRFbGVtZW50KGNvbmZpZy5yb290RWxlbWVudCk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfYXBwZW5kKCkge1xuICAgIGlmICh0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9nZXRFbGVtZW50KCk7XG4gICAgdGhpcy5fY29uZmlnLnJvb3RFbGVtZW50LmFwcGVuZChlbGVtZW50KTtcbiAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOLCAoKSA9PiB7XG4gICAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5jbGlja0NhbGxiYWNrKTtcbiAgICB9KTtcbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gdHJ1ZTtcbiAgfVxuICBfZW11bGF0ZUFuaW1hdGlvbihjYWxsYmFjaykge1xuICAgIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24oY2FsbGJhY2ssIHRoaXMuX2dldEVsZW1lbnQoKSwgdGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpO1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2ZvY3VzdHJhcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDggPSAnZm9jdXN0cmFwJztcbmNvbnN0IERBVEFfS0VZJDUgPSAnYnMuZm9jdXN0cmFwJztcbmNvbnN0IEVWRU5UX0tFWSQ1ID0gYC4ke0RBVEFfS0VZJDV9YDtcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4kMiA9IGBmb2N1c2luJHtFVkVOVF9LRVkkNX1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTl9UQUIgPSBga2V5ZG93bi50YWIke0VWRU5UX0tFWSQ1fWA7XG5jb25zdCBUQUJfS0VZID0gJ1RhYic7XG5jb25zdCBUQUJfTkFWX0ZPUldBUkQgPSAnZm9yd2FyZCc7XG5jb25zdCBUQUJfTkFWX0JBQ0tXQVJEID0gJ2JhY2t3YXJkJztcbmNvbnN0IERlZmF1bHQkNyA9IHtcbiAgYXV0b2ZvY3VzOiB0cnVlLFxuICB0cmFwRWxlbWVudDogbnVsbCAvLyBUaGUgZWxlbWVudCB0byB0cmFwIGZvY3VzIGluc2lkZSBvZlxufTtcbmNvbnN0IERlZmF1bHRUeXBlJDcgPSB7XG4gIGF1dG9mb2N1czogJ2Jvb2xlYW4nLFxuICB0cmFwRWxlbWVudDogJ2VsZW1lbnQnXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBGb2N1c1RyYXAgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IG51bGw7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ3O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDc7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDg7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcuYXV0b2ZvY3VzKSB7XG4gICAgICB0aGlzLl9jb25maWcudHJhcEVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgRXZlbnRIYW5kbGVyLm9mZihkb2N1bWVudCwgRVZFTlRfS0VZJDUpOyAvLyBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGZvY3VzIGxvb3BcbiAgICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0ZPQ1VTSU4kMiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlRm9jdXNpbihldmVudCkpO1xuICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZRE9XTl9UQUIsIGV2ZW50ID0+IHRoaXMuX2hhbmRsZUtleWRvd24oZXZlbnQpKTtcbiAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7XG4gIH1cbiAgZGVhY3RpdmF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7XG4gICAgRXZlbnRIYW5kbGVyLm9mZihkb2N1bWVudCwgRVZFTlRfS0VZJDUpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaGFuZGxlRm9jdXNpbihldmVudCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHRyYXBFbGVtZW50XG4gICAgfSA9IHRoaXMuX2NvbmZpZztcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBkb2N1bWVudCB8fCBldmVudC50YXJnZXQgPT09IHRyYXBFbGVtZW50IHx8IHRyYXBFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudHMgPSBTZWxlY3RvckVuZ2luZS5mb2N1c2FibGVDaGlsZHJlbih0cmFwRWxlbWVudCk7XG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdHJhcEVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPT09IFRBQl9OQVZfQkFDS1dBUkQpIHtcbiAgICAgIGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdLmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIF9oYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gVEFCX0tFWSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID0gZXZlbnQuc2hpZnRLZXkgPyBUQUJfTkFWX0JBQ0tXQVJEIDogVEFCX05BVl9GT1JXQVJEO1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3Njcm9sbEJhci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBTRUxFQ1RPUl9GSVhFRF9DT05URU5UID0gJy5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10b3AnO1xuY29uc3QgU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQgPSAnLnN0aWNreS10b3AnO1xuY29uc3QgUFJPUEVSVFlfUEFERElORyA9ICdwYWRkaW5nLXJpZ2h0JztcbmNvbnN0IFBST1BFUlRZX01BUkdJTiA9ICdtYXJnaW4tcmlnaHQnO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTY3JvbGxCYXJIZWxwZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9lbGVtZW50ID0gZG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBnZXRXaWR0aCgpIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2lubmVyV2lkdGgjdXNhZ2Vfbm90ZXNcbiAgICBjb25zdCBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIHJldHVybiBNYXRoLmFicyh3aW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50V2lkdGgpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCk7XG4gICAgdGhpcy5fZGlzYWJsZU92ZXJGbG93KCk7XG4gICAgLy8gZ2l2ZSBwYWRkaW5nIHRvIGVsZW1lbnQgdG8gYmFsYW5jZSB0aGUgaGlkZGVuIHNjcm9sbGJhciB3aWR0aFxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsIFBST1BFUlRZX1BBRERJTkcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgKyB3aWR0aCk7XG4gICAgLy8gdHJpY2s6IFdlIGFkanVzdCBwb3NpdGl2ZSBwYWRkaW5nUmlnaHQgYW5kIG5lZ2F0aXZlIG1hcmdpblJpZ2h0IHRvIHN0aWNreS10b3AgZWxlbWVudHMgdG8ga2VlcCBzaG93aW5nIGZ1bGx3aWR0aFxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsIFBST1BFUlRZX1BBRERJTkcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgKyB3aWR0aCk7XG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQsIFBST1BFUlRZX01BUkdJTiwgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSAtIHdpZHRoKTtcbiAgfVxuICByZXNldCgpIHtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsICdvdmVyZmxvdycpO1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgUFJPUEVSVFlfUEFERElORyk7XG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9GSVhFRF9DT05URU5ULCBQUk9QRVJUWV9QQURESU5HKTtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCBQUk9QRVJUWV9NQVJHSU4pO1xuICB9XG4gIGlzT3ZlcmZsb3dpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0V2lkdGgoKSA+IDA7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9kaXNhYmxlT3ZlckZsb3coKSB7XG4gICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUodGhpcy5fZWxlbWVudCwgJ292ZXJmbG93Jyk7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICB9XG4gIF9zZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuZ2V0V2lkdGgoKTtcbiAgICBjb25zdCBtYW5pcHVsYXRpb25DYWxsQmFjayA9IGVsZW1lbnQgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnQgJiYgd2luZG93LmlubmVyV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoICsgc2Nyb2xsYmFyV2lkdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSk7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlUHJvcGVydHkpO1xuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZVByb3BlcnR5LCBgJHtjYWxsYmFjayhOdW1iZXIucGFyc2VGbG9hdChjYWxjdWxhdGVkVmFsdWUpKX1weGApO1xuICAgIH07XG4gICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spO1xuICB9XG4gIF9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KSB7XG4gICAgY29uc3QgYWN0dWFsVmFsdWUgPSBlbGVtZW50LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0eSk7XG4gICAgaWYgKGFjdHVhbFZhbHVlKSB7XG4gICAgICBNYW5pcHVsYXRvci5zZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHksIGFjdHVhbFZhbHVlKTtcbiAgICB9XG4gIH1cbiAgX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoc2VsZWN0b3IsIHN0eWxlUHJvcGVydHkpIHtcbiAgICBjb25zdCBtYW5pcHVsYXRpb25DYWxsQmFjayA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpO1xuICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHJlbW92ZSB0aGUgcHJvcGVydHkgaWYgdGhlIHZhbHVlIGlzIGBudWxsYDsgdGhlIHZhbHVlIGNhbiBhbHNvIGJlIHplcm9cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KHN0eWxlUHJvcGVydHkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBNYW5pcHVsYXRvci5yZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpO1xuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZVByb3BlcnR5LCB2YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjayk7XG4gIH1cbiAgX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIGNhbGxCYWNrKSB7XG4gICAgaWYgKGlzRWxlbWVudChzZWxlY3RvcikpIHtcbiAgICAgIGNhbGxCYWNrKHNlbGVjdG9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzZWwgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvciwgdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIGNhbGxCYWNrKHNlbCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBtb2RhbC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDcgPSAnbW9kYWwnO1xuY29uc3QgREFUQV9LRVkkNCA9ICdicy5tb2RhbCc7XG5jb25zdCBFVkVOVF9LRVkkNCA9IGAuJHtEQVRBX0tFWSQ0fWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkMiA9ICcuZGF0YS1hcGknO1xuY29uc3QgRVNDQVBFX0tFWSQxID0gJ0VzY2FwZSc7XG5jb25zdCBFVkVOVF9ISURFJDQgPSBgaGlkZSR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEJDEgPSBgaGlkZVByZXZlbnRlZCR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQ0ID0gYGhpZGRlbiR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX1NIT1ckNCA9IGBzaG93JHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfU0hPV04kNCA9IGBzaG93biR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX1JFU0laRSQxID0gYHJlc2l6ZSR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RJU01JU1MgPSBgY2xpY2suZGlzbWlzcyR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTID0gYG1vdXNlZG93bi5kaXNtaXNzJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTl9ESVNNSVNTJDEgPSBga2V5ZG93bi5kaXNtaXNzJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMiA9IGBjbGljayR7RVZFTlRfS0VZJDR9JHtEQVRBX0FQSV9LRVkkMn1gO1xuY29uc3QgQ0xBU1NfTkFNRV9PUEVOID0gJ21vZGFsLW9wZW4nO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFJDMgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckNCA9ICdzaG93JztcbmNvbnN0IENMQVNTX05BTUVfU1RBVElDID0gJ21vZGFsLXN0YXRpYyc7XG5jb25zdCBPUEVOX1NFTEVDVE9SJDEgPSAnLm1vZGFsLnNob3cnO1xuY29uc3QgU0VMRUNUT1JfRElBTE9HID0gJy5tb2RhbC1kaWFsb2cnO1xuY29uc3QgU0VMRUNUT1JfTU9EQUxfQk9EWSA9ICcubW9kYWwtYm9keSc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQyID0gJ1tkYXRhLWJzLXRvZ2dsZT1cIm1vZGFsXCJdJztcbmNvbnN0IERlZmF1bHQkNiA9IHtcbiAgYmFja2Ryb3A6IHRydWUsXG4gIGZvY3VzOiB0cnVlLFxuICBrZXlib2FyZDogdHJ1ZVxufTtcbmNvbnN0IERlZmF1bHRUeXBlJDYgPSB7XG4gIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIGZvY3VzOiAnYm9vbGVhbicsXG4gIGtleWJvYXJkOiAnYm9vbGVhbidcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIE1vZGFsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5fZGlhbG9nID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9ESUFMT0csIHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2JhY2tkcm9wID0gdGhpcy5faW5pdGlhbGl6ZUJhY2tEcm9wKCk7XG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpO1xuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9zY3JvbGxCYXIgPSBuZXcgU2Nyb2xsQmFySGVscGVyKCk7XG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDY7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkNjtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkNztcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldCk7XG4gIH1cbiAgc2hvdyhyZWxhdGVkVGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24gfHwgdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1ckNCwge1xuICAgICAgcmVsYXRlZFRhcmdldFxuICAgIH0pO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc1Nob3duID0gdHJ1ZTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIHRoaXMuX3Njcm9sbEJhci5oaWRlKCk7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfT1BFTik7XG4gICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgdGhpcy5fYmFja2Ryb3Auc2hvdygoKSA9PiB0aGlzLl9zaG93RWxlbWVudChyZWxhdGVkVGFyZ2V0KSk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24gfHwgdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUkNCk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQ0KTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHRoaXMuX2hpZGVNb2RhbCgpLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih3aW5kb3csIEVWRU5UX0tFWSQ0KTtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2RpYWxvZywgRVZFTlRfS0VZJDQpO1xuICAgIHRoaXMuX2JhY2tkcm9wLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuICBoYW5kbGVVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgcmV0dXJuIG5ldyBCYWNrZHJvcCh7XG4gICAgICBpc1Zpc2libGU6IEJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKSxcbiAgICAgIC8vICdzdGF0aWMnIG9wdGlvbiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdHJ1ZSwgYW5kIGJvb2xlYW5zIHdpbGwga2VlcCB0aGVpciB2YWx1ZSxcbiAgICAgIGlzQW5pbWF0ZWQ6IHRoaXMuX2lzQW5pbWF0ZWQoKVxuICAgIH0pO1xuICB9XG4gIF9pbml0aWFsaXplRm9jdXNUcmFwKCkge1xuICAgIHJldHVybiBuZXcgRm9jdXNUcmFwKHtcbiAgICAgIHRyYXBFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgfSk7XG4gIH1cbiAgX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAvLyB0cnkgdG8gYXBwZW5kIGR5bmFtaWMgbW9kYWxcbiAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnModGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgdHJ1ZSk7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJyk7XG4gICAgdGhpcy5fZWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIGNvbnN0IG1vZGFsQm9keSA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfTU9EQUxfQk9EWSwgdGhpcy5fZGlhbG9nKTtcbiAgICBpZiAobW9kYWxCb2R5KSB7XG4gICAgICBtb2RhbEJvZHkuc2Nyb2xsVG9wID0gMDtcbiAgICB9XG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckNCk7XG4gICAgY29uc3QgdHJhbnNpdGlvbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5mb2N1cykge1xuICAgICAgICB0aGlzLl9mb2N1c3RyYXAuYWN0aXZhdGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04kNCwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2sodHJhbnNpdGlvbkNvbXBsZXRlLCB0aGlzLl9kaWFsb2csIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gIH1cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MkMSwgZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gRVNDQVBFX0tFWSQxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKTtcbiAgICB9KTtcbiAgICBFdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9SRVNJWkUkMSwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzU2hvd24gJiYgIXRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgICB0aGlzLl9hZGp1c3REaWFsb2coKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIC8vIGEgYmFkIHRyaWNrIHRvIHNlZ3JlZ2F0ZSBjbGlja3MgdGhhdCBtYXkgc3RhcnQgaW5zaWRlIGRpYWxvZyBidXQgZW5kIG91dHNpZGUsIGFuZCBhdm9pZCBsaXN0ZW4gdG8gc2Nyb2xsYmFyIGNsaWNrc1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9DTElDS19ESVNNSVNTLCBldmVudDIgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZWxlbWVudCAhPT0gZXZlbnQudGFyZ2V0IHx8IHRoaXMuX2VsZW1lbnQgIT09IGV2ZW50Mi50YXJnZXQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgX2hpZGVNb2RhbCgpIHtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSk7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKTtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgncm9sZScpO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfT1BFTik7XG4gICAgICB0aGlzLl9yZXNldEFkanVzdG1lbnRzKCk7XG4gICAgICB0aGlzLl9zY3JvbGxCYXIucmVzZXQoKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiQ0KTtcbiAgICB9KTtcbiAgfVxuICBfaXNBbmltYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFJDMpO1xuICB9XG4gIF90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCkge1xuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEJDEpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgaW5pdGlhbE92ZXJmbG93WSA9IHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZO1xuICAgIC8vIHJldHVybiBpZiB0aGUgZm9sbG93aW5nIGJhY2tncm91bmQgdHJhbnNpdGlvbiBoYXNuJ3QgeWV0IGNvbXBsZXRlZFxuICAgIGlmIChpbml0aWFsT3ZlcmZsb3dZID09PSAnaGlkZGVuJyB8fCB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NUQVRJQykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gJ2hpZGRlbic7XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NUQVRJQyk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TVEFUSUMpO1xuICAgICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gaW5pdGlhbE92ZXJmbG93WTtcbiAgICAgIH0sIHRoaXMuX2RpYWxvZyk7XG4gICAgfSwgdGhpcy5fZGlhbG9nKTtcbiAgICB0aGlzLl9lbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvdmVyZmxvd2luZyBtb2RhbHNcbiAgICovXG5cbiAgX2FkanVzdERpYWxvZygpIHtcbiAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSB0aGlzLl9zY3JvbGxCYXIuZ2V0V2lkdGgoKTtcbiAgICBjb25zdCBpc0JvZHlPdmVyZmxvd2luZyA9IHNjcm9sbGJhcldpZHRoID4gMDtcbiAgICBpZiAoaXNCb2R5T3ZlcmZsb3dpbmcgJiYgIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBpc1JUTCgpID8gJ3BhZGRpbmdMZWZ0JyA6ICdwYWRkaW5nUmlnaHQnO1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBgJHtzY3JvbGxiYXJXaWR0aH1weGA7XG4gICAgfVxuICAgIGlmICghaXNCb2R5T3ZlcmZsb3dpbmcgJiYgaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGlzUlRMKCkgPyAncGFkZGluZ1JpZ2h0JyA6ICdwYWRkaW5nTGVmdCc7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGAke3Njcm9sbGJhcldpZHRofXB4YDtcbiAgICB9XG4gIH1cbiAgX3Jlc2V0QWRqdXN0bWVudHMoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdCA9ICcnO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJyc7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcsIHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10ocmVsYXRlZFRhcmdldCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMiwgU0VMRUNUT1JfREFUQV9UT0dHTEUkMiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcyk7XG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9TSE9XJDQsIHNob3dFdmVudCA9PiB7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAvLyBvbmx5IHJlZ2lzdGVyIGZvY3VzIHJlc3RvcmVyIGlmIG1vZGFsIHdpbGwgYWN0dWFsbHkgZ2V0IHNob3duXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9ISURERU4kNCwgKCkgPT4ge1xuICAgICAgaWYgKGlzVmlzaWJsZSh0aGlzKSkge1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGF2b2lkIGNvbmZsaWN0IHdoZW4gY2xpY2tpbmcgbW9kYWwgdG9nZ2xlciB3aGlsZSBhbm90aGVyIG9uZSBpcyBvcGVuXG4gIGNvbnN0IGFscmVhZHlPcGVuID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShPUEVOX1NFTEVDVE9SJDEpO1xuICBpZiAoYWxyZWFkeU9wZW4pIHtcbiAgICBNb2RhbC5nZXRJbnN0YW5jZShhbHJlYWR5T3BlbikuaGlkZSgpO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldCk7XG4gIGRhdGEudG9nZ2xlKHRoaXMpO1xufSk7XG5lbmFibGVEaXNtaXNzVHJpZ2dlcihNb2RhbCk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKE1vZGFsKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIG9mZmNhbnZhcy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDYgPSAnb2ZmY2FudmFzJztcbmNvbnN0IERBVEFfS0VZJDMgPSAnYnMub2ZmY2FudmFzJztcbmNvbnN0IEVWRU5UX0tFWSQzID0gYC4ke0RBVEFfS0VZJDN9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQxID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJJDIgPSBgbG9hZCR7RVZFTlRfS0VZJDN9JHtEQVRBX0FQSV9LRVkkMX1gO1xuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDMgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1dJTkckMSA9ICdzaG93aW5nJztcbmNvbnN0IENMQVNTX05BTUVfSElESU5HID0gJ2hpZGluZyc7XG5jb25zdCBDTEFTU19OQU1FX0JBQ0tEUk9QID0gJ29mZmNhbnZhcy1iYWNrZHJvcCc7XG5jb25zdCBPUEVOX1NFTEVDVE9SID0gJy5vZmZjYW52YXMuc2hvdyc7XG5jb25zdCBFVkVOVF9TSE9XJDMgPSBgc2hvdyR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX1NIT1dOJDMgPSBgc2hvd24ke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9ISURFJDMgPSBgaGlkZSR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9ISURERU4kMyA9IGBoaWRkZW4ke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9SRVNJWkUgPSBgcmVzaXplJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMSA9IGBjbGljayR7RVZFTlRfS0VZJDN9JHtEQVRBX0FQSV9LRVkkMX1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTl9ESVNNSVNTID0gYGtleWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFJDEgPSAnW2RhdGEtYnMtdG9nZ2xlPVwib2ZmY2FudmFzXCJdJztcbmNvbnN0IERlZmF1bHQkNSA9IHtcbiAgYmFja2Ryb3A6IHRydWUsXG4gIGtleWJvYXJkOiB0cnVlLFxuICBzY3JvbGw6IGZhbHNlXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkNSA9IHtcbiAgYmFja2Ryb3A6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgc2Nyb2xsOiAnYm9vbGVhbidcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIE9mZmNhbnZhcyBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpO1xuICAgIHRoaXMuX2ZvY3VzdHJhcCA9IHRoaXMuX2luaXRpYWxpemVGb2N1c1RyYXAoKTtcbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkNTtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ1O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ2O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XJDMsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICB9KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNTaG93biA9IHRydWU7XG4gICAgdGhpcy5fYmFja2Ryb3Auc2hvdygpO1xuICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgbmV3IFNjcm9sbEJhckhlbHBlcigpLmhpZGUoKTtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCB0cnVlKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XSU5HJDEpO1xuICAgIGNvbnN0IGNvbXBsZXRlQ2FsbEJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwgfHwgdGhpcy5fY29uZmlnLmJhY2tkcm9wKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzdHJhcC5hY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQzKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkckMSk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiQzLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxCYWNrLCB0aGlzLl9lbGVtZW50LCB0cnVlKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFJDMpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHRoaXMuX2VsZW1lbnQuYmx1cigpO1xuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9ISURJTkcpO1xuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKTtcbiAgICBjb25zdCBjb21wbGV0ZUNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQzLCBDTEFTU19OQU1FX0hJRElORyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgICBuZXcgU2Nyb2xsQmFySGVscGVyKCkucmVzZXQoKTtcbiAgICAgIH1cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiQzKTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsYmFjaywgdGhpcy5fZWxlbWVudCwgdHJ1ZSk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKCk7XG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgY29uc3QgY2xpY2tDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3AgPT09ICdzdGF0aWMnKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfTtcblxuICAgIC8vICdzdGF0aWMnIG9wdGlvbiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdHJ1ZSwgYW5kIGJvb2xlYW5zIHdpbGwga2VlcCB0aGVpciB2YWx1ZVxuICAgIGNvbnN0IGlzVmlzaWJsZSA9IEJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKTtcbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGNsYXNzTmFtZTogQ0xBU1NfTkFNRV9CQUNLRFJPUCxcbiAgICAgIGlzVmlzaWJsZSxcbiAgICAgIGlzQW5pbWF0ZWQ6IHRydWUsXG4gICAgICByb290RWxlbWVudDogdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgY2xpY2tDYWxsYmFjazogaXNWaXNpYmxlID8gY2xpY2tDYWxsYmFjayA6IG51bGxcbiAgICB9KTtcbiAgfVxuICBfaW5pdGlhbGl6ZUZvY3VzVHJhcCgpIHtcbiAgICByZXR1cm4gbmV3IEZvY3VzVHJhcCh7XG4gICAgICB0cmFwRWxlbWVudDogdGhpcy5fZWxlbWVudFxuICAgIH0pO1xuICB9XG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSBFU0NBUEVfS0VZKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10odGhpcyk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMSwgU0VMRUNUT1JfREFUQV9UT0dHTEUkMSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcyk7XG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9ISURERU4kMywgKCkgPT4ge1xuICAgIC8vIGZvY3VzIG9uIHRyaWdnZXIgd2hlbiBpdCBpcyBjbG9zZWRcbiAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBhdm9pZCBjb25mbGljdCB3aGVuIGNsaWNraW5nIGEgdG9nZ2xlciBvZiBhbiBvZmZjYW52YXMsIHdoaWxlIGFub3RoZXIgaXMgb3BlblxuICBjb25zdCBhbHJlYWR5T3BlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoT1BFTl9TRUxFQ1RPUik7XG4gIGlmIChhbHJlYWR5T3BlbiAmJiBhbHJlYWR5T3BlbiAhPT0gdGFyZ2V0KSB7XG4gICAgT2ZmY2FudmFzLmdldEluc3RhbmNlKGFscmVhZHlPcGVuKS5oaWRlKCk7XG4gIH1cbiAgY29uc3QgZGF0YSA9IE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldCk7XG4gIGRhdGEudG9nZ2xlKHRoaXMpO1xufSk7XG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJJDIsICgpID0+IHtcbiAgZm9yIChjb25zdCBzZWxlY3RvciBvZiBTZWxlY3RvckVuZ2luZS5maW5kKE9QRU5fU0VMRUNUT1IpKSB7XG4gICAgT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2Uoc2VsZWN0b3IpLnNob3coKTtcbiAgfVxufSk7XG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9SRVNJWkUsICgpID0+IHtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoJ1thcmlhLW1vZGFsXVtjbGFzcyo9c2hvd11bY2xhc3MqPW9mZmNhbnZhcy1dJykpIHtcbiAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiAhPT0gJ2ZpeGVkJykge1xuICAgICAgT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCkuaGlkZSgpO1xuICAgIH1cbiAgfVxufSk7XG5lbmFibGVEaXNtaXNzVHJpZ2dlcihPZmZjYW52YXMpO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihPZmZjYW52YXMpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9zYW5pdGl6ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vLyBqcy1kb2NzLXN0YXJ0IGFsbG93LWxpc3RcbmNvbnN0IEFSSUFfQVRUUklCVVRFX1BBVFRFUk4gPSAvXmFyaWEtW1xcdy1dKiQvaTtcbmNvbnN0IERlZmF1bHRBbGxvd2xpc3QgPSB7XG4gIC8vIEdsb2JhbCBhdHRyaWJ1dGVzIGFsbG93ZWQgb24gYW55IHN1cHBsaWVkIGVsZW1lbnQgYmVsb3cuXG4gICcqJzogWydjbGFzcycsICdkaXInLCAnaWQnLCAnbGFuZycsICdyb2xlJywgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTl0sXG4gIGE6IFsndGFyZ2V0JywgJ2hyZWYnLCAndGl0bGUnLCAncmVsJ10sXG4gIGFyZWE6IFtdLFxuICBiOiBbXSxcbiAgYnI6IFtdLFxuICBjb2w6IFtdLFxuICBjb2RlOiBbXSxcbiAgZGQ6IFtdLFxuICBkaXY6IFtdLFxuICBkbDogW10sXG4gIGR0OiBbXSxcbiAgZW06IFtdLFxuICBocjogW10sXG4gIGgxOiBbXSxcbiAgaDI6IFtdLFxuICBoMzogW10sXG4gIGg0OiBbXSxcbiAgaDU6IFtdLFxuICBoNjogW10sXG4gIGk6IFtdLFxuICBpbWc6IFsnc3JjJywgJ3NyY3NldCcsICdhbHQnLCAndGl0bGUnLCAnd2lkdGgnLCAnaGVpZ2h0J10sXG4gIGxpOiBbXSxcbiAgb2w6IFtdLFxuICBwOiBbXSxcbiAgcHJlOiBbXSxcbiAgczogW10sXG4gIHNtYWxsOiBbXSxcbiAgc3BhbjogW10sXG4gIHN1YjogW10sXG4gIHN1cDogW10sXG4gIHN0cm9uZzogW10sXG4gIHU6IFtdLFxuICB1bDogW11cbn07XG4vLyBqcy1kb2NzLWVuZCBhbGxvdy1saXN0XG5cbmNvbnN0IHVyaUF0dHJpYnV0ZXMgPSBuZXcgU2V0KFsnYmFja2dyb3VuZCcsICdjaXRlJywgJ2hyZWYnLCAnaXRlbXR5cGUnLCAnbG9uZ2Rlc2MnLCAncG9zdGVyJywgJ3NyYycsICd4bGluazpocmVmJ10pO1xuXG4vKipcbiAqIEEgcGF0dGVybiB0aGF0IHJlY29nbml6ZXMgVVJMcyB0aGF0IGFyZSBzYWZlIHdydC4gWFNTIGluIFVSTCBuYXZpZ2F0aW9uXG4gKiBjb250ZXh0cy5cbiAqXG4gKiBTaG91dC1vdXQgdG8gQW5ndWxhciBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvMTUuMi44L3BhY2thZ2VzL2NvcmUvc3JjL3Nhbml0aXphdGlvbi91cmxfc2FuaXRpemVyLnRzI0wzOFxuICovXG5jb25zdCBTQUZFX1VSTF9QQVRURVJOID0gL14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjovPyNdKig/OlsvPyNdfCQpKS9pO1xuY29uc3QgYWxsb3dlZEF0dHJpYnV0ZSA9IChhdHRyaWJ1dGUsIGFsbG93ZWRBdHRyaWJ1dGVMaXN0KSA9PiB7XG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgaWYgKHVyaUF0dHJpYnV0ZXMuaGFzKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICByZXR1cm4gQm9vbGVhbihTQUZFX1VSTF9QQVRURVJOLnRlc3QoYXR0cmlidXRlLm5vZGVWYWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGEgcmVndWxhciBleHByZXNzaW9uIHZhbGlkYXRlcyB0aGUgYXR0cmlidXRlLlxuICByZXR1cm4gYWxsb3dlZEF0dHJpYnV0ZUxpc3QuZmlsdGVyKGF0dHJpYnV0ZVJlZ2V4ID0+IGF0dHJpYnV0ZVJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKS5zb21lKHJlZ2V4ID0+IHJlZ2V4LnRlc3QoYXR0cmlidXRlTmFtZSkpO1xufTtcbmZ1bmN0aW9uIHNhbml0aXplSHRtbCh1bnNhZmVIdG1sLCBhbGxvd0xpc3QsIHNhbml0aXplRnVuY3Rpb24pIHtcbiAgaWYgKCF1bnNhZmVIdG1sLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnNhZmVIdG1sO1xuICB9XG4gIGlmIChzYW5pdGl6ZUZ1bmN0aW9uICYmIHR5cGVvZiBzYW5pdGl6ZUZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHNhbml0aXplRnVuY3Rpb24odW5zYWZlSHRtbCk7XG4gIH1cbiAgY29uc3QgZG9tUGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcbiAgY29uc3QgY3JlYXRlZERvY3VtZW50ID0gZG9tUGFyc2VyLnBhcnNlRnJvbVN0cmluZyh1bnNhZmVIdG1sLCAndGV4dC9odG1sJyk7XG4gIGNvbnN0IGVsZW1lbnRzID0gW10uY29uY2F0KC4uLmNyZWF0ZWREb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSk7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IGVsZW1lbnROYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghT2JqZWN0LmtleXMoYWxsb3dMaXN0KS5pbmNsdWRlcyhlbGVtZW50TmFtZSkpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgYXR0cmlidXRlTGlzdCA9IFtdLmNvbmNhdCguLi5lbGVtZW50LmF0dHJpYnV0ZXMpO1xuICAgIGNvbnN0IGFsbG93ZWRBdHRyaWJ1dGVzID0gW10uY29uY2F0KGFsbG93TGlzdFsnKiddIHx8IFtdLCBhbGxvd0xpc3RbZWxlbWVudE5hbWVdIHx8IFtdKTtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVMaXN0KSB7XG4gICAgICBpZiAoIWFsbG93ZWRBdHRyaWJ1dGUoYXR0cmlidXRlLCBhbGxvd2VkQXR0cmlidXRlcykpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlLm5vZGVOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZWREb2N1bWVudC5ib2R5LmlubmVySFRNTDtcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvdGVtcGxhdGUtZmFjdG9yeS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDUgPSAnVGVtcGxhdGVGYWN0b3J5JztcbmNvbnN0IERlZmF1bHQkNCA9IHtcbiAgYWxsb3dMaXN0OiBEZWZhdWx0QWxsb3dsaXN0LFxuICBjb250ZW50OiB7fSxcbiAgLy8geyBzZWxlY3RvciA6IHRleHQgLCAgc2VsZWN0b3IyIDogdGV4dDIgLCB9XG4gIGV4dHJhQ2xhc3M6ICcnLFxuICBodG1sOiBmYWxzZSxcbiAgc2FuaXRpemU6IHRydWUsXG4gIHNhbml0aXplRm46IG51bGwsXG4gIHRlbXBsYXRlOiAnPGRpdj48L2Rpdj4nXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkNCA9IHtcbiAgYWxsb3dMaXN0OiAnb2JqZWN0JyxcbiAgY29udGVudDogJ29iamVjdCcsXG4gIGV4dHJhQ2xhc3M6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIGh0bWw6ICdib29sZWFuJyxcbiAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgc2FuaXRpemVGbjogJyhudWxsfGZ1bmN0aW9uKScsXG4gIHRlbXBsYXRlOiAnc3RyaW5nJ1xufTtcbmNvbnN0IERlZmF1bHRDb250ZW50VHlwZSA9IHtcbiAgZW50cnk6ICcoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb258bnVsbCknLFxuICBzZWxlY3RvcjogJyhzdHJpbmd8ZWxlbWVudCknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUZW1wbGF0ZUZhY3RvcnkgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkNDtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ0O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ1O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fY29uZmlnLmNvbnRlbnQpLm1hcChjb25maWcgPT4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24oY29uZmlnKSkuZmlsdGVyKEJvb2xlYW4pO1xuICB9XG4gIGhhc0NvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGVudCgpLmxlbmd0aCA+IDA7XG4gIH1cbiAgY2hhbmdlQ29udGVudChjb250ZW50KSB7XG4gICAgdGhpcy5fY2hlY2tDb250ZW50KGNvbnRlbnQpO1xuICAgIHRoaXMuX2NvbmZpZy5jb250ZW50ID0ge1xuICAgICAgLi4udGhpcy5fY29uZmlnLmNvbnRlbnQsXG4gICAgICAuLi5jb250ZW50XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB0b0h0bWwoKSB7XG4gICAgY29uc3QgdGVtcGxhdGVXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGVtcGxhdGVXcmFwcGVyLmlubmVySFRNTCA9IHRoaXMuX21heWJlU2FuaXRpemUodGhpcy5fY29uZmlnLnRlbXBsYXRlKTtcbiAgICBmb3IgKGNvbnN0IFtzZWxlY3RvciwgdGV4dF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnLmNvbnRlbnQpKSB7XG4gICAgICB0aGlzLl9zZXRDb250ZW50KHRlbXBsYXRlV3JhcHBlciwgdGV4dCwgc2VsZWN0b3IpO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRlbXBsYXRlV3JhcHBlci5jaGlsZHJlblswXTtcbiAgICBjb25zdCBleHRyYUNsYXNzID0gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmV4dHJhQ2xhc3MpO1xuICAgIGlmIChleHRyYUNsYXNzKSB7XG4gICAgICB0ZW1wbGF0ZS5jbGFzc0xpc3QuYWRkKC4uLmV4dHJhQ2xhc3Muc3BsaXQoJyAnKSk7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX3R5cGVDaGVja0NvbmZpZyhjb25maWcpIHtcbiAgICBzdXBlci5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5fY2hlY2tDb250ZW50KGNvbmZpZy5jb250ZW50KTtcbiAgfVxuICBfY2hlY2tDb250ZW50KGFyZykge1xuICAgIGZvciAoY29uc3QgW3NlbGVjdG9yLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhhcmcpKSB7XG4gICAgICBzdXBlci5fdHlwZUNoZWNrQ29uZmlnKHtcbiAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgIGVudHJ5OiBjb250ZW50XG4gICAgICB9LCBEZWZhdWx0Q29udGVudFR5cGUpO1xuICAgIH1cbiAgfVxuICBfc2V0Q29udGVudCh0ZW1wbGF0ZSwgY29udGVudCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZUVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yLCB0ZW1wbGF0ZSk7XG4gICAgaWYgKCF0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29udGVudCA9IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGNvbnRlbnQpO1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNFbGVtZW50KGNvbnRlbnQpKSB7XG4gICAgICB0aGlzLl9wdXRFbGVtZW50SW5UZW1wbGF0ZShnZXRFbGVtZW50KGNvbnRlbnQpLCB0ZW1wbGF0ZUVsZW1lbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLmh0bWwpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLl9tYXliZVNhbml0aXplKGNvbnRlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ZW1wbGF0ZUVsZW1lbnQudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICB9XG4gIF9tYXliZVNhbml0aXplKGFyZykge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuc2FuaXRpemUgPyBzYW5pdGl6ZUh0bWwoYXJnLCB0aGlzLl9jb25maWcuYWxsb3dMaXN0LCB0aGlzLl9jb25maWcuc2FuaXRpemVGbikgOiBhcmc7XG4gIH1cbiAgX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBleGVjdXRlKGFyZywgW3VuZGVmaW5lZCwgdGhpc10pO1xuICB9XG4gIF9wdXRFbGVtZW50SW5UZW1wbGF0ZShlbGVtZW50LCB0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmh0bWwpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5hcHBlbmQoZWxlbWVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRlbXBsYXRlRWxlbWVudC50ZXh0Q29udGVudCA9IGVsZW1lbnQudGV4dENvbnRlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHRvb2x0aXAuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ0ID0gJ3Rvb2x0aXAnO1xuY29uc3QgRElTQUxMT1dFRF9BVFRSSUJVVEVTID0gbmV3IFNldChbJ3Nhbml0aXplJywgJ2FsbG93TGlzdCcsICdzYW5pdGl6ZUZuJ10pO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFJDIgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX01PREFMID0gJ21vZGFsJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQyID0gJ3Nob3cnO1xuY29uc3QgU0VMRUNUT1JfVE9PTFRJUF9JTk5FUiA9ICcudG9vbHRpcC1pbm5lcic7XG5jb25zdCBTRUxFQ1RPUl9NT0RBTCA9IGAuJHtDTEFTU19OQU1FX01PREFMfWA7XG5jb25zdCBFVkVOVF9NT0RBTF9ISURFID0gJ2hpZGUuYnMubW9kYWwnO1xuY29uc3QgVFJJR0dFUl9IT1ZFUiA9ICdob3Zlcic7XG5jb25zdCBUUklHR0VSX0ZPQ1VTID0gJ2ZvY3VzJztcbmNvbnN0IFRSSUdHRVJfQ0xJQ0sgPSAnY2xpY2snO1xuY29uc3QgVFJJR0dFUl9NQU5VQUwgPSAnbWFudWFsJztcbmNvbnN0IEVWRU5UX0hJREUkMiA9ICdoaWRlJztcbmNvbnN0IEVWRU5UX0hJRERFTiQyID0gJ2hpZGRlbic7XG5jb25zdCBFVkVOVF9TSE9XJDIgPSAnc2hvdyc7XG5jb25zdCBFVkVOVF9TSE9XTiQyID0gJ3Nob3duJztcbmNvbnN0IEVWRU5UX0lOU0VSVEVEID0gJ2luc2VydGVkJztcbmNvbnN0IEVWRU5UX0NMSUNLJDEgPSAnY2xpY2snO1xuY29uc3QgRVZFTlRfRk9DVVNJTiQxID0gJ2ZvY3VzaW4nO1xuY29uc3QgRVZFTlRfRk9DVVNPVVQkMSA9ICdmb2N1c291dCc7XG5jb25zdCBFVkVOVF9NT1VTRUVOVEVSID0gJ21vdXNlZW50ZXInO1xuY29uc3QgRVZFTlRfTU9VU0VMRUFWRSA9ICdtb3VzZWxlYXZlJztcbmNvbnN0IEF0dGFjaG1lbnRNYXAgPSB7XG4gIEFVVE86ICdhdXRvJyxcbiAgVE9QOiAndG9wJyxcbiAgUklHSFQ6IGlzUlRMKCkgPyAnbGVmdCcgOiAncmlnaHQnLFxuICBCT1RUT006ICdib3R0b20nLFxuICBMRUZUOiBpc1JUTCgpID8gJ3JpZ2h0JyA6ICdsZWZ0J1xufTtcbmNvbnN0IERlZmF1bHQkMyA9IHtcbiAgYWxsb3dMaXN0OiBEZWZhdWx0QWxsb3dsaXN0LFxuICBhbmltYXRpb246IHRydWUsXG4gIGJvdW5kYXJ5OiAnY2xpcHBpbmdQYXJlbnRzJyxcbiAgY29udGFpbmVyOiBmYWxzZSxcbiAgY3VzdG9tQ2xhc3M6ICcnLFxuICBkZWxheTogMCxcbiAgZmFsbGJhY2tQbGFjZW1lbnRzOiBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLFxuICBodG1sOiBmYWxzZSxcbiAgb2Zmc2V0OiBbMCwgNl0sXG4gIHBsYWNlbWVudDogJ3RvcCcsXG4gIHBvcHBlckNvbmZpZzogbnVsbCxcbiAgc2FuaXRpemU6IHRydWUsXG4gIHNhbml0aXplRm46IG51bGwsXG4gIHNlbGVjdG9yOiBmYWxzZSxcbiAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+JyArICc8ZGl2IGNsYXNzPVwidG9vbHRpcC1hcnJvd1wiPjwvZGl2PicgKyAnPGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj4nICsgJzwvZGl2PicsXG4gIHRpdGxlOiAnJyxcbiAgdHJpZ2dlcjogJ2hvdmVyIGZvY3VzJ1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDMgPSB7XG4gIGFsbG93TGlzdDogJ29iamVjdCcsXG4gIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICBjb250YWluZXI6ICcoc3RyaW5nfGVsZW1lbnR8Ym9vbGVhbiknLFxuICBjdXN0b21DbGFzczogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgZGVsYXk6ICcobnVtYmVyfG9iamVjdCknLFxuICBmYWxsYmFja1BsYWNlbWVudHM6ICdhcnJheScsXG4gIGh0bWw6ICdib29sZWFuJyxcbiAgb2Zmc2V0OiAnKGFycmF5fHN0cmluZ3xmdW5jdGlvbiknLFxuICBwbGFjZW1lbnQ6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIHBvcHBlckNvbmZpZzogJyhudWxsfG9iamVjdHxmdW5jdGlvbiknLFxuICBzYW5pdGl6ZTogJ2Jvb2xlYW4nLFxuICBzYW5pdGl6ZUZuOiAnKG51bGx8ZnVuY3Rpb24pJyxcbiAgc2VsZWN0b3I6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgdGVtcGxhdGU6ICdzdHJpbmcnLFxuICB0aXRsZTogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknLFxuICB0cmlnZ2VyOiAnc3RyaW5nJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVG9vbHRpcCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLyknKTtcbiAgICB9XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcblxuICAgIC8vIFByaXZhdGVcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuX3RpbWVvdXQgPSAwO1xuICAgIHRoaXMuX2lzSG92ZXJlZCA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlciA9IHt9O1xuICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5ID0gbnVsbDtcbiAgICB0aGlzLl9uZXdDb250ZW50ID0gbnVsbDtcblxuICAgIC8vIFByb3RlY3RlZFxuICAgIHRoaXMudGlwID0gbnVsbDtcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKTtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5zZWxlY3Rvcikge1xuICAgICAgdGhpcy5fZml4VGl0bGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQzO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDM7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDQ7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZW5hYmxlKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWU7XG4gIH1cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSBmYWxzZTtcbiAgfVxuICB0b2dnbGVFbmFibGVkKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9ICF0aGlzLl9pc0VuYWJsZWQ7XG4gIH1cbiAgdG9nZ2xlKCkge1xuICAgIGlmICghdGhpcy5faXNFbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuX2xlYXZlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2VudGVyKCk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKTtcbiAgICBpZiAodGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKSk7XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKTtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHVzZSBzaG93IG9uIHZpc2libGUgZWxlbWVudHMnKTtcbiAgICB9XG4gICAgaWYgKCEodGhpcy5faXNXaXRoQ29udGVudCgpICYmIHRoaXMuX2lzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfU0hPVyQyKSk7XG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGZpbmRTaGFkb3dSb290KHRoaXMuX2VsZW1lbnQpO1xuICAgIGNvbnN0IGlzSW5UaGVEb20gPSAoc2hhZG93Um9vdCB8fCB0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jb250YWlucyh0aGlzLl9lbGVtZW50KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIWlzSW5UaGVEb20pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiB2NiByZW1vdmUgdGhpcyBvciBtYWtlIGl0IG9wdGlvbmFsXG4gICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpO1xuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRpcEVsZW1lbnQoKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRpcC5nZXRBdHRyaWJ1dGUoJ2lkJykpO1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRhaW5lclxuICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMudGlwKSkge1xuICAgICAgY29udGFpbmVyLmFwcGVuZCh0aXApO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfSU5TRVJURUQpKTtcbiAgICB9XG4gICAgdGhpcy5fcG9wcGVyID0gdGhpcy5fY3JlYXRlUG9wcGVyKHRpcCk7XG4gICAgdGlwLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDIpO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfU0hPV04kMikpO1xuICAgICAgaWYgKHRoaXMuX2lzSG92ZXJlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fbGVhdmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzSG92ZXJlZCA9IGZhbHNlO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy50aXAsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9ISURFJDIpKTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGlwID0gdGhpcy5fZ2V0VGlwRWxlbWVudCgpO1xuICAgIHRpcC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQyKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyW1RSSUdHRVJfQ0xJQ0tdID0gZmFsc2U7XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0ZPQ1VTXSA9IGZhbHNlO1xuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9IT1ZFUl0gPSBmYWxzZTtcbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBudWxsOyAvLyBpdCBpcyBhIHRyaWNrIHRvIHN1cHBvcnQgbWFudWFsIHRyaWdnZXJpbmdcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfSElEREVOJDIpKTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICB9XG4gIHVwZGF0ZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIudXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJvdGVjdGVkXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2dldFRpdGxlKCkpO1xuICB9XG4gIF9nZXRUaXBFbGVtZW50KCkge1xuICAgIGlmICghdGhpcy50aXApIHtcbiAgICAgIHRoaXMudGlwID0gdGhpcy5fY3JlYXRlVGlwRWxlbWVudCh0aGlzLl9uZXdDb250ZW50IHx8IHRoaXMuX2dldENvbnRlbnRGb3JUZW1wbGF0ZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudGlwO1xuICB9XG4gIF9jcmVhdGVUaXBFbGVtZW50KGNvbnRlbnQpIHtcbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUZW1wbGF0ZUZhY3RvcnkoY29udGVudCkudG9IdG1sKCk7XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBjaGVjayBpbiB2NlxuICAgIGlmICghdGlwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9GQURFJDIsIENMQVNTX05BTUVfU0hPVyQyKTtcbiAgICAvLyBUT0RPOiB2NiB0aGUgZm9sbG93aW5nIGNhbiBiZSBhY2hpZXZlZCB3aXRoIENTUyBvbmx5XG4gICAgdGlwLmNsYXNzTGlzdC5hZGQoYGJzLSR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfS1hdXRvYCk7XG4gICAgY29uc3QgdGlwSWQgPSBnZXRVSUQodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKS50b1N0cmluZygpO1xuICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGlwSWQpO1xuICAgIGlmICh0aGlzLl9pc0FuaW1hdGVkKCkpIHtcbiAgICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSQyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRpcDtcbiAgfVxuICBzZXRDb250ZW50KGNvbnRlbnQpIHtcbiAgICB0aGlzLl9uZXdDb250ZW50ID0gY29udGVudDtcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKCk7XG4gICAgICB0aGlzLnNob3coKTtcbiAgICB9XG4gIH1cbiAgX2dldFRlbXBsYXRlRmFjdG9yeShjb250ZW50KSB7XG4gICAgaWYgKHRoaXMuX3RlbXBsYXRlRmFjdG9yeSkge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5LmNoYW5nZUNvbnRlbnQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RlbXBsYXRlRmFjdG9yeSA9IG5ldyBUZW1wbGF0ZUZhY3Rvcnkoe1xuICAgICAgICAuLi50aGlzLl9jb25maWcsXG4gICAgICAgIC8vIHRoZSBgY29udGVudGAgdmFyIGhhcyB0byBiZSBhZnRlciBgdGhpcy5fY29uZmlnYFxuICAgICAgICAvLyB0byBvdmVycmlkZSBjb25maWcuY29udGVudCBpbiBjYXNlIG9mIHBvcG92ZXJcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgZXh0cmFDbGFzczogdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmN1c3RvbUNsYXNzKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZUZhY3Rvcnk7XG4gIH1cbiAgX2dldENvbnRlbnRGb3JUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW1NFTEVDVE9SX1RPT0xUSVBfSU5ORVJdOiB0aGlzLl9nZXRUaXRsZSgpXG4gICAgfTtcbiAgfVxuICBfZ2V0VGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy50aXRsZSkgfHwgdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCkge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmdldE9yQ3JlYXRlSW5zdGFuY2UoZXZlbnQuZGVsZWdhdGVUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICB9XG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuYW5pbWF0aW9uIHx8IHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkMik7XG4gIH1cbiAgX2lzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1ckMik7XG4gIH1cbiAgX2NyZWF0ZVBvcHBlcih0aXApIHtcbiAgICBjb25zdCBwbGFjZW1lbnQgPSBleGVjdXRlKHRoaXMuX2NvbmZpZy5wbGFjZW1lbnQsIFt0aGlzLCB0aXAsIHRoaXMuX2VsZW1lbnRdKTtcbiAgICBjb25zdCBhdHRhY2htZW50ID0gQXR0YWNobWVudE1hcFtwbGFjZW1lbnQudG9VcHBlckNhc2UoKV07XG4gICAgcmV0dXJuIFBvcHBlci5jcmVhdGVQb3BwZXIodGhpcy5fZWxlbWVudCwgdGlwLCB0aGlzLl9nZXRQb3BwZXJDb25maWcoYXR0YWNobWVudCkpO1xuICB9XG4gIF9nZXRPZmZzZXQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgb2Zmc2V0XG4gICAgfSA9IHRoaXMuX2NvbmZpZztcbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBvZmZzZXQuc3BsaXQoJywnKS5tYXAodmFsdWUgPT4gTnVtYmVyLnBhcnNlSW50KHZhbHVlLCAxMCkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHBvcHBlckRhdGEgPT4gb2Zmc2V0KHBvcHBlckRhdGEsIHRoaXMuX2VsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG4gIF9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZXhlY3V0ZShhcmcsIFt0aGlzLl9lbGVtZW50LCB0aGlzLl9lbGVtZW50XSk7XG4gIH1cbiAgX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSB7XG4gICAgY29uc3QgZGVmYXVsdEJzUG9wcGVyQ29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50OiBhdHRhY2htZW50LFxuICAgICAgbW9kaWZpZXJzOiBbe1xuICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBmYWxsYmFja1BsYWNlbWVudHM6IHRoaXMuX2NvbmZpZy5mYWxsYmFja1BsYWNlbWVudHNcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIG9mZnNldDogdGhpcy5fZ2V0T2Zmc2V0KClcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgZWxlbWVudDogYC4ke3RoaXMuY29uc3RydWN0b3IuTkFNRX0tYXJyb3dgXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ3ByZVNldFBsYWNlbWVudCcsXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIHBoYXNlOiAnYmVmb3JlTWFpbicsXG4gICAgICAgIGZuOiBkYXRhID0+IHtcbiAgICAgICAgICAvLyBQcmUtc2V0IFBvcHBlcidzIHBsYWNlbWVudCBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gcmVhZCB0aGUgYXJyb3cgc2l6ZXMgcHJvcGVybHkuXG4gICAgICAgICAgLy8gT3RoZXJ3aXNlLCBQb3BwZXIgbWl4ZXMgdXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgZGltZW5zaW9ucyBzaW5jZSB0aGUgaW5pdGlhbCBhcnJvdyBzdHlsZSBpcyBmb3IgdG9wIHBsYWNlbWVudFxuICAgICAgICAgIHRoaXMuX2dldFRpcEVsZW1lbnQoKS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCcsIGRhdGEuc3RhdGUucGxhY2VtZW50KTtcbiAgICAgICAgfVxuICAgICAgfV1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0QnNQb3BwZXJDb25maWcsXG4gICAgICAuLi5leGVjdXRlKHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcsIFt1bmRlZmluZWQsIGRlZmF1bHRCc1BvcHBlckNvbmZpZ10pXG4gICAgfTtcbiAgfVxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IHRyaWdnZXJzID0gdGhpcy5fY29uZmlnLnRyaWdnZXIuc3BsaXQoJyAnKTtcbiAgICBmb3IgKGNvbnN0IHRyaWdnZXIgb2YgdHJpZ2dlcnMpIHtcbiAgICAgIGlmICh0cmlnZ2VyID09PSAnY2xpY2snKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9DTElDSyQxKSwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCk7XG4gICAgICAgICAgY29udGV4dC5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0NMSUNLXSA9ICEoY29udGV4dC5faXNTaG93bigpICYmIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9DTElDS10pO1xuICAgICAgICAgIGNvbnRleHQudG9nZ2xlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0cmlnZ2VyICE9PSBUUklHR0VSX01BTlVBTCkge1xuICAgICAgICBjb25zdCBldmVudEluID0gdHJpZ2dlciA9PT0gVFJJR0dFUl9IT1ZFUiA/IHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX01PVVNFRU5URVIpIDogdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfRk9DVVNJTiQxKTtcbiAgICAgICAgY29uc3QgZXZlbnRPdXQgPSB0cmlnZ2VyID09PSBUUklHR0VSX0hPVkVSID8gdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfTU9VU0VMRUFWRSkgOiB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU09VVCQxKTtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIGV2ZW50SW4sIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpO1xuICAgICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXJbZXZlbnQudHlwZSA9PT0gJ2ZvY3VzaW4nID8gVFJJR0dFUl9GT0NVUyA6IFRSSUdHRVJfSE9WRVJdID0gdHJ1ZTtcbiAgICAgICAgICBjb250ZXh0Ll9lbnRlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIGV2ZW50T3V0LCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KTtcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUUklHR0VSX0ZPQ1VTIDogVFJJR0dFUl9IT1ZFUl0gPSBjb250ZXh0Ll9lbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICAgIGNvbnRleHQuX2xlYXZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX01PREFMKSwgRVZFTlRfTU9EQUxfSElERSwgdGhpcy5faGlkZU1vZGFsSGFuZGxlcik7XG4gIH1cbiAgX2ZpeFRpdGxlKCkge1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgaWYgKCF0aXRsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykgJiYgIXRoaXMuX2VsZW1lbnQudGV4dENvbnRlbnQudHJpbSgpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKTtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnLCB0aXRsZSk7IC8vIERPIE5PVCBVU0UgSVQuIElzIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gIH1cbiAgX2VudGVyKCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkgfHwgdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlO1xuICAgIHRoaXMuX3NldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLnNob3coKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkuc2hvdyk7XG4gIH1cbiAgX2xlYXZlKCkge1xuICAgIGlmICh0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNIb3ZlcmVkID0gZmFsc2U7XG4gICAgdGhpcy5fc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkuaGlkZSk7XG4gIH1cbiAgX3NldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dChoYW5kbGVyLCB0aW1lb3V0KTtcbiAgfVxuICBfaXNXaXRoQWN0aXZlVHJpZ2dlcigpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9hY3RpdmVUcmlnZ2VyKS5pbmNsdWRlcyh0cnVlKTtcbiAgfVxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbnN0IGRhdGFBdHRyaWJ1dGVzID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCk7XG4gICAgZm9yIChjb25zdCBkYXRhQXR0cmlidXRlIG9mIE9iamVjdC5rZXlzKGRhdGFBdHRyaWJ1dGVzKSkge1xuICAgICAgaWYgKERJU0FMTE9XRURfQVRUUklCVVRFUy5oYXMoZGF0YUF0dHJpYnV0ZSkpIHtcbiAgICAgICAgZGVsZXRlIGRhdGFBdHRyaWJ1dGVzW2RhdGFBdHRyaWJ1dGVdO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5kYXRhQXR0cmlidXRlcyxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSlcbiAgICB9O1xuICAgIGNvbmZpZyA9IHRoaXMuX21lcmdlQ29uZmlnT2JqKGNvbmZpZyk7XG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgIHRoaXMuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLmNvbnRhaW5lciA9IGNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlID8gZG9jdW1lbnQuYm9keSA6IGdldEVsZW1lbnQoY29uZmlnLmNvbnRhaW5lcik7XG4gICAgaWYgKHR5cGVvZiBjb25maWcuZGVsYXkgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcuZGVsYXkgPSB7XG4gICAgICAgIHNob3c6IGNvbmZpZy5kZWxheSxcbiAgICAgICAgaGlkZTogY29uZmlnLmRlbGF5XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbmZpZy50aXRsZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbmZpZy50aXRsZSA9IGNvbmZpZy50aXRsZS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5jb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmNvbnRlbnQgPSBjb25maWcuY29udGVudC50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9nZXREZWxlZ2F0ZUNvbmZpZygpIHtcbiAgICBjb25zdCBjb25maWcgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcpKSB7XG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgIGNvbmZpZ1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbmZpZy5zZWxlY3RvciA9IGZhbHNlO1xuICAgIGNvbmZpZy50cmlnZ2VyID0gJ21hbnVhbCc7XG5cbiAgICAvLyBJbiB0aGUgZnV0dXJlIGNhbiBiZSByZXBsYWNlZCB3aXRoOlxuICAgIC8vIGNvbnN0IGtleXNXaXRoRGlmZmVyZW50VmFsdWVzID0gT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnKS5maWx0ZXIoZW50cnkgPT4gdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2VudHJ5WzBdXSAhPT0gdGhpcy5fY29uZmlnW2VudHJ5WzBdXSlcbiAgICAvLyBgT2JqZWN0LmZyb21FbnRyaWVzKGtleXNXaXRoRGlmZmVyZW50VmFsdWVzKWBcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9kaXNwb3NlUG9wcGVyKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy50aXApIHtcbiAgICAgIHRoaXMudGlwLnJlbW92ZSgpO1xuICAgICAgdGhpcy50aXAgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvb2x0aXAuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oVG9vbHRpcCk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBwb3BvdmVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkMyA9ICdwb3BvdmVyJztcbmNvbnN0IFNFTEVDVE9SX1RJVExFID0gJy5wb3BvdmVyLWhlYWRlcic7XG5jb25zdCBTRUxFQ1RPUl9DT05URU5UID0gJy5wb3BvdmVyLWJvZHknO1xuY29uc3QgRGVmYXVsdCQyID0ge1xuICAuLi5Ub29sdGlwLkRlZmF1bHQsXG4gIGNvbnRlbnQ6ICcnLFxuICBvZmZzZXQ6IFswLCA4XSxcbiAgcGxhY2VtZW50OiAncmlnaHQnLFxuICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJwb3BvdmVyXCIgcm9sZT1cInRvb2x0aXBcIj4nICsgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWFycm93XCI+PC9kaXY+JyArICc8aDMgY2xhc3M9XCJwb3BvdmVyLWhlYWRlclwiPjwvaDM+JyArICc8ZGl2IGNsYXNzPVwicG9wb3Zlci1ib2R5XCI+PC9kaXY+JyArICc8L2Rpdj4nLFxuICB0cmlnZ2VyOiAnY2xpY2snXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkMiA9IHtcbiAgLi4uVG9vbHRpcC5EZWZhdWx0VHlwZSxcbiAgY29udGVudDogJyhudWxsfHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFBvcG92ZXIgZXh0ZW5kcyBUb29sdGlwIHtcbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkMjtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQyO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQzO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGVzXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUaXRsZSgpIHx8IHRoaXMuX2dldENvbnRlbnQoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2dldENvbnRlbnRGb3JUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW1NFTEVDVE9SX1RJVExFXTogdGhpcy5fZ2V0VGl0bGUoKSxcbiAgICAgIFtTRUxFQ1RPUl9DT05URU5UXTogdGhpcy5fZ2V0Q29udGVudCgpXG4gICAgfTtcbiAgfVxuICBfZ2V0Q29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmNvbnRlbnQpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gUG9wb3Zlci5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihQb3BvdmVyKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHNjcm9sbHNweS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDIgPSAnc2Nyb2xsc3B5JztcbmNvbnN0IERBVEFfS0VZJDIgPSAnYnMuc2Nyb2xsc3B5JztcbmNvbnN0IEVWRU5UX0tFWSQyID0gYC4ke0RBVEFfS0VZJDJ9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuY29uc3QgRVZFTlRfQUNUSVZBVEUgPSBgYWN0aXZhdGUke0VWRU5UX0tFWSQyfWA7XG5jb25zdCBFVkVOVF9DTElDSyA9IGBjbGljayR7RVZFTlRfS0VZJDJ9YDtcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkkMSA9IGBsb2FkJHtFVkVOVF9LRVkkMn0ke0RBVEFfQVBJX0tFWX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRE9XTl9JVEVNID0gJ2Ryb3Bkb3duLWl0ZW0nO1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUkMSA9ICdhY3RpdmUnO1xuY29uc3QgU0VMRUNUT1JfREFUQV9TUFkgPSAnW2RhdGEtYnMtc3B5PVwic2Nyb2xsXCJdJztcbmNvbnN0IFNFTEVDVE9SX1RBUkdFVF9MSU5LUyA9ICdbaHJlZl0nO1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAgPSAnLm5hdiwgLmxpc3QtZ3JvdXAnO1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJTktTID0gJy5uYXYtbGluayc7XG5jb25zdCBTRUxFQ1RPUl9OQVZfSVRFTVMgPSAnLm5hdi1pdGVtJztcbmNvbnN0IFNFTEVDVE9SX0xJU1RfSVRFTVMgPSAnLmxpc3QtZ3JvdXAtaXRlbSc7XG5jb25zdCBTRUxFQ1RPUl9MSU5LX0lURU1TID0gYCR7U0VMRUNUT1JfTkFWX0xJTktTfSwgJHtTRUxFQ1RPUl9OQVZfSVRFTVN9ID4gJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX0xJU1RfSVRFTVN9YDtcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOID0gJy5kcm9wZG93bic7XG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUkMSA9ICcuZHJvcGRvd24tdG9nZ2xlJztcbmNvbnN0IERlZmF1bHQkMSA9IHtcbiAgb2Zmc2V0OiBudWxsLFxuICAvLyBUT0RPOiB2NiBAZGVwcmVjYXRlZCwga2VlcCBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29uc1xuICByb290TWFyZ2luOiAnMHB4IDBweCAtMjUlJyxcbiAgc21vb3RoU2Nyb2xsOiBmYWxzZSxcbiAgdGFyZ2V0OiBudWxsLFxuICB0aHJlc2hvbGQ6IFswLjEsIDAuNSwgMV1cbn07XG5jb25zdCBEZWZhdWx0VHlwZSQxID0ge1xuICBvZmZzZXQ6ICcobnVtYmVyfG51bGwpJyxcbiAgLy8gVE9ETyB2NiBAZGVwcmVjYXRlZCwga2VlcCBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29uc1xuICByb290TWFyZ2luOiAnc3RyaW5nJyxcbiAgc21vb3RoU2Nyb2xsOiAnYm9vbGVhbicsXG4gIHRhcmdldDogJ2VsZW1lbnQnLFxuICB0aHJlc2hvbGQ6ICdhcnJheSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFNjcm9sbFNweSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuXG4gICAgLy8gdGhpcy5fZWxlbWVudCBpcyB0aGUgb2JzZXJ2YWJsZXNDb250YWluZXIgYW5kIGNvbmZpZy50YXJnZXQgdGhlIG1lbnUgbGlua3Mgd3JhcHBlclxuICAgIHRoaXMuX3RhcmdldExpbmtzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9yb290RWxlbWVudCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fZWxlbWVudCkub3ZlcmZsb3dZID09PSAndmlzaWJsZScgPyBudWxsIDogdGhpcy5fZWxlbWVudDtcbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX29ic2VydmVyID0gbnVsbDtcbiAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEgPSB7XG4gICAgICB2aXNpYmxlRW50cnlUb3A6IDAsXG4gICAgICBwYXJlbnRTY3JvbGxUb3A6IDBcbiAgICB9O1xuICAgIHRoaXMucmVmcmVzaCgpOyAvLyBpbml0aWFsaXplXG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQxO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDE7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDI7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLl9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzKCk7XG4gICAgdGhpcy5fbWF5YmVFbmFibGVTbW9vdGhTY3JvbGwoKTtcbiAgICBpZiAodGhpcy5fb2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXIgPSB0aGlzLl9nZXROZXdPYnNlcnZlcigpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHNlY3Rpb24pO1xuICAgIH1cbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIC8vIFRPRE86IG9uIHY2IHRhcmdldCBzaG91bGQgYmUgZ2l2ZW4gZXhwbGljaXRseSAmIHJlbW92ZSB0aGUge3RhcmdldDogJ3NzLXRhcmdldCd9IGNhc2VcbiAgICBjb25maWcudGFyZ2V0ID0gZ2V0RWxlbWVudChjb25maWcudGFyZ2V0KSB8fCBkb2N1bWVudC5ib2R5O1xuXG4gICAgLy8gVE9ETzogdjYgT25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gVXNlIHJvb3RNYXJnaW4gb25seVxuICAgIGNvbmZpZy5yb290TWFyZ2luID0gY29uZmlnLm9mZnNldCA/IGAke2NvbmZpZy5vZmZzZXR9cHggMHB4IC0zMCVgIDogY29uZmlnLnJvb3RNYXJnaW47XG4gICAgaWYgKHR5cGVvZiBjb25maWcudGhyZXNob2xkID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnLnRocmVzaG9sZCA9IGNvbmZpZy50aHJlc2hvbGQuc3BsaXQoJywnKS5tYXAodmFsdWUgPT4gTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfbWF5YmVFbmFibGVTbW9vdGhTY3JvbGwoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuc21vb3RoU2Nyb2xsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdW5yZWdpc3RlciBhbnkgcHJldmlvdXMgbGlzdGVuZXJzXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9jb25maWcudGFyZ2V0LCBFVkVOVF9DTElDSyk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2NvbmZpZy50YXJnZXQsIEVWRU5UX0NMSUNLLCBTRUxFQ1RPUl9UQVJHRVRfTElOS1MsIGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IG9ic2VydmFibGVTZWN0aW9uID0gdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLmdldChldmVudC50YXJnZXQuaGFzaCk7XG4gICAgICBpZiAob2JzZXJ2YWJsZVNlY3Rpb24pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX3Jvb3RFbGVtZW50IHx8IHdpbmRvdztcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gb2JzZXJ2YWJsZVNlY3Rpb24ub2Zmc2V0VG9wIC0gdGhpcy5fZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIGlmIChyb290LnNjcm9sbFRvKSB7XG4gICAgICAgICAgcm9vdC5zY3JvbGxUbyh7XG4gICAgICAgICAgICB0b3A6IGhlaWdodCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENocm9tZSA2MCBkb2Vzbid0IHN1cHBvcnQgYHNjcm9sbFRvYFxuICAgICAgICByb290LnNjcm9sbFRvcCA9IGhlaWdodDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBfZ2V0TmV3T2JzZXJ2ZXIoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IHRoaXMuX3Jvb3RFbGVtZW50LFxuICAgICAgdGhyZXNob2xkOiB0aGlzLl9jb25maWcudGhyZXNob2xkLFxuICAgICAgcm9vdE1hcmdpbjogdGhpcy5fY29uZmlnLnJvb3RNYXJnaW5cbiAgICB9O1xuICAgIHJldHVybiBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZW50cmllcyA9PiB0aGlzLl9vYnNlcnZlckNhbGxiYWNrKGVudHJpZXMpLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIFRoZSBsb2dpYyBvZiBzZWxlY3Rpb25cbiAgX29ic2VydmVyQ2FsbGJhY2soZW50cmllcykge1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlbnRyeSA9PiB0aGlzLl90YXJnZXRMaW5rcy5nZXQoYCMke2VudHJ5LnRhcmdldC5pZH1gKTtcbiAgICBjb25zdCBhY3RpdmF0ZSA9IGVudHJ5ID0+IHtcbiAgICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS52aXNpYmxlRW50cnlUb3AgPSBlbnRyeS50YXJnZXQub2Zmc2V0VG9wO1xuICAgICAgdGhpcy5fcHJvY2Vzcyh0YXJnZXRFbGVtZW50KGVudHJ5KSk7XG4gICAgfTtcbiAgICBjb25zdCBwYXJlbnRTY3JvbGxUb3AgPSAodGhpcy5fcm9vdEVsZW1lbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5zY3JvbGxUb3A7XG4gICAgY29uc3QgdXNlclNjcm9sbHNEb3duID0gcGFyZW50U2Nyb2xsVG9wID49IHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS5wYXJlbnRTY3JvbGxUb3A7XG4gICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnBhcmVudFNjcm9sbFRvcCA9IHBhcmVudFNjcm9sbFRvcDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGlmICghZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fY2xlYXJBY3RpdmVDbGFzcyh0YXJnZXRFbGVtZW50KGVudHJ5KSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZW50cnlJc0xvd2VyVGhhblByZXZpb3VzID0gZW50cnkudGFyZ2V0Lm9mZnNldFRvcCA+PSB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEudmlzaWJsZUVudHJ5VG9wO1xuICAgICAgLy8gaWYgd2UgYXJlIHNjcm9sbGluZyBkb3duLCBwaWNrIHRoZSBiaWdnZXIgb2Zmc2V0VG9wXG4gICAgICBpZiAodXNlclNjcm9sbHNEb3duICYmIGVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSk7XG4gICAgICAgIC8vIGlmIHBhcmVudCBpc24ndCBzY3JvbGxlZCwgbGV0J3Mga2VlcCB0aGUgZmlyc3QgdmlzaWJsZSBpdGVtLCBicmVha2luZyB0aGUgaXRlcmF0aW9uXG4gICAgICAgIGlmICghcGFyZW50U2Nyb2xsVG9wKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB3ZSBhcmUgc2Nyb2xsaW5nIHVwLCBwaWNrIHRoZSBzbWFsbGVzdCBvZmZzZXRUb3BcbiAgICAgIGlmICghdXNlclNjcm9sbHNEb3duICYmICFlbnRyeUlzTG93ZXJUaGFuUHJldmlvdXMpIHtcbiAgICAgICAgYWN0aXZhdGUoZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfaW5pdGlhbGl6ZVRhcmdldHNBbmRPYnNlcnZhYmxlcygpIHtcbiAgICB0aGlzLl90YXJnZXRMaW5rcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgdGFyZ2V0TGlua3MgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX1RBUkdFVF9MSU5LUywgdGhpcy5fY29uZmlnLnRhcmdldCk7XG4gICAgZm9yIChjb25zdCBhbmNob3Igb2YgdGFyZ2V0TGlua3MpIHtcbiAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBhbmNob3IgaGFzIGFuIGlkIGFuZCBpcyBub3QgZGlzYWJsZWRcbiAgICAgIGlmICghYW5jaG9yLmhhc2ggfHwgaXNEaXNhYmxlZChhbmNob3IpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2JzZXJ2YWJsZVNlY3Rpb24gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKGRlY29kZVVSSShhbmNob3IuaGFzaCksIHRoaXMuX2VsZW1lbnQpO1xuXG4gICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgb2JzZXJ2YWJsZVNlY3Rpb24gZXhpc3RzICYgaXMgdmlzaWJsZVxuICAgICAgaWYgKGlzVmlzaWJsZShvYnNlcnZhYmxlU2VjdGlvbikpIHtcbiAgICAgICAgdGhpcy5fdGFyZ2V0TGlua3Muc2V0KGRlY29kZVVSSShhbmNob3IuaGFzaCksIGFuY2hvcik7XG4gICAgICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucy5zZXQoYW5jaG9yLmhhc2gsIG9ic2VydmFibGVTZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX3Byb2Nlc3ModGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCA9PT0gdGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NsZWFyQWN0aXZlQ2xhc3ModGhpcy5fY29uZmlnLnRhcmdldCk7XG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHRhcmdldC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgIHRoaXMuX2FjdGl2YXRlUGFyZW50cyh0YXJnZXQpO1xuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0FDVElWQVRFLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiB0YXJnZXRcbiAgICB9KTtcbiAgfVxuICBfYWN0aXZhdGVQYXJlbnRzKHRhcmdldCkge1xuICAgIC8vIEFjdGl2YXRlIGRyb3Bkb3duIHBhcmVudHNcbiAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BET1dOX0lURU0pKSB7XG4gICAgICBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSQxLCB0YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9EUk9QRE9XTikpLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgbGlzdEdyb3VwIG9mIFNlbGVjdG9yRW5naW5lLnBhcmVudHModGFyZ2V0LCBTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCkpIHtcbiAgICAgIC8vIFNldCB0cmlnZ2VyZWQgbGlua3MgcGFyZW50cyBhcyBhY3RpdmVcbiAgICAgIC8vIFdpdGggYm90aCA8dWw+IGFuZCA8bmF2PiBtYXJrdXAgYSBwYXJlbnQgaXMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgYW55IG5hdiBhbmNlc3RvclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIFNlbGVjdG9yRW5naW5lLnByZXYobGlzdEdyb3VwLCBTRUxFQ1RPUl9MSU5LX0lURU1TKSkge1xuICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9jbGVhckFjdGl2ZUNsYXNzKHBhcmVudCkge1xuICAgIHBhcmVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgIGNvbnN0IGFjdGl2ZU5vZGVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChgJHtTRUxFQ1RPUl9UQVJHRVRfTElOS1N9LiR7Q0xBU1NfTkFNRV9BQ1RJVkUkMX1gLCBwYXJlbnQpO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBhY3RpdmVOb2Rlcykge1xuICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFNjcm9sbFNweS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSQxLCAoKSA9PiB7XG4gIGZvciAoY29uc3Qgc3B5IG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9TUFkpKSB7XG4gICAgU2Nyb2xsU3B5LmdldE9yQ3JlYXRlSW5zdGFuY2Uoc3B5KTtcbiAgfVxufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFNjcm9sbFNweSk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB0YWIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQxID0gJ3RhYic7XG5jb25zdCBEQVRBX0tFWSQxID0gJ2JzLnRhYic7XG5jb25zdCBFVkVOVF9LRVkkMSA9IGAuJHtEQVRBX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9ISURFJDEgPSBgaGlkZSR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQxID0gYGhpZGRlbiR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX1NIT1ckMSA9IGBzaG93JHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfU0hPV04kMSA9IGBzaG93biR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTiA9IGBrZXlkb3duJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgQVJST1dfTEVGVF9LRVkgPSAnQXJyb3dMZWZ0JztcbmNvbnN0IEFSUk9XX1JJR0hUX0tFWSA9ICdBcnJvd1JpZ2h0JztcbmNvbnN0IEFSUk9XX1VQX0tFWSA9ICdBcnJvd1VwJztcbmNvbnN0IEFSUk9XX0RPV05fS0VZID0gJ0Fycm93RG93bic7XG5jb25zdCBIT01FX0tFWSA9ICdIb21lJztcbmNvbnN0IEVORF9LRVkgPSAnRW5kJztcbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFID0gJ2FjdGl2ZSc7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkMSA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQxID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfRFJPUERPV04gPSAnZHJvcGRvd24nO1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFID0gJy5kcm9wZG93bi10b2dnbGUnO1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fTUVOVSA9ICcuZHJvcGRvd24tbWVudSc7XG5jb25zdCBOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFID0gYDpub3QoJHtTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9KWA7XG5jb25zdCBTRUxFQ1RPUl9UQUJfUEFORUwgPSAnLmxpc3QtZ3JvdXAsIC5uYXYsIFtyb2xlPVwidGFibGlzdFwiXSc7XG5jb25zdCBTRUxFQ1RPUl9PVVRFUiA9ICcubmF2LWl0ZW0sIC5saXN0LWdyb3VwLWl0ZW0nO1xuY29uc3QgU0VMRUNUT1JfSU5ORVIgPSBgLm5hdi1saW5rJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfSwgLmxpc3QtZ3JvdXAtaXRlbSR7Tk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX0sIFtyb2xlPVwidGFiXCJdJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfWA7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJ0YWJcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cInBpbGxcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cImxpc3RcIl0nOyAvLyBUT0RPOiBjb3VsZCBvbmx5IGJlIGB0YWJgIGluIHY2XG5jb25zdCBTRUxFQ1RPUl9JTk5FUl9FTEVNID0gYCR7U0VMRUNUT1JfSU5ORVJ9LCAke1NFTEVDVE9SX0RBVEFfVE9HR0xFfWA7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRV9BQ1RJVkUgPSBgLiR7Q0xBU1NfTkFNRV9BQ1RJVkV9W2RhdGEtYnMtdG9nZ2xlPVwidGFiXCJdLCAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJwaWxsXCJdLCAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJsaXN0XCJdYDtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVGFiIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcbiAgICBzdXBlcihlbGVtZW50KTtcbiAgICB0aGlzLl9wYXJlbnQgPSB0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfVEFCX1BBTkVMKTtcbiAgICBpZiAoIXRoaXMuX3BhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgICAgLy8gVE9ETzogc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBpbiB2NlxuICAgICAgLy8gdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlbGVtZW50Lm91dGVySFRNTH0gaGFzIG5vdCBhIHZhbGlkIHBhcmVudCAke1NFTEVDVE9SX0lOTkVSX0VMRU19YClcbiAgICB9XG5cbiAgICAvLyBTZXQgdXAgaW5pdGlhbCBhcmlhIGF0dHJpYnV0ZXNcbiAgICB0aGlzLl9zZXRJbml0aWFsQXR0cmlidXRlcyh0aGlzLl9wYXJlbnQsIHRoaXMuX2dldENoaWxkcmVuKCkpO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQxO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHNob3coKSB7XG4gICAgLy8gU2hvd3MgdGhpcyBlbGVtIGFuZCBkZWFjdGl2YXRlIHRoZSBhY3RpdmUgc2libGluZyBpZiBleGlzdHNcbiAgICBjb25zdCBpbm5lckVsZW0gPSB0aGlzLl9lbGVtZW50O1xuICAgIGlmICh0aGlzLl9lbGVtSXNBY3RpdmUoaW5uZXJFbGVtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNlYXJjaCBmb3IgYWN0aXZlIHRhYiBvbiBzYW1lIHBhcmVudCB0byBkZWFjdGl2YXRlIGl0XG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5fZ2V0QWN0aXZlRWxlbSgpO1xuICAgIGNvbnN0IGhpZGVFdmVudCA9IGFjdGl2ZSA/IEV2ZW50SGFuZGxlci50cmlnZ2VyKGFjdGl2ZSwgRVZFTlRfSElERSQxLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiBpbm5lckVsZW1cbiAgICB9KSA6IG51bGw7XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIoaW5uZXJFbGVtLCBFVkVOVF9TSE9XJDEsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IGFjdGl2ZVxuICAgIH0pO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCBoaWRlRXZlbnQgJiYgaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGVhY3RpdmF0ZShhY3RpdmUsIGlubmVyRWxlbSk7XG4gICAgdGhpcy5fYWN0aXZhdGUoaW5uZXJFbGVtLCBhY3RpdmUpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfYWN0aXZhdGUoZWxlbWVudCwgcmVsYXRlZEVsZW0pIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKTtcbiAgICB0aGlzLl9hY3RpdmF0ZShTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpKTsgLy8gU2VhcmNoIGFuZCBhY3RpdmF0ZS9zaG93IHRoZSBwcm9wZXIgc2VjdGlvblxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSAhPT0gJ3RhYicpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIHRydWUpO1xuICAgICAgdGhpcy5fdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgdHJ1ZSk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcihlbGVtZW50LCBFVkVOVF9TSE9XTiQxLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRFbGVtXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIGVsZW1lbnQsIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQxKSk7XG4gIH1cbiAgX2RlYWN0aXZhdGUoZWxlbWVudCwgcmVsYXRlZEVsZW0pIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKTtcbiAgICBlbGVtZW50LmJsdXIoKTtcbiAgICB0aGlzLl9kZWFjdGl2YXRlKFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkpOyAvLyBTZWFyY2ggYW5kIGRlYWN0aXZhdGUgdGhlIHNob3duIHNlY3Rpb24gdG9vXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgncm9sZScpICE9PSAndGFiJykge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIGZhbHNlKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgdGhpcy5fdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgZmFsc2UpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIoZWxlbWVudCwgRVZFTlRfSElEREVOJDEsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogcmVsYXRlZEVsZW1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgZWxlbWVudCwgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFJDEpKTtcbiAgfVxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICghW0FSUk9XX0xFRlRfS0VZLCBBUlJPV19SSUdIVF9LRVksIEFSUk9XX1VQX0tFWSwgQVJST1dfRE9XTl9LRVksIEhPTUVfS0VZLCBFTkRfS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBzdG9wUHJvcGFnYXRpb24vcHJldmVudERlZmF1bHQgYm90aCBhZGRlZCB0byBzdXBwb3J0IHVwL2Rvd24ga2V5cyB3aXRob3V0IHNjcm9sbGluZyB0aGUgcGFnZVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLl9nZXRDaGlsZHJlbigpLmZpbHRlcihlbGVtZW50ID0+ICFpc0Rpc2FibGVkKGVsZW1lbnQpKTtcbiAgICBsZXQgbmV4dEFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKFtIT01FX0tFWSwgRU5EX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgbmV4dEFjdGl2ZUVsZW1lbnQgPSBjaGlsZHJlbltldmVudC5rZXkgPT09IEhPTUVfS0VZID8gMCA6IGNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpc05leHQgPSBbQVJST1dfUklHSFRfS0VZLCBBUlJPV19ET1dOX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KTtcbiAgICAgIG5leHRBY3RpdmVFbGVtZW50ID0gZ2V0TmV4dEFjdGl2ZUVsZW1lbnQoY2hpbGRyZW4sIGV2ZW50LnRhcmdldCwgaXNOZXh0LCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKG5leHRBY3RpdmVFbGVtZW50KSB7XG4gICAgICBuZXh0QWN0aXZlRWxlbWVudC5mb2N1cyh7XG4gICAgICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgICAgIH0pO1xuICAgICAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UobmV4dEFjdGl2ZUVsZW1lbnQpLnNob3coKTtcbiAgICB9XG4gIH1cbiAgX2dldENoaWxkcmVuKCkge1xuICAgIC8vIGNvbGxlY3Rpb24gb2YgaW5uZXIgZWxlbWVudHNcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JTk5FUl9FTEVNLCB0aGlzLl9wYXJlbnQpO1xuICB9XG4gIF9nZXRBY3RpdmVFbGVtKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRDaGlsZHJlbigpLmZpbmQoY2hpbGQgPT4gdGhpcy5fZWxlbUlzQWN0aXZlKGNoaWxkKSkgfHwgbnVsbDtcbiAgfVxuICBfc2V0SW5pdGlhbEF0dHJpYnV0ZXMocGFyZW50LCBjaGlsZHJlbikge1xuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHBhcmVudCwgJ3JvbGUnLCAndGFibGlzdCcpO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIHRoaXMuX3NldEluaXRpYWxBdHRyaWJ1dGVzT25DaGlsZChjaGlsZCk7XG4gICAgfVxuICB9XG4gIF9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQoY2hpbGQpIHtcbiAgICBjaGlsZCA9IHRoaXMuX2dldElubmVyRWxlbWVudChjaGlsZCk7XG4gICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLl9lbGVtSXNBY3RpdmUoY2hpbGQpO1xuICAgIGNvbnN0IG91dGVyRWxlbSA9IHRoaXMuX2dldE91dGVyRWxlbWVudChjaGlsZCk7XG4gICAgY2hpbGQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgaXNBY3RpdmUpO1xuICAgIGlmIChvdXRlckVsZW0gIT09IGNoaWxkKSB7XG4gICAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhvdXRlckVsZW0sICdyb2xlJywgJ3ByZXNlbnRhdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgfVxuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKGNoaWxkLCAncm9sZScsICd0YWInKTtcblxuICAgIC8vIHNldCBhdHRyaWJ1dGVzIHRvIHRoZSByZWxhdGVkIHBhbmVsIHRvb1xuICAgIHRoaXMuX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbChjaGlsZCk7XG4gIH1cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbChjaGlsZCkge1xuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoY2hpbGQpO1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHRhcmdldCwgJ3JvbGUnLCAndGFicGFuZWwnKTtcbiAgICBpZiAoY2hpbGQuaWQpIHtcbiAgICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHRhcmdldCwgJ2FyaWEtbGFiZWxsZWRieScsIGAke2NoaWxkLmlkfWApO1xuICAgIH1cbiAgfVxuICBfdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgb3Blbikge1xuICAgIGNvbnN0IG91dGVyRWxlbSA9IHRoaXMuX2dldE91dGVyRWxlbWVudChlbGVtZW50KTtcbiAgICBpZiAoIW91dGVyRWxlbS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfRFJPUERPV04pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRvZ2dsZSA9IChzZWxlY3RvciwgY2xhc3NOYW1lKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3Rvciwgb3V0ZXJFbGVtKTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjbGFzc05hbWUsIG9wZW4pO1xuICAgICAgfVxuICAgIH07XG4gICAgdG9nZ2xlKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSwgQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICAgIHRvZ2dsZShTRUxFQ1RPUl9EUk9QRE9XTl9NRU5VLCBDTEFTU19OQU1FX1NIT1ckMSk7XG4gICAgb3V0ZXJFbGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIG9wZW4pO1xuICB9XG4gIF9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgaWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgX2VsZW1Jc0FjdGl2ZShlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQUNUSVZFKTtcbiAgfVxuXG4gIC8vIFRyeSB0byBnZXQgdGhlIGlubmVyIGVsZW1lbnQgKHVzdWFsbHkgdGhlIC5uYXYtbGluaylcbiAgX2dldElubmVyRWxlbWVudChlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0ubWF0Y2hlcyhTRUxFQ1RPUl9JTk5FUl9FTEVNKSA/IGVsZW0gOiBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0lOTkVSX0VMRU0sIGVsZW0pO1xuICB9XG5cbiAgLy8gVHJ5IHRvIGdldCB0aGUgb3V0ZXIgZWxlbWVudCAodXN1YWxseSB0aGUgLm5hdi1pdGVtKVxuICBfZ2V0T3V0ZXJFbGVtZW50KGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5jbG9zZXN0KFNFTEVDVE9SX09VVEVSKSB8fCBlbGVtO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKS5zaG93KCk7XG59KTtcblxuLyoqXG4gKiBJbml0aWFsaXplIG9uIGZvY3VzXG4gKi9cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEksICgpID0+IHtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEVfQUNUSVZFKSkge1xuICAgIFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQpO1xuICB9XG59KTtcbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRhYik7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB0b2FzdC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3RvYXN0JztcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnRvYXN0JztcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gO1xuY29uc3QgRVZFTlRfTU9VU0VPVkVSID0gYG1vdXNlb3ZlciR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9NT1VTRU9VVCA9IGBtb3VzZW91dCR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9GT0NVU0lOID0gYGZvY3VzaW4ke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfRk9DVVNPVVQgPSBgZm9jdXNvdXQke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YDtcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfSElERSA9ICdoaWRlJzsgLy8gQGRlcHJlY2F0ZWQgLSBrZXB0IGhlcmUgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93JztcbmNvbnN0IENMQVNTX05BTUVfU0hPV0lORyA9ICdzaG93aW5nJztcbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhbmltYXRpb246ICdib29sZWFuJyxcbiAgYXV0b2hpZGU6ICdib29sZWFuJyxcbiAgZGVsYXk6ICdudW1iZXInXG59O1xuY29uc3QgRGVmYXVsdCA9IHtcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBhdXRvaGlkZTogdHJ1ZSxcbiAgZGVsYXk6IDUwMDBcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRvYXN0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBzaG93KCkge1xuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1cpO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhclRpbWVvdXQoKTtcbiAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORyk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTik7XG4gICAgICB0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpO1xuICAgIH07XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfSElERSk7IC8vIEBkZXByZWNhdGVkXG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1csIENMQVNTX05BTUVfU0hPV0lORyk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdGhpcy5fY29uZmlnLmFuaW1hdGlvbik7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0hJREUpOyAvLyBAZGVwcmVjYXRlZFxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORywgQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTik7XG4gICAgfTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XSU5HKTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9jb25maWcuYW5pbWF0aW9uKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpO1xuICAgIGlmICh0aGlzLmlzU2hvd24oKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyk7XG4gICAgfVxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuICBpc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfbWF5YmVTY2hlZHVsZUhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuYXV0b2hpZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb24gfHwgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkpO1xuICB9XG4gIF9vbkludGVyYWN0aW9uKGV2ZW50LCBpc0ludGVyYWN0aW5nKSB7XG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgICAgY2FzZSAnbW91c2VvdXQnOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3Rpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3Rpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzSW50ZXJhY3RpbmcpIHtcbiAgICAgIHRoaXMuX2NsZWFyVGltZW91dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0RWxlbWVudCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgPT09IG5leHRFbGVtZW50IHx8IHRoaXMuX2VsZW1lbnQuY29udGFpbnMobmV4dEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX21heWJlU2NoZWR1bGVIaWRlKCk7XG4gIH1cbiAgX3NldExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VPVkVSLCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCB0cnVlKSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFT1VULCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCBmYWxzZSkpO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9GT0NVU0lOLCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCB0cnVlKSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0ZPQ1VTT1VULCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCBmYWxzZSkpO1xuICB9XG4gIF9jbGVhclRpbWVvdXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gVG9hc3QuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtjb25maWddKHRoaXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5lbmFibGVEaXNtaXNzVHJpZ2dlcihUb2FzdCk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvYXN0KTtcblxuZXhwb3J0IHsgQWxlcnQsIEJ1dHRvbiwgQ2Fyb3VzZWwsIENvbGxhcHNlLCBEcm9wZG93biwgTW9kYWwsIE9mZmNhbnZhcywgUG9wb3ZlciwgU2Nyb2xsU3B5LCBUYWIsIFRvYXN0LCBUb29sdGlwIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ib290c3RyYXAuZXNtLmpzLm1hcFxuIiwiaW1wb3J0IHsgcGFyZW50cyB9IGZyb20gJy4uL3V0aWxzL2hlbHBlcnMuanMnO1xuaW1wb3J0ICdib290c3RyYXAnO1xuXG4vLyBGYWN0b3J5IEZ1bmN0aW9uXG5jb25zdCBQcm9kdWN0TWFuYWdlciA9IChlbCA9IG51bGwsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAvLyA9PT0gRE9NICYgVkFSUyA9PT09PT09XG5cbiAgY29uc3QgbW9kdWxlID0gZWwgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByb2R1Y3QtbWFuYWdlcicpIHx8IGNvbnNvbGUud2FybignUHJvZHVjdCBNYW5hZ2VyIEVsZW1lbnQgbm90IGZvdW5kJyk7XG5cbiAgaWYgKCFtb2R1bGUpIHJldHVybjtcblxuICBjb25zdCBET00gPSB7XG4gICAgbW9kdWxlLFxuICAgIHRhYmxlOiBtb2R1bGUucXVlcnlTZWxlY3RvcignLnRhYmxlLXByb2R1Y3RzJyksXG4gICAgdGJvZHk6IG1vZHVsZS5xdWVyeVNlbGVjdG9yKCd0Ym9keScpLFxuICAgIGlucHV0TmFtZTogbW9kdWxlLnF1ZXJ5U2VsZWN0b3IoJy5pbnB1dC1wcm9kdWN0LW5hbWUnKSxcbiAgICBpbnB1dFByaWNlOiBtb2R1bGUucXVlcnlTZWxlY3RvcignLmlucHV0LXByb2R1Y3QtcHJpY2UnKSxcbiAgICBidG5BZGQ6IG1vZHVsZS5xdWVyeVNlbGVjdG9yKCcuYnV0dG9uLXByb2R1Y3QtYWRkJyksXG4gICAgdGVtcGxhdGVSb3c6IG1vZHVsZS5xdWVyeVNlbGVjdG9yKCcudGVtcGxhdGUtcm93JyksXG4gIH07XG5cbiAgY29uc3QgU0VSVkVSX0JBU0VfVVJMID0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMCc7XG5cbiAgLy8gY29uc29sZS5sb2coRE9NKTtcblxuICAvLyA9PT0gSU5JVCA9PT09PT09PT09PT09XG4gIGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gICAgLy8gRnVua3Rpb25zYXVmcnVmZSB6dSBiZWdpbm4gZGVyIEFud2VuZHVuZ1xuICAgIGluaXRQcm9kdWN0cygpO1xuICAgIERPTS5idG5BZGQuZGlzYWJsZWQgPSB0cnVlO1xuICAgIC8vIEV2ZW50LUxhdXNjaGVyIHp1IGJlZ2lubiBkZXIgQW53ZW5kdW5nXG4gICAgRE9NLmJ0bkFkZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9uQ2xpY2tBZGQpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIG9uS2V5VXApO1xuICB9O1xuXG4gIC8vID09PSBFVkVOVEhBTkRMRVIgPT09PT1cbiAgY29uc3Qgb25LZXlVcCA9IChlKSA9PiB7XG4gICAgRE9NLmJ0bkFkZC5kaXNhYmxlZCA9ICEoRE9NLmlucHV0TmFtZS52YWx1ZSAhPT0gJycgJiYgRE9NLmlucHV0UHJpY2UudmFsdWUgIT09ICcnKTtcbiAgICAvLyBpZiAoRE9NLmlucHV0TmFtZS52YWx1ZSAhPT0gJycgJiYgRE9NLmlucHV0UHJpY2UudmFsdWUgIT09ICcnKSB7XG4gICAgLy8gICBET00uYnRuQWRkLmRpc2FibGVkID0gZmFsc2U7XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIERPTS5idG5BZGQuZGlzYWJsZWQgPSB0cnVlO1xuICAgIC8vIH1cbiAgfTtcblxuICBjb25zdCBvbkNsaWNrQWRkID0gKGUpID0+IHtcbiAgICBjb25zdCBwcm9kdWN0ID0ge1xuICAgICAgbmFtZTogRE9NLmlucHV0TmFtZS52YWx1ZSwgLy9cbiAgICAgIHByaWNlOiBOdW1iZXIoRE9NLmlucHV0UHJpY2UudmFsdWVBc051bWJlciksXG4gICAgfTtcblxuICAgIC8vIGFzeW5jIEFQSSByZXF1ZXN0XG4gICAgY3JlYXRlUHJvZHVjdChwcm9kdWN0KS50aGVuKChkYXRhKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgbG9hZFByb2R1Y3RzKCk7XG4gICAgICAgIHJlc2V0SW5wdXRGaWVsZHMoKTtcbiAgICAgICAgZGlzYWJsZU5vbkZ1bmN0aW9uYWxCdXR0b25zKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBhZGRQcm9kdWN0KHByb2R1Y3QpO1xuICB9O1xuXG4gIGNvbnN0IG9uQ2xpY2tSZW1vdmUgPSAoZSkgPT4ge1xuICAgIGNvbnN0IGJ0biA9IGUuY3VycmVudFRhcmdldDtcbiAgICBjb25zdCBjdXJyZW50Um93ID0gcGFyZW50cyhidG4sICd0cicpWzBdOyAvLyBidG4uY2xvc2VzdCgndHInKTsgLy8gYnRuLnBhcmVudE5vZGUucGFyZW50Tm9kZTtcblxuICAgIGN1cnJlbnRSb3cucmVtb3ZlKCk7XG4gICAgLy8gY3VycmVudFJvdy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGN1cnJlbnRSb3cpOyAvLyBJRTExIHN1cHBvcnRcbiAgICBkaXNhYmxlTm9uRnVuY3Rpb25hbEJ1dHRvbnMoKTtcbiAgfTtcblxuICBjb25zdCBvbkNsaWNrTW92ZVVwID0gKGUpID0+IHtcbiAgICBjb25zdCBidG4gPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgY29uc3QgY3VycmVudFJvdyA9IHBhcmVudHMoYnRuLCAndHInKVswXTtcblxuICAgIGN1cnJlbnRSb3cucHJldmlvdXNFbGVtZW50U2libGluZy5iZWZvcmUoY3VycmVudFJvdyk7XG4gICAgLy8gRE9NLnRib2R5Lmluc2VydEJlZm9yZShjdXJyZW50Um93LCBjdXJyZW50Um93LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xuICAgIGRpc2FibGVOb25GdW5jdGlvbmFsQnV0dG9ucygpO1xuICB9O1xuXG4gIGNvbnN0IG9uQ2xpY2tNb3ZlRG93biA9IChlKSA9PiB7XG4gICAgY29uc3QgYnRuID0gZS5jdXJyZW50VGFyZ2V0O1xuICAgIGNvbnN0IGN1cnJlbnRSb3cgPSBwYXJlbnRzKGJ0biwgJ3RyJylbMF07XG4gICAgY3VycmVudFJvdy5uZXh0RWxlbWVudFNpYmxpbmcuYWZ0ZXIoY3VycmVudFJvdyk7XG4gICAgLy8gRE9NLnRib2R5Lmluc2VydEJlZm9yZShjdXJyZW50Um93LCBjdXJyZW50Um93Lm5leHRFbGVtZW50U2libGluZy5uZXh0RWxlbWVudFNpYmxpbmcpO1xuICAgIGRpc2FibGVOb25GdW5jdGlvbmFsQnV0dG9ucygpO1xuICB9O1xuXG4gIGNvbnN0IG9uTW91c2VEb3duRHJhZyA9IChlKSA9PiB7XG4gICAgY29uc3QgYnRuID0gZS5jdXJyZW50VGFyZ2V0O1xuICAgIGNvbnN0IGN1cnJlbnRSb3cgPSBwYXJlbnRzKGJ0biwgJ3RyJylbMF07IC8vIGJ0bi5jbG9zZXN0KCd0cicpOyAvLyBidG4ucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIGN1cnJlbnRSb3cuZHJhZ2dhYmxlID0gdHJ1ZTsgLy8gPT4gPHRyIGRyYWdnYWJsZT1cInRydWVcIiA+Li4uPC90cj5cbiAgfTtcbiAgY29uc3Qgb25Nb3VzZVVwRHJhZyA9IChlKSA9PiB7XG4gICAgY29uc3QgYnRuID0gZS5jdXJyZW50VGFyZ2V0O1xuICAgIGNvbnN0IGN1cnJlbnRSb3cgPSBwYXJlbnRzKGJ0biwgJ3RyJylbMF07IC8vIGJ0bi5jbG9zZXN0KCd0cicpOyAvLyBidG4ucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIGN1cnJlbnRSb3cuZHJhZ2dhYmxlID0gZmFsc2U7IC8vID0+IDx0ciBkcmFnZ2FibGU9XCJmYWxzZVwiID4uLi48L3RyPlxuICB9O1xuICBjb25zdCBvbkRyYWdTdGFydCA9IChlKSA9PiB7XG4gICAgLy8gY29uc29sZS5sb2coJ0RyYWdFdmVudDogJywgZSk7XG4gICAgY29uc3QgY3VycmVudFJvdyA9IGUuY3VycmVudFRhcmdldDtcbiAgICBjb25zdCBpZHggPSBbLi4uY3VycmVudFJvdy5wYXJlbnROb2RlLmNoaWxkcmVuXS5pbmRleE9mKGN1cnJlbnRSb3cpO1xuXG4gICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dC9wbGFpbicsIFN0cmluZyhpZHgpKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKCd0ciByZWZlcmVuY2UgaW5kZXg6ICcsIGlkeCk7XG4gIH07XG4gIGNvbnN0IG9uRHJhZ092ZXIgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTsgLy8gV0lDSFRJRzogc29uc3QgZnVua3Rpb25pZXQgZHJvcC1FdmVudEhhbmRsZXIgbmljaHRcbiAgfTtcbiAgY29uc3Qgb25Ecm9wID0gKGUpID0+IHtcbiAgICBjb25zdCBjdXJyZW50Um93ID0gZS5jdXJyZW50VGFyZ2V0OyAvLyA8LSBaaWVsemVpbGUsIGF1ZCBkaWUgZ2Vkcm9wcHQgd2lyZFxuICAgIGNvbnN0IHRhcmdldElkeCA9IFsuLi5jdXJyZW50Um93LnBhcmVudE5vZGUuY2hpbGRyZW5dLmluZGV4T2YoY3VycmVudFJvdyk7XG4gICAgY29uc3Qgc291cmNlSWR4ID0gTnVtYmVyKGUuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQvcGxhaW4nKSk7XG5cbiAgICBjb25zb2xlLmxvZyh7IHRhcmdldElkeCwgc291cmNlSWR4IH0pO1xuXG4gICAgLy9jb25zdCBkcmFnZ2VkUm93ID0gRE9NLnRib2R5LnF1ZXJ5U2VsZWN0b3IoYHRyOm50aC1jaGlsZCgke3NvdXJjZUlkeCArIDF9KWApO1xuICAgIGNvbnN0IGRyYWdnZWRSb3cgPSBET00udGJvZHkuY2hpbGRyZW5bc291cmNlSWR4XTtcblxuICAgIC8vIEd1YXJkIHdlbm4gRWxlbWVudCBhdWYgc2ljaCBzZWxic3QgbG9zZ2VsYXNzZW4gd3VyZGUsIGFiYnJ1Y2hcbiAgICBpZiAoc291cmNlSWR4ID09PSB0YXJnZXRJZHgpIHJldHVybjtcblxuICAgIC8vIFZlcnNjaGllYmUgZGFzIEVsZW1lbnQgaW0gRE9NXG4gICAgaWYgKHNvdXJjZUlkeCA+IHRhcmdldElkeCkge1xuICAgICAgY3VycmVudFJvdy5iZWZvcmUoZHJhZ2dlZFJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRSb3cuYWZ0ZXIoZHJhZ2dlZFJvdyk7XG4gICAgfVxuXG4gICAgZGlzYWJsZU5vbkZ1bmN0aW9uYWxCdXR0b25zKCk7XG4gIH07XG5cbiAgLy8gPT09IFhIUi9GRVRDSCA9PT09PT09PVxuXG4gIC8vIEhUVFAgLSBNZXRob2RlIC0gUE9TVFxuICAvLyAoQylSVUQgLSBDcmVhdGVcbiAgLy8gQlJFKEEpRCAtIEFkZCAtIGhpbnp1ZsO8Z2VuIGVpbmVzIG5ldWVuIFByb2R1a3RzXG4gIGNvbnN0IGNyZWF0ZVByb2R1Y3QgPSBhc3luYyAocHJvZHVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke1NFUlZFUl9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHByb2R1Y3QpLFxuICAgICAgfSk7IC8vIEhUVFAtUmVxdWVzdCBVUkxcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZldGNoIHdlbnQgd3JvbmcuJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOyAvLyBIVFRQLVJlc3BvbnNlLUJvZHkgaW4gSlMtT2JqZWt0IGdlcGFyc2VkIC0+IFByb21pc2VcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIC8vIEhUVFAgLSBNZXRob2RlIC0gR0VUXG4gIC8vIEMoUilVRCAtIFJlYWRcbiAgLy8gKEIpUkVBRCAtIEJyb3dzZSAtIGF1c2xlc2VuIGFsbGVyIFByb2R1a3RlXG4gIGNvbnN0IGZldGNoUHJvZHVjdHMgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7U0VSVkVSX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHNgKTsgLy8gSFRUUC1SZXF1ZXN0IFVSTFxuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmV0Y2ggd2VudCB3cm9uZy4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7IC8vIEhUVFAtUmVzcG9uc2UtQm9keSBpbiBKUy1PYmpla3QgZ2VwYXJzZWQgLT4gUHJvbWlzZVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgLy8gPT09IEZVTkNUSU9OUyA9PT09PT09PVxuICBjb25zdCBpbml0UHJvZHVjdHMgPSAoKSA9PiB7XG4gICAgZmV0Y2hQcm9kdWN0cygpLnRoZW4oKHByb2R1Y3RzKSA9PiB7XG4gICAgICBwcm9kdWN0cy5mb3JFYWNoKGFkZFByb2R1Y3QpO1xuICAgICAgZGlzYWJsZU5vbkZ1bmN0aW9uYWxCdXR0b25zKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgbG9hZFByb2R1Y3RzID0gKCkgPT4ge1xuICAgIERPTS50Ym9keS5pbm5lckhUTUwgPSAnJztcbiAgICBmZXRjaFByb2R1Y3RzKCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgLy8gVE9ETzogYWRkIGZhZGUgQW5pbWF0aW9uXG4gICAgICBkYXRhLmZvckVhY2goYWRkUHJvZHVjdCk7XG4gICAgICBkaXNhYmxlTm9uRnVuY3Rpb25hbEJ1dHRvbnMoKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBhZGRQcm9kdWN0ID0gKHByb2R1Y3QpID0+IHtcbiAgICBjb25zdCB7IG5hbWUsIHByaWNlIH0gPSBwcm9kdWN0O1xuXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZGUvZG9jcy9XZWIvSFRNTC9SZWZlcmVuY2UvRWxlbWVudHMvdGVtcGxhdGUjYW53ZW5kdW5nc2hpbndlaXNlXG4gICAgY29uc3QgdHJFbCA9IERPTS50ZW1wbGF0ZVJvdy5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkLmNsb25lTm9kZSh0cnVlKTtcblxuICAgIGNvbnN0IHRkTmFtZUVsID0gdHJFbC5xdWVyeVNlbGVjdG9yKCcudGQtbmFtZScpO1xuICAgIGNvbnN0IHRkUHJpY2VFbCA9IHRyRWwucXVlcnlTZWxlY3RvcignLnRkLXByaWNlJyk7XG4gICAgY29uc3QgYnRuRHJhZ0VsID0gdHJFbC5xdWVyeVNlbGVjdG9yKCcuYnV0dG9uLXByb2R1Y3QtZHJhZycpO1xuICAgIGNvbnN0IGJ0blJlbW92ZUVsID0gdHJFbC5xdWVyeVNlbGVjdG9yKCcuYnV0dG9uLXByb2R1Y3QtcmVtb3ZlJyk7XG4gICAgY29uc3QgYnRuTW92ZVVwRWwgPSB0ckVsLnF1ZXJ5U2VsZWN0b3IoJy5idXR0b24tcHJvZHVjdC1tb3ZlLXVwJyk7XG4gICAgY29uc3QgYnRuTW92ZURvd25FbCA9IHRyRWwucXVlcnlTZWxlY3RvcignLmJ1dHRvbi1wcm9kdWN0LW1vdmUtZG93bicpO1xuXG4gICAgLy8gRHJhZyAnbiBEcm9wIGhpbnp1ZsO8Z2VuLlxuICAgIGJ0bkRyYWdFbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbk1vdXNlRG93bkRyYWcpO1xuICAgIGJ0bkRyYWdFbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwRHJhZyk7XG5cbiAgICB0ckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIG9uRHJhZ1N0YXJ0KTtcbiAgICB0ckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25EcmFnT3Zlcik7XG4gICAgdHJFbC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgb25Ecm9wKTtcblxuICAgIHRkTmFtZUVsLnRleHRDb250ZW50ID0gbmFtZTtcbiAgICB0ZFByaWNlRWwudGV4dENvbnRlbnQgPSBOdW1iZXIocHJpY2UpLnRvRml4ZWQoMik7XG4gICAgYnRuUmVtb3ZlRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbkNsaWNrUmVtb3ZlKTtcbiAgICBidG5Nb3ZlVXBFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9uQ2xpY2tNb3ZlVXApO1xuICAgIGJ0bk1vdmVEb3duRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbkNsaWNrTW92ZURvd24pO1xuXG4gICAgRE9NLnRib2R5LmFwcGVuZENoaWxkKHRyRWwpO1xuICB9O1xuXG4gIGNvbnN0IGRpc2FibGVOb25GdW5jdGlvbmFsQnV0dG9ucyA9ICgpID0+IHtcbiAgICBET00udGJvZHkucXVlcnlTZWxlY3RvckFsbCgndHInKS5mb3JFYWNoKCh0cikgPT4ge1xuICAgICAgdHIucXVlcnlTZWxlY3RvcignLmJ1dHRvbi1wcm9kdWN0LW1vdmUtdXAnKS5kaXNhYmxlZCA9ICF0ci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgdHIucXVlcnlTZWxlY3RvcignLmJ1dHRvbi1wcm9kdWN0LW1vdmUtZG93bicpLmRpc2FibGVkID0gIXRyLm5leHRFbGVtZW50U2libGluZztcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCByZXNldElucHV0RmllbGRzID0gKCkgPT4ge1xuICAgIERPTS5pbnB1dE5hbWUudmFsdWUgPSBET00uaW5wdXRQcmljZS52YWx1ZSA9ICcnO1xuICAgIERPTS5idG5BZGQuZGlzYWJsZWQgPSB0cnVlO1xuICB9O1xuXG4gIC8vIEhlbHBlclxuICAvLyBmdW5jdGlvbiBwYXJlbnRzKGVsLCBzZWxlY3Rvcikge1xuICAvLyAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgLy8gICB3aGlsZSAoKGVsID0gZWwucGFyZW50Tm9kZSkgJiYgZWwgIT09IGRvY3VtZW50KSB7XG4gIC8vICAgICBpZiAoIXNlbGVjdG9yIHx8IGVsLm1hdGNoZXMoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2goZWwpO1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gcGFyZW50cztcbiAgLy8gfVxuXG4gIGluaXQoKTtcblxuICByZXR1cm4ge1xuICAgIGVsZW1lbnQ6IERPTS5tb2R1bGUsXG4gICAgaW5pdCxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb2R1Y3RNYW5hZ2VyO1xuIiwiaW1wb3J0IFByb2R1Y3RNYW5hZ2VyIGZyb20gJy4vbW9kdWxlcy9Qcm9kdWN0TWFuYWdlcic7IC8vIERhdGVpZW5kdW5nIG5pY2h0IG5vdHdlbmRpZyA/XG5cbigoKSA9PiB7XG4gIC8vID09PSBET00gJiBWQVJTID09PT09PT1cbiAgY29uc3QgRE9NID0ge307XG5cbiAgLy8gPT09IElOSVQgPT09PT09PT09PT09PVxuICBjb25zdCBpbml0ID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdpbml0IScpO1xuICAgIC8vIFByb2R1Y3RNYW5hZ2VyKCk7XG4gICAgcm91dGVyKCk7XG4gIH07XG5cbiAgLy8gPT09IEVWRU5USEFORExFUiA9PT09PVxuXG4gIC8vID09PSBYSFIvRkVUQ0ggPT09PT09PT1cblxuICAvLyA9PT0gRlVOQ1RJT05TID09PT09PT09XG4gIGNvbnN0IHJvdXRlciA9ICgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgIGNvbnNvbGUubG9nKHBhdGgpO1xuXG4gICAgc3dpdGNoIChwYXRoKSB7XG4gICAgICBjYXNlICcvJzpcbiAgICAgIGNhc2UgJy9pbmRleC5odG1sJzpcbiAgICAgICAgY29uc29sZS5sb2coJ0hPTUUnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcvcHJvamVjdHMvMDJfcHJvZHVjdC1tYW5hZ2VyLmh0bWwnOlxuICAgICAgICBjb25zb2xlLmxvZygnUFJPRFVDVF9NQU5BR0VSJyk7XG4gICAgICAgIFByb2R1Y3RNYW5hZ2VyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5sb2coJ25vIHNjcmlwdHMgZm91bmQnKTtcbiAgICB9XG4gIH07XG5cbiAgaW5pdCgpO1xufSkoKTtcbiJdLCJuYW1lcyI6WyJpc0VsZW1lbnQiLCJlZmZlY3QiLCJnZXRDb21wdXRlZFN0eWxlIiwibWluIiwibWF4IiwibWF0aE1heCIsIm1hdGhNaW4iLCJoYXNoIiwiYWxsUGxhY2VtZW50cyIsInBsYWNlbWVudHMiLCJwb3BwZXJPZmZzZXRzIiwiY29tcHV0ZVN0eWxlcyIsImFwcGx5U3R5bGVzIiwib2Zmc2V0IiwiZmxpcCIsInByZXZlbnRPdmVyZmxvdyIsImFycm93IiwiaGlkZSJdLCJtYXBwaW5ncyI6Ijs7O0VBQUE7RUFDTyxTQUFTLE9BQU8sQ0FBQyxFQUFFLENBQUUsUUFBUSxDQUFFLENBQ3BDLE1BQU0sT0FBTyxDQUFHLEVBQUUsQ0FDbEIsTUFBTyxDQUFDLEVBQUUsQ0FBRyxFQUFFLENBQUMsVUFBVSxHQUFLLEVBQUUsR0FBSyxRQUFRLENBQUUsQ0FDOUMsR0FBSSxDQUFDLFFBQVEsRUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQ3pELENBQ0EsY0FBYyxDQUNoQjs7TUNQVyxHQUFHLENBQUcsS0FBSyxDQUNmLElBQUksTUFBTSxDQUFHLFFBQVEsQ0FDckIsU0FBUyxDQUFHLE9BQU8sQ0FDbkIsSUFBSSxJQUFJLENBQUcsTUFBTSxLQUNiLElBQUksQ0FBRyxNQUFNLENBQ2pCLElBQUksY0FBYyxDQUFHLENBQUMsR0FBRyxDQUFFLE1BQU0sQ0FBRSxLQUFLLENBQUUsSUFBSSxDQUFDLENBQy9DLElBQUksS0FBSyxDQUFHLE9BQU8sQ0FDbkIsSUFBSSxHQUFHLENBQUcsS0FBSyxLQUNYLGVBQWUsQ0FBRyxpQkFBaUIsQ0FDdkMsSUFBSSxRQUFRLENBQUcsVUFBVSxDQUN6QixJQUFJLE1BQU0sQ0FBRyxRQUFRLENBQ3JCLGFBQWEsQ0FBRyxXQUFXLENBQzNCLHVCQUF1QixjQUFnQixjQUFjLENBQUMsTUFBTSxDQUFDLFNBQVUsR0FBRyxDQUFFLFNBQVMsQ0FBRSxDQUM1RixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUcsR0FBRyxDQUFHLEtBQUssQ0FBRSxTQUFTLENBQUcsR0FBRyxDQUFHLEdBQUcsQ0FBQyxDQUFDLENBQ3JFLENBQUMsQ0FBRSxFQUFFLENBQUMsQ0FDQyxjQUFjLGNBQWdCLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFF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QUcsSUFBSSxDQUM1QixDQUFDLENBRUQ7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBLElBQUksRUFBRSxDQUVOLE9BQU8sQ0FDTCxPQUFPLENBQUUsR0FBRyxDQUFDLE1BQU0sQ0FDbkIsSUFDRixDQUFDLENBQ0gsQ0FBQzs7RUM3UEQsQ0FBQyxJQUFNO0VBS0wsTUFBTSxJQUFJLENBQUcsSUFBTSxDQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUNwQjtFQUNBLE1BQU0sRUFBRSxDQUNWLENBQUMsQ0FFRDtFQUVBO0VBRUE7RUFDQSxNQUFNLE1BQU0sQ0FBRyxJQUFNLENBQ25CLE1BQU0sSUFBSSxDQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUVqQixPQUFRLElBQUksRUFDVixLQUFLLEdBQUcsQ0FDUixLQUFLLGFBQWEsQ0FDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FDbkIsTUFDRixLQUFLLG1DQUFtQyxDQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQzlCLGNBQWMsRUFBRSxDQUNoQixNQUNGLFFBQ0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUNuQyxDQUNGLENBQUMsQ0FFRCxJQUFJLEVBQUUsQ0FDUixDQUFDLEdBQUc7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlsxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NV19","sourceRoot":"../dev/scripts"}
\ No newline at end of file
diff --git a/04_browser-api/unterricht/tag26/01_website/frontend/assets/map/main.css.map b/04_browser-api/unterricht/tag26/01_website/frontend/assets/map/main.css.map
index 9af1d06..7e4c1a2 100644
--- a/04_browser-api/unterricht/tag26/01_website/frontend/assets/map/main.css.map
+++ b/04_browser-api/unterricht/tag26/01_website/frontend/assets/map/main.css.map
@@ -1 +1 @@
-{"version":3,"sources":["main.css","01_frameworks/bootstrap-5.3.8/mixins/_banner.scss","04_plugins/_index.scss","01_frameworks/bootstrap-5.3.8/_root.scss","01_frameworks/bootstrap-5.3.8/vendor/_rfs.scss","01_frameworks/bootstrap-5.3.8/mixins/_color-mode.scss","01_frameworks/bootstrap-5.3.8/_reboot.scss","01_frameworks/bootstrap-5.3.8/_variables.scss","01_frameworks/bootstrap-5.3.8/mixins/_border-radius.scss","01_frameworks/bootstrap-5.3.8/_type.scss","01_frameworks/bootstrap-5.3.8/mixins/_lists.scss","01_frameworks/bootstrap-5.3.8/_images.scss","01_frameworks/bootstrap-5.3.8/mixins/_image.scss","01_frameworks/bootstrap-5.3.8/_containers.scss","01_frameworks/bootstrap-5.3.8/mixins/_container.scss","01_frameworks/bootstrap-5.3.8/mixins/_breakpoints.scss","01_frameworks/bootstrap-5.3.8/_grid.scss","01_frameworks/bootstrap-5.3.8/mixins/_grid.scss","01_frameworks/bootstrap-5.3.8/_tables.scss","01_frameworks/bootstrap-5.3.8/mixins/_table-variants.scss","01_frameworks/bootstrap-5.3.8/forms/_labels.scss","01_frameworks/bootstrap-5.3.8/forms/_form-text.scss","01_frameworks/bootstrap-5.3.8/forms/_form-control.scss","01_frameworks/bootstrap-5.3.8/mixins/_transition.scss","01_frameworks/bootstrap-5.3.8/mixins/_gradients.scss","01_frameworks/bootstrap-5.3.8/forms/_form-select.scss","01_frameworks/bootstrap-5.3.8/forms/_form-check.scss","01_frameworks/bootstrap-5.3.8/forms/_form-range.scss","01_frameworks/bootstrap-5.3.8/forms/_floating-labels.scss","01_frameworks/bootstrap-5.3.8/forms/_input-group.scss","01_frameworks/bootstrap-5.3.8/mixins/_forms.scss","01_frameworks/bootstrap-5.3.8/_buttons.scss","01_frameworks/bootstrap-5.3.8/mixins/_buttons.scss","01_frameworks/bootstrap-5.3.8/_transitions.scss","01_frameworks/bootstrap-5.3.8/_dropdown.scss","01_frameworks/bootstrap-5.3.8/mixins/_caret.scss","01_frameworks/bootstrap-5.3.8/_button-group.scss","01_frameworks/bootstrap-5.3.8/_nav.scss","01_frameworks/bootstrap-5.3.8/_navbar.scss","01_frameworks/bootstrap-5.3.8/_card.scss","01_frameworks/bootstrap-5.3.8/_accordion.scss","01_frameworks/bootstrap-5.3.8/_breadcrumb.scss","01_frameworks/bootstrap-5.3.8/_pagination.scss","01_frameworks/bootstrap-5.3.8/mixins/_pagination.scss","01_frameworks/bootstrap-5.3.8/_badge.scss","01_frameworks/bootstrap-5.3.8/_alert.scss","01_frameworks/bootstrap-5.3.8/_progress.scss","01_frameworks/bootstrap-5.3.8/_list-group.scss","01_frameworks/bootstrap-5.3.8/_close.scss","01_frameworks/bootstrap-5.3.8/_toasts.scss","01_frameworks/bootstrap-5.3.8/_modal.scss","01_frameworks/bootstrap-5.3.8/mixins/_backdrop.scss","01_frameworks/bootstrap-5.3.8/_tooltip.scss","01_frameworks/bootstrap-5.3.8/mixins/_reset-text.scss","01_frameworks/bootstrap-5.3.8/_popover.scss","01_frameworks/bootstrap-5.3.8/_carousel.scss","01_frameworks/bootstrap-5.3.8/mixins/_clearfix.scss","01_frameworks/bootstrap-5.3.8/_spinners.scss","01_frameworks/bootstrap-5.3.8/_offcanvas.scss","01_frameworks/bootstrap-5.3.8/_placeholders.scss","01_frameworks/bootstrap-5.3.8/helpers/_color-bg.scss","01_frameworks/bootstrap-5.3.8/helpers/_colored-links.scss","01_frameworks/bootstrap-5.3.8/helpers/_focus-ring.scss","01_frameworks/bootstrap-5.3.8/helpers/_icon-link.scss","01_frameworks/bootstrap-5.3.8/helpers/_ratio.scss","01_frameworks/bootstrap-5.3.8/helpers/_position.scss","01_frameworks/bootstrap-5.3.8/helpers/_stacks.scss","01_frameworks/bootstrap-5.3.8/helpers/_visually-hidden.scss","01_frameworks/bootstrap-5.3.8/mixins/_visually-hidden.scss","01_frameworks/bootstrap-5.3.8/helpers/_stretched-link.scss","01_frameworks/bootstrap-5.3.8/helpers/_text-truncation.scss","01_frameworks/bootstrap-5.3.8/mixins/_text-truncate.scss","01_frameworks/bootstrap-5.3.8/helpers/_vr.scss","01_frameworks/bootstrap-5.3.8/mixins/_utilities.scss","01_frameworks/bootstrap-5.3.8/utilities/_api.scss","02_fonts/_gloria-hallelujah-v24-latin.scss","02_fonts/_lato-v25-latin.scss","02_fonts/_source-sans-3-v19-latin.scss","03_base/_colors.scss","03_base/_theme.scss","03_base/_typography.scss","05_modules/_chuck-norris-joke.scss","05_modules/_header-main.scss","05_modules/_logo-main.scss","05_modules/_menu-main.scss","05_modules/_product-manager.scss"],"names":[],"mappings":"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lB,gBFymB0B;EH7WtB,iCAAA;AJoUR;AIheI;EKpGF;ILuQM,iBAAA;EJiUN;AACF;;ASzkBE;EAGE,gBF0nBkB;EEznBlB,gBFymB0B;EH7WtB,iCAAA;AJ+UR;AI3eI;EKpGF;ILuQM,eAAA;EJ4UN;AACF;;ASplBE;EAGE,gBF0nBkB;EEznBlB,gBFymB0B;EH7WtB,iCAAA;AJ0VR;AItfI;EKpGF;ILuQM,iBAAA;EJuVN;AACF;;AS/lBE;EAGE,gBF0nBkB;EEznBlB,gBFymB0B;EH7WtB,iCAAA;AJqWR;AIjgBI;EKpGF;ILuQM,eAAA;EJkWN;AACF;;AS1mBE;EAGE,gBF0nBkB;EEznBlB,gBFymB0B;EH7WtB,iCAAA;AJgXR;AI5gBI;EKpGF;ILuQM,iBAAA;EJ6WN;AACF;;AS7lBA;ECvDE,eAAA;EACA,gBAAA;AVwpBF;;AS7lBA;EC5DE,eAAA;EACA,gBAAA;AV6pBF;;AS/lBA;EACE,qBAAA;ATkmBF;AShmBE;EACE,oBFsoB0B;APpC9B;;ASxlBA;EL8MM,kBALI;EKvMR,yBAAA;AT2lBF;;ASvlBA;EACE,mBFiUO;EH1HH,kBALI;AJyZV;ASxlBE;EACE,gBAAA;AT0lBJ;;AStlBA;EACE,iBAAA;EACA,mBFuTO;EH1HH,kBALI;EKtLR,cFtFS;AP+qBX;ASvlBE;EACE,aAAA;ATylBJ;;AWzrBA;ECIE,eAAA;EAGA,YAAA;AZurBF;;AWxrBA;EACE,gBJ+jDkC;EI9jDlC,mCJ+jDkC;EI9jDlC,2DAAA;EHGE,sCAAA;EIRF,eAAA;EAGA,YAAA;AZgsBF;;AWlrBA;EAEE,qBAAA;AXorBF;;AWjrBA;EACE,qBAAA;EACA,cAAA;AXorBF;;AWjrBA;EPyPM,kBALI;EOlPR,gCJkjDkC;AP93BpC;;AattBE;;;;;;;ECHA,qBAAA;EACA,gBAAA;EACA,WAAA;EACA,6CAAA;EACA,4CAAA;EACA,kBAAA;EACA,iBAAA;AdmuBF;;Ae7qBI;EF5CE;IACE,gBNkee;EP2PrB;AACF;AenrBI;EF5CE;IACE,gBNkee;EPgQrB;AACF;AexrBI;EF5CE;IACE,gBNkee;EPqQrB;AACF;Ae7rBI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E,yBAAA;EACA,0BAAA;EACA,0BforB0B;EenrB1B,2BfsyBoC;EiBp4BtC,uCjBqiCgC;Eer8B9B,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,eAAA;EACA,+CfgsB0B;Ee/rB1B,gBAAA;ECzFE,qID0FF;AtBqhEJ;AuB3mEM;ED0EJ;ICzEM,gBAAA;EvB8mEN;AACF;AsBvhEE;EACE,wCf47B8B;AP6lClC;;AsBhhEA;EACE,cAAA;EACA,WAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBfwf4B;Eevf5B,2Bf2xBsC;Ee1xBtC,6BAAA;EACA,yBAAA;EACA,sCAAA;AtBmhEF;AsBjhEE;EACE,UAAA;AtBmhEJ;AsBhhEE;EAEE,gBAAA;EACA,eAAA;AtBihEJ;;AsBtgEA;EACE,mEf4wBsC;Ee3wBtC,uBAAA;ElByII,mBALI;EIvQN,yCAAA;AR8oEJ;AsBvgEE;EACE,uBAAA;EACA,wBAAA;EACA,yBfooB0B;APq4C9B;;AsBrgEA;EACE,iEfgwBsC;Ee/vBtC,oBAAA;ElB4HI,kBALI;EIvQN,yCAAA;AR0pEJ;AsBtgEE;EACE,oBAAA;EACA,qBAAA;EACA,uBf2nB0B;AP64C9B;;AsBhgEE;EACE,oEf6uBoC;APsxCxC;AsBhgEE;EACE,mEf0uBoC;APwxCxC;AsB//DE;EACE,iEfuuBoC;AP0xCxC;;AsB5/DA;EACE,WfquBsC;EepuBtC,gEf8tBsC;Ee7tBtC,iBfilB4B;AP86C9B;AsB7/DE;EACE,eAAA;AtB+/DJ;AsB5/DE;EACE,oBAAA;EdvLA,sCAAA;ARsrEJ;AsB3/DE;EACE,oBAAA;Ed5LA,sCAAA;AR0rEJ;AsB1/DE;EAAoB,+Df8sBkB;AP+yCxC;AsB5/DE;EAAoB,6Df8sBkB;APizCxC;;AyB9sEA;EACE,wPAAA;EAEA,cAAA;EACA,WAAA;EACA,0CAAA;ErBqRI,eALI;EqB7QR,gBlB+lB4B;EkB9lB5B,gBlBsmB4B;EkBrmB5B,2BlBy3BsC;EkBx3BtC,wBAAA;KAAA,qBAAA;UAAA,gBAAA;EACA,mClBk3BsC;EkBj3BtC,mFAAA;EACA,4BAAA;EACA,yClB+9BkC;EkB99BlC,0BlB+9BkC;EkB99BlC,2DAAA;EjBHE,sCAAA;EeHE,wEESJ;AzB8sEF;AuBntEM;EEfN;IFgBQ,gBAAA;EvBstEN;AACF;AyBjtEE;EACE,gElBs3BoC;EkBr3BpC,UAAA;EAKE,kDlBi+B4B;AP8uClC;AyB3sEE;EAEE,sBlB6uB0B;EkB5uB1B,sBAAA;AzB4sEJ;AyBzsEE;EAEE,wClBu1BoC;APm3CxC;AyBrsEE;EACE,kBAAA;EACA,uCAAA;AzBusEJ;;AyBnsEA;EACE,oBlBsuB4B;EkBruB5B,uBlBquB4B;EkBpuB5B,oBlBquB4B;EHlgBxB,mBALI;EIvQN,yCAAA;ARivEJ;;AyBnsEA;EACE,mBlBkuB4B;EkBjuB5B,sBlBiuB4B;EkBhuB5B,kBlBiuB4B;EHtgBxB,kBALI;EIvQN,yCAAA;ARyvEJ;;AyBjsEI;EACE,wPAAA;AzBosEN;;A0B5wEA;EACE,cAAA;EACA,kBnBq6BwC;EmBp6BxC,mBnBq6BwC;EmBp6BxC,uBnBq6BwC;AP02C1C;A0B7wEE;EACE,WAAA;EACA,mBAAA;A1B+wEJ;;A0B3wEA;EACE,oBnB25BwC;EmB15BxC,eAAA;EACA,iBAAA;A1B8wEF;A0B5wEE;EACE,YAAA;EACA,oBAAA;EACA,cAAA;A1B8wEJ;;A0B1wEA;EACE,qCAAA;EAEA,cAAA;EACA,UnB04BwC;EmBz4BxC,WnBy4BwC;EmBx4BxC,kBAAA;EACA,mBAAA;EACA,wBAAA;KAAA,qBAAA;UAAA,gBAAA;EACA,yCAAA;EACA,+CAAA;EACA,4BAAA;EACA,2BAAA;EACA,wBAAA;EACA,2DnB24BwC;EmB14BxC,iCAAA;UAAA,yBAAA;A1B4wEF;A0BzwEE;ElB3BE,qBAAA;ARuyEJ;A0BxwEE;EAEE,kBnBm4BsC;APs4C1C;A0BtwEE;EACE,uBnB03BsC;AP84C1C;A0BrwEE;EACE,gEnBs1BoC;EmBr1BpC,UAAA;EACA,kDnB8foB;APywDxB;A0BpwEE;EACE,yBnB5BM;EmB6BN,qBnB7BM;APmyEV;A0BpwEI;EAII,uPAAA;A1BmwER;A0B/vEI;EAII,+JAAA;A1B8vER;A0BzvEE;EACE,yBnBjDM;EmBkDN,qBnBlDM;EmBuDJ,iPAAA;A1BuvEN;A0BnvEE;EACE,oBAAA;EACA,YAAA;EACA,YnBk2BuC;APm5C3C;A0B9uEI;EACE,eAAA;EACA,YnBy1BqC;APu5C3C;;A0BluEA;EACE,mBnBo1BgC;APi5ClC;A0BnuEE;EACE,2KAAA;EAEA,UnB80B8B;EmB70B9B,mBAAA;EACA,0CAAA;EACA,gCAAA;ElBjHA,kBAAA;EeHE,iDGsHF;A1BouEJ;AuBt1EM;EG0GJ;IHzGM,gBAAA;EvBy1EN;AACF;A0BvuEI;EACE,0MAAA;A1ByuEN;A0BtuEI;EACE,iCnB60B4B;EmBx0B1B,0JAAA;A1BouER;A0B/tEE;EACE,oBnBwzB8B;EmBvzB9B,eAAA;A1BiuEJ;A0B/tEI;EACE,oBAAA;EACA,cAAA;A1BiuEN;;A0B5tEA;EACE,qBAAA;EACA,kBnBsyBgC;APy7ClC;;A0B5tEA;EACE,kBAAA;EACA,sBAAA;EACA,oBAAA;A1B+tEF;A0B3tEI;EACE,oBAAA;EACA,YAAA;EACA,anBspBwB;APukD9B;;A0BttEI;EACE,iLAAA;A1BytEN;;A2B54EA;EACE,WAAA;EACA,cAAA;EACA,UAAA;EACA,wBAAA;KAAA,qBAAA;UAAA,gBAAA;EACA,6BAAA;A3B+4EF;A2B74EE;EACE,UAAA;A3B+4EJ;A2B34EI;EAA0B,kEpB8gCa;APg4C3C;A2B74EI;EAA0B,kEpB6gCa;APm4C3C;A2B74EE;EACE,SAAA;A3B+4EJ;A2B54EE;EACE,WpB+/BuC;EoB9/BvC,YpB8/BuC;EoB7/BvC,oBAAA;EACA,wBAAA;UAAA,gBAAA;EH1BF,yBjBkCQ;EoBNN,SpB6/BuC;EC1gCvC,mBAAA;EeHE,oHImBF;EJnBE,4GImBF;A3B64EJ;AuB55EM;EIMJ;IJLM,wBAAA;IAAA,gBAAA;EvB+5EN;AACF;A2Bh5EI;EHjCF,qEjB8hCyC;APs5C3C;A2B94EE;EACE,WpBw+B8B;EoBv+B9B,cpBw+B8B;EoBv+B9B,kBAAA;EACA,epBu+B8B;EoBt+B9B,wCpBu+B8B;EoBt+B9B,yBAAA;EnB7BA,mBAAA;AR86EJ;A2B54EE;EACE,WpBo+BuC;EoBn+BvC,YpBm+BuC;EoBl+BvC,qBAAA;OAAA,gBAAA;EHpDF,yBjBkCQ;EoBoBN,SpBm+BuC;EC1gCvC,mBAAA;EeHE,iHI6CF;EJ7CE,4GI6CF;A3B64EJ;AuBt7EM;EIiCJ;IJhCM,qBAAA;IAAA,gBAAA;EvBy7EN;AACF;A2Bh5EI;EH3DF,qEjB8hCyC;APg7C3C;A2B94EE;EACE,WpB88B8B;EoB78B9B,cpB88B8B;EoB78B9B,kBAAA;EACA,epB68B8B;EoB58B9B,wCpB68B8B;EoB58B9B,yBAAA;EnBvDA,mBAAA;ARw8EJ;A2B54EE;EACE,oBAAA;A3B84EJ;A2B54EI;EACE,2CpBg9BqC;AP87C3C;A2B34EI;EACE,2CpB48BqC;APi8C3C;;A4Bp+EA;EACE,kBAAA;A5Bu+EF;A4Br+EE;;;EAGE,uDrBwiCoC;EqBviCpC,2DrBuiCoC;EqBtiCpC,iBrBuiCoC;APg8CxC;A4Bp+EE;EACE,kBAAA;EACA,MAAA;EACA,OAAA;EACA,UAAA;EACA,eAAA;EACA,YAAA;EACA,qBAAA;EACA,gBAAA;EACA,2CAAA;EACA,iBAAA;EACA,uBAAA;EACA,mBAAA;EACA,oBAAA;EACA,gDAAA;EACA,qBAAA;ELVE,gEKWF;A5Bs+EJ;AuB7+EM;EKTJ;ILUM,gBAAA;EvBg/EN;AACF;A4Bx+EE;;EAEE,qBAAA;A5B0+EJ;A4Bx+EI;EACE,kBAAA;A5B2+EN;A4B5+EI;;EACE,kBAAA;A5B2+EN;A4Bx+EI;EAEE,qBrB0gCkC;EqBzgClC,wBrB0gCkC;APi+CxC;A4B9+EI;;;EAEE,qBrB0gCkC;EqBzgClC,wBrB0gCkC;APi+CxC;A4Bx+EI;;EACE,qBrBqgCkC;EqBpgClC,wBrBqgCkC;APs+CxC;A4Bv+EE;EACE,qBrB+/BoC;EqB9/BpC,wBrB+/BoC;EqB9/BpC,qBrBguB0B;APywD9B;A4Bl+EI;EACE,8DrBy/BkC;AP8+CxC;A4Bx+EI;;;;EACE,8DrBy/BkC;AP8+CxC;A4Bl+EI;EACE,8DrBm/BkC;APi/CxC;A4B/9EI;EACE,kBAAA;EACA,oBAAA;EACA,WAAA;EACA,arBw+BkC;EqBv+BlC,WAAA;EACA,mCrBqzBkC;ECh3BpC,sCAAA;AR8hFJ;A4Bz+EI;;EACE,kBAAA;EACA,oBAAA;EACA,WAAA;EACA,arBw+BkC;EqBv+BlC,WAAA;EACA,mCrBqzBkC;ECh3BpC,sCAAA;AR8hFJ;A4B/9EE;EACE,wCrBkzBoC;AP+qDxC;A4B79EI;EACE,sCAAA;A5B+9EN;A4B39EE;;EAEE,crBhFO;AP6iFX;;A6BvjFA;EACE,kBAAA;EACA,aAAA;EACA,eAAA;EACA,oBAAA;EACA,WAAA;A7B0jFF;A6BxjFE;;;EAGE,kBAAA;EACA,cAAA;EACA,SAAA;EACA,YAAA;A7B0jFJ;A6BtjFE;;;EAGE,UAAA;A7BwjFJ;A6BljFE;EACE,kBAAA;EACA,UAAA;A7BojFJ;A6BljFI;EACE,UAAA;A7BojFN;;A6BziFA;EACE,aAAA;EACA,mBAAA;EACA,yBAAA;EzB8OI,eALI;EyBvOR,gBtByjB4B;EsBxjB5B,gBtBgkB4B;EsB/jB5B,2BtBm1BsC;EsBl1BtC,kBAAA;EACA,mBAAA;EACA,uCtB06BsC;EsBz6BtC,2DAAA;ErBtCE,sCAAA;ARmlFJ;;A6BniFA;;;;EAIE,oBAAA;EzBwNI,kBALI;EIvQN,yCAAA;AR4lFJ;;A6BniFA;;;;EAIE,uBAAA;EzB+MI,mBALI;EIvQN,yCAAA;ARqmFJ;;A6BniFA;;EAEE,mBAAA;A7BsiFF;;A6BzhFI;;;;ErBjEA,0BAAA;EACA,6BAAA;ARimFJ;A6BxhFI;;;;ErB1EA,0BAAA;EACA,6BAAA;ARwmFJ;A6BlhFE;EACE,8CAAA;ErB1EA,yBAAA;EACA,4BAAA;AR+lFJ;A6BlhFE;;ErB9EE,yBAAA;EACA,4BAAA;ARomFJ;;A8B5nFE;EACE,aAAA;EACA,WAAA;EACA,mBvBu0BoC;EHrkBlC,kBALI;E0B1PN,iCvBkjCqB;AP4kDzB;;A8B3nFE;EACE,kBAAA;EACA,SAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;EACA,uBAAA;EACA,kBAAA;E1BqPE,mBALI;E0B7ON,WvBqiCqB;EuBpiCrB,mCvBoiCqB;EC/jCrB,sCAAA;ARypFJ;;A8BznFI;;;;EAEE,cAAA;A9B8nFN;;A8B7qFI;EAqDE,+CvBuhCmB;EuBphCjB,oCvB81BgC;EuB71BhC,0PAAA;EACA,4BAAA;EACA,2DAAA;EACA,gEAAA;A9B0nFR;A8BvnFM;EACE,+CvB4gCiB;EuBvgCf,2DvBugCe;AP8mDzB;;A8B1rFI;EA+EI,oCvBu0BgC;EuBt0BhC,kFAAA;A9B+mFR;;A8B/rFI;EAuFE,+CvBq/BmB;APunDzB;A8BzmFQ;EAEE,kQAAA;EACA,uBvBq5B8B;EuBp5B9B,+DAAA;EACA,2EAAA;A9B0mFV;A8BtmFM;EACE,+CvBw+BiB;EuBn+Bf,2DvBm+Be;APioDzB;;A8B7sFI;EAkHI,yCAAA;A9B+lFR;;A8BjtFI;EAyHE,+CvBm9BmB;APyoDzB;A8B1lFM;EACE,4CvBg9BiB;AP4oDzB;A8BzlFM;EACE,2DvB48BiB;AP+oDzB;A8BxlFM;EACE,iCvBw8BiB;APkpDzB;;A8BrlFI;EACE,kBAAA;A9BwlFN;;A8BluFI;;;;;EAoJM,UAAA;A9BslFV;;A8BttFE;EACE,aAAA;EACA,WAAA;EACA,mBvBu0BoC;EHrkBlC,kBALI;E0B1PN,mCvBkjCqB;APsqDzB;;A8BrtFE;EACE,kBAAA;EACA,SAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;EACA,uBAAA;EACA,kBAAA;E1BqPE,mBALI;E0B7ON,WvBqiCqB;EuBpiCrB,kCvBoiCqB;EC/jCrB,sCAAA;ARmvFJ;;A8BntFI;;;;EAEE,cAAA;A9BwtFN;;A8BvwFI;EAqDE,iDvBuhCmB;EuBphCjB,oCvB81BgC;EuB71BhC,4UAAA;EACA,4BAAA;EACA,2DAAA;EACA,gEAAA;A9BotFR;A8BjtFM;EACE,iDvB4gCiB;EuBvgCf,0DvBugCe;APwsDzB;;A8BpxFI;EA+EI,oCvBu0BgC;EuBt0BhC,kFAAA;A9BysFR;;A8BzxFI;EAuFE,iDvBq/BmB;APitDzB;A8BnsFQ;EAEE,oVAAA;EACA,uBvBq5B8B;EuBp5B9B,+DAAA;EACA,2EAAA;A9BosFV;A8BhsFM;EACE,iDvBw+BiB;EuBn+Bf,0DvBm+Be;AP2tDzB;;A8B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yEv8NQ;EAOI,2BAAA;AzEo8NZ;;AyE38NQ;EAOI,2BAAA;AzEw8NZ;;AyE/8NQ;EAOI,6BAAA;AzE48NZ;;AyEn9NQ;EAOI,8BAAA;AzEg9NZ;;AyEv9NQ;EAOI,6BAAA;AzEo9NZ;;AyE39NQ;EAOI,2BAAA;AzEw9NZ;;AyE/9NQ;EAOI,6BAAA;AzE49NZ;;AyEn+NQ;EAOI,8BAAA;AzEg+NZ;;AyEv+NQ;EAOI,6BAAA;AzEo+NZ;;AyE3+NQ;EAOI,0BAAA;AzEw+NZ;;AyE/+NQ;EAOI,gCAAA;AzE4+NZ;;AyEn/NQ;EAOI,yBAAA;AzEg/NZ;;AyEv/NQ;EAOI,wBAAA;AzEo/NZ;;AyE3/NQ;EAOI,+BAAA;AzEw/NZ;;AyE//NQ;EAOI,yBAAA;AzE4/NZ;;AyEngOQ;EAOI,6BAAA;AzEggOZ;;AyEvgOQ;EAOI,8BAAA;AzEogOZ;;AyE3gOQ;EAOI,wBAAA;AzEwgOZ;;AyE/gOQ;EAOI,+BAAA;AzE4gOZ;;AyEnhOQ;EAOI,wBAAA;AzEghOZ;;AyEvhOQ;EAOI,2CAAA;AzEohOZ;;AyE3hOQ;EAOI,8CAAA;AzEwhOZ;;AyE/hOQ;EAOI,8CAAA;AzE4hOZ;;AyEniOQ;EAOI,2BAAA;AzEgiOZ;;AyEjjOQ;EACE,gFAAA;AzEojOV;;AyErjOQ;EACE,kFAAA;AzEwjOV;;AyEzjOQ;EACE,gFAAA;AzE4jOV;;AyE7jOQ;EACE,6EAAA;AzEgkOV;;AyEjkOQ;EACE,gFAAA;AzEokOV;;AyErkOQ;EACE,+EAAA;AzEwkOV;;AyEzkOQ;EACE,8EAAA;AzE4kOV;;AyE7kOQ;EACE,6EAAA;AzEglOV;;AyEvkOQ;EAOI,2BAAA;AzEokOZ;;AyE3kOQ;EAOI,6BAAA;AzEwkOZ;;AyE/kOQ;EAOI,6BAAA;AzE4kOZ;;AyEnlOQ;EAOI,0BAAA;AzEglOZ;;AyEvlOQ;EAOI,2BAAA;AzEolOZ;;AyE3lOQ;EAOI,iBAAA;AzEwlOZ;;AyE/lOQ;EAOI,mBAAA;AzE4lOZ;;AyEnmOQ;EAOI,oBAAA;AzEgmOZ;;AyEvmOQ;EAOI,oBAAA;AzEomOZ;;AyE3mOQ;EAOI,sBAAA;AzEwmOZ;;AyE/mOQ;EAOI,uBAAA;AzE4mOZ;;AyEnnOQ;EAOI,kBAAA;AzEgnOZ;;AyEvnOQ;EAOI,oBAAA;AzEonOZ;;AyE3nOQ;EAOI,qBAAA;AzEwnOZ;;AyE/nOQ;EAOI,mBAAA;AzE4nOZ;;AyEnoOQ;EAOI,qBAAA;AzEgoOZ;;AyEvoOQ;EAOI,sBAAA;AzEooOZ;;AyE3oOQ;EAOI,2CAAA;AzEwoOZ;;AyE/oOQ;EAOI,sCAAA;AzE4oOZ;;AyEnpOQ;EAOI,sCAAA;AzEgpOZ;;AyEvpOQ;EAOI,uFAAA;AzEopOZ;;AyE3pOQ;EAOI,oBAAA;AzEwpOZ;;AyE/pOQ;EAOI,2FAAA;AzE4pOZ;;AyEnqOQ;EAOI,wBAAA;AzEgqOZ;;AyEvqOQ;EAOI,6FAAA;AzEoqOZ;;AyE3qOQ;EAOI,0BAAA;AzEwqOZ;;AyE/qOQ;EAOI,8FAAA;AzE4qOZ;;AyEnrOQ;EAOI,2BAAA;AzEgrOZ;;AyEvrOQ;EAOI,4FAAA;AzEorOZ;;AyE3rOQ;EAOI,yBAAA;AzEwrOZ;;AyE/rOQ;EAIQ,sBAAA;EAGJ,8EAAA;AzE6rOZ;;AyEpsOQ;EAIQ,sBAAA;EAGJ,gFAAA;AzEksOZ;;AyEzsOQ;EAIQ,sBAAA;EAGJ,8EAAA;AzEusOZ;;AyE9sOQ;EAIQ,sBAAA;EAGJ,2EAAA;AzE4sOZ;;AyEntOQ;EAIQ,sBAAA;EAGJ,8EAAA;AzEitOZ;;AyExtOQ;EAIQ,sBAAA;EAGJ,6EAAA;AzEstOZ;;AyE7tOQ;EAIQ,sBAAA;EAGJ,4EAAA;AzE2tOZ;;AyEluOQ;EAIQ,sBAAA;EAGJ,2EAAA;AzEguOZ;;AyEvuOQ;EAIQ,sBAAA;EAGJ,4EAAA;AzEquOZ;;AyE5uOQ;EAIQ,sBAAA;EAGJ,4EAAA;AzE0uOZ;;AyEjvOQ;EAOI,wDAAA;AzE8uOZ;;AyErvOQ;EAOI,0DAAA;AzEkvOZ;;AyEzvOQ;EAOI,wDAAA;AzEsvOZ;;AyE7vOQ;EAOI,qDAAA;AzE0vOZ;;AyEjwOQ;EAOI,wDAAA;AzE8vOZ;;AyErwOQ;EAOI,uDAAA;AzEkwOZ;;AyEzwOQ;EAOI,sDAAA;AzEswOZ;;AyE7wOQ;EAOI,qDAAA;AzE0wOZ;;AyEjxOQ;EAOI,4BAAA;AzE8wOZ;;AyErxOQ;EAOI,4BAAA;AzEkxOZ;;AyEzxOQ;EAOI,4BAAA;AzEsxOZ;;AyE7xOQ;EAOI,4BAAA;AzE0xOZ;;AyEjyOQ;EAOI,4BAAA;AzE8xOZ;;AyE/yOQ;EACE,wBAAA;AzEkzOV;;AyEnzOQ;EACE,yBAAA;AzEszOV;;AyEvzOQ;EACE,wBAAA;AzE0zOV;;AyE3zOQ;EACE,yBAAA;AzE8zOV;;AyE/zOQ;EACE,sBAAA;AzEk0OV;;AyEzzOQ;EAOI,qBAAA;AzEszOZ;;AyE7zOQ;EAOI,qBAAA;AzE0zOZ;;AyEj0OQ;EAOI,qBAAA;AzE8zOZ;;AyEr0OQ;EAOI,sBAAA;AzEk0OZ;;AyEz0OQ;EAOI,sBAAA;AzEs0OZ;;AyE70OQ;EAOI,0BAAA;AzE00OZ;;AyEj1OQ;EAOI,uBAAA;AzE80OZ;;AyEr1OQ;EAOI,2BAAA;AzEk1OZ;;AyEz1OQ;EAOI,sBAAA;AzEs1OZ;;AyE71OQ;EAOI,sBAAA;AzE01OZ;;AyEj2OQ;EAOI,sBAAA;AzE81OZ;;AyEr2OQ;EAOI,uBAAA;AzEk2OZ;;AyEz2OQ;EAOI,uBAAA;AzEs2OZ;;AyE72OQ;EAOI,2BAAA;AzE02OZ;;AyEj3OQ;EAOI,wBAAA;AzE82OZ;;AyEr3OQ;EAOI,4BAAA;AzEk3OZ;;AyEz3OQ;EAOI,yBAAA;AzEs3OZ;;AyE73OQ;EAOI,8BAAA;AzE03OZ;;AyEj4OQ;EAOI,iCAAA;AzE83OZ;;AyEr4OQ;EAOI,sCAAA;AzEk4OZ;;AyEz4OQ;EAOI,yCAAA;AzEs4OZ;;AyE74OQ;EAOI,uBAAA;AzE04OZ;;AyEj5OQ;EAOI,uBAAA;AzE84OZ;;AyEr5OQ;EAOI,yBAAA;AzEk5OZ;;AyEz5OQ;EAOI,yBAAA;AzEs5OZ;;AyE75OQ;EAOI,0BAAA;AzE05OZ;;AyEj6OQ;EAOI,4BAAA;AzE85OZ;;AyEr6OQ;EAOI,kCAAA;AzEk6OZ;;AyEz6OQ;EAOI,sCAAA;AzEs6OZ;;AyE76OQ;EAOI,oCAAA;AzE06OZ;;AyEj7OQ;EAOI,kCAAA;AzE86OZ;;AyEr7OQ;EAOI,yCAAA;AzEk7OZ;;AyEz7OQ;EAOI,wCAAA;AzEs7OZ;;AyE77OQ;EAOI,wCAAA;AzE07OZ;;AyEj8OQ;EAOI,kCAAA;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AA;EzE61RV;EyEp2RM;IAOI,iCAAA;EzEg2RV;EyEv2RM;IAOI,sCAAA;EzEm2RV;EyE12RM;IAOI,yCAAA;EzEs2RV;EyE72RM;IAOI,uBAAA;EzEy2RV;EyEh3RM;IAOI,uBAAA;EzE42RV;EyEn3RM;IAOI,yBAAA;EzE+2RV;EyEt3RM;IAOI,yBAAA;EzEk3RV;EyEz3RM;IAOI,0BAAA;EzEq3RV;EyE53RM;IAOI,4BAAA;EzEw3RV;EyE/3RM;IAOI,kCAAA;EzE23RV;EyEl4RM;IAOI,sCAAA;EzE83RV;EyEr4RM;IAOI,oCAAA;EzEi4RV;EyEx4RM;IAOI,kCAAA;EzEo4RV;EyE34RM;IAOI,yCAAA;EzEu4RV;EyE94RM;IAOI,wCAAA;EzE04RV;EyEj5RM;IAOI,wCAAA;EzE64RV;EyEp5RM;IAOI,kCAAA;EzEg5RV;EyEv5RM;IAOI,gCAAA;EzEm5RV;EyE15RM;IAOI,8BAAA;EzEs5RV;EyE75RM;IAOI,gCAAA;EzEy5RV;EyEh6RM;IAOI,+BAAA;EzE45RV;EyEn6RM;IAOI,oCAAA;EzE+5RV;EyEt6RM;IAOI,kCAAA;EzEk6RV;EyEz6RM;IAOI,gCAAA;EzEq6RV;EyE56RM;IAOI,uCAAA;EzEw6RV;EyE/6RM;IAOI,sCAAA;EzE26RV;EyEl7RM;IAOI,iCAAA;EzE86RV;EyEr7RM;IAOI,2BAAA;EzEi7RV;EyEx7RM;IAOI,iCAAA;EzEo7RV;EyE37RM;IAOI,+BAAA;EzEu7RV;EyE97RM;IAOI,6BAAA;EzE07RV;EyEj8RM;IAOI,+BAAA;EzE67RV;EyEp8RM;IAOI,8BAAA;EzEg8RV;EyEv8RM;IAOI,oBAAA;EzEm8RV;EyE18RM;IAOI,mBAAA;EzEs8RV;EyE78RM;IAOI,mBAAA;EzEy8RV;EyEh9RM;IAOI,mBAAA;EzE48RV;EyEn9RM;IAOI,mBAAA;EzE+8RV;EyEt9RM;IAOI,mBAAA;EzEk9RV;EyEz9RM;IAOI,mBAAA;EzEq9RV;EyE59RM;IAOI,mBAAA;EzEw9RV;EyE/9RM;IAOI,oBAAA;EzE29RV;EyEl+RM;IAOI,0BAAA;EzE89RV;EyEr+RM;IAOI,yBAAA;EzEi+RV;E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V;EyEt2SM;IAOI,gCAAA;EzEk2SV;EyEz2SM;IAOI,yBAAA;EzEq2SV;EyE52SM;IAOI,wBAAA;EzEw2SV;EyE/2SM;IAOI,+BAAA;EzE22SV;EyEl3SM;IAOI,yBAAA;EzE82SV;EyEr3SM;IAOI,6BAAA;EzEi3SV;EyEx3SM;IAOI,8BAAA;EzEo3SV;EyE33SM;IAOI,wBAAA;EzEu3SV;EyE93SM;IAOI,+BAAA;EzE03SV;EyEj4SM;IAOI,wBAAA;EzE63SV;EyEp4SM;IAOI,yBAAA;EzEg4SV;EyEv4SM;IAOI,8BAAA;EzEm4SV;EyE14SM;IAOI,iCAAA;EzEs4SV;EyE74SM;IAOI,sCAAA;EzEy4SV;EyEh5SM;IAOI,yCAAA;EzE44SV;EyEn5SM;IAOI,uBAAA;EzE+4SV;EyEt5SM;IAOI,uBAAA;EzEk5SV;EyEz5SM;IAOI,yBAAA;EzEq5SV;EyE55SM;IAOI,yBAAA;EzEw5SV;EyE/5SM;IAOI,0BAAA;EzE25SV;EyEl6SM;IAOI,4BAAA;EzE85SV;EyEr6SM;IAOI,kCAAA;EzEi6SV;EyEx6SM;IAOI,sCAAA;EzEo6SV;EyE36SM;IAOI,oCAAA;EzEu6SV;EyE96SM;IAOI,kCAAA;EzE06SV;EyEj7SM;IAOI,yCAAA;EzE66SV;EyEp7SM;IAOI,wCAAA;EzEg7SV;EyEv7SM;IAOI,wCAAA;EzEm7SV;EyE17SM;IAOI,kCAAA;EzEs7SV;EyE77SM;IAOI,gCAAA;EzEy7SV;EyEh8SM;IAOI,8BAAA;EzE47SV;EyEn8SM;IAOI,gCAAA;EzE+7SV;EyEt8SM;IAOI,+BAAA;EzEk8SV;EyEz8SM;IAOI,oCAAA;EzEq8SV;EyE58SM;IAOI,kCAAA;EzEw8SV;EyE/8SM;IAOI,gCAAA;EzE28SV;EyEl9SM;IAOI,uCAAA;EzE88SV;EyEr9SM;IAOI,sCAAA;EzEi9SV;EyEx9SM;IAOI,iCAAA;EzEo9SV;EyE39SM;IAOI,2BAAA;EzEu9SV;EyE99SM;IAOI,iCAAA;EzE09SV;EyEj+SM;IAOI,+BAAA;EzE69SV;EyEp+SM;IAOI,6BAAA;EzEg+SV;EyEv+SM;IAOI,+BAAA;EzEm+SV;EyE1+SM;IA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OI,wBAAA;EzE++VV;EyEt/VM;IAOI,yBAAA;EzEk/VV;EyEz/VM;IAOI,8BAAA;EzEq/VV;EyE5/VM;IAOI,iCAAA;EzEw/VV;EyE//VM;IAOI,sCAAA;EzE2/VV;EyElgWM;IAOI,yCAAA;EzE8/VV;EyErgWM;IAOI,uBAAA;EzEigWV;EyExgWM;IAOI,uBAAA;EzEogWV;EyE3gWM;IAOI,yBAAA;EzEugWV;EyE9gWM;IAOI,yBAAA;EzE0gWV;EyEjhWM;IAOI,0BAAA;EzE6gWV;EyEphWM;IAOI,4BAAA;EzEghWV;EyEvhWM;IAOI,kCAAA;EzEmhWV;EyE1hWM;IAOI,sCAAA;EzEshWV;EyE7hWM;IAOI,oCAAA;EzEyhWV;EyEhiWM;IAOI,kCAAA;EzE4hWV;EyEniWM;IAOI,yCAAA;EzE+hWV;EyEtiWM;IAOI,wCAAA;EzEkiWV;EyEziWM;IAOI,wCAAA;EzEqiWV;EyE5iWM;IAOI,kCAAA;EzEwiWV;EyE/iWM;IAOI,gCAAA;EzE2iWV;EyEljWM;IAOI,8BAAA;EzE8iWV;EyErjWM;IAOI,gCAAA;EzEijWV;EyExjWM;IAOI,+BAAA;EzEojWV;EyE3jWM;IAOI,oCAAA;EzEujWV;EyE9jWM;IAOI,kCAAA;EzE0jWV;EyEjkWM;IAOI,gCAAA;EzE6jWV;EyEpkWM;IAOI,uCAAA;EzEgkWV;EyEvkWM;IAOI,sCAAA;EzEmkWV;EyE1kWM;IAOI,iCAAA;EzEskWV;EyE7kWM;IAOI,2BAAA;EzEykWV;EyEhlWM;IAOI,iCAAA;EzE4kWV;EyEnlWM;IAOI,+BAAA;EzE+kWV;EyEtlWM;IAOI,6BAAA;EzEklWV;EyEzlWM;IAOI,+BAAA;EzEqlWV;EyE5lWM;IAOI,8BAAA;EzEwlWV;EyE/lWM;IAOI,oBAAA;EzE2lWV;EyElmWM;IAOI,mBAAA;EzE8lWV;EyErmWM;IAOI,mBAAA;EzEimWV;EyExmWM;IAOI,mBAAA;EzEomWV;EyE3mWM;IAOI,mBAAA;EzEumWV;EyE9mWM;IAOI,mBAAA;EzE0mWV;EyEjnWM;IAOI,mBAAA;EzE6mWV;EyEpnWM;IAOI,mBAAA;EzEgnWV;EyEvnWM;IAOI,oBAAA;EzE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","file":"main.css","sourcesContent":["@charset \"UTF-8\";\n/*!\n * Bootstrap v5.3.8 (https://getbootstrap.com/)\n * Copyright 2011-2025 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.3.1/css/all.css';\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text-emphasis: rgb(2.0392156863%, 17.2549019608%, 39.6862745098%);\n --bs-secondary-text-emphasis: rgb(16.9411764706%, 18.3529411765%, 19.6078431373%);\n --bs-success-text-emphasis: rgb(3.9215686275%, 21.1764705882%, 13.1764705882%);\n --bs-info-text-emphasis: rgb(2.0392156863%, 31.6862745098%, 37.6470588235%);\n --bs-warning-text-emphasis: rgb(40%, 30.2745098039%, 1.0980392157%);\n --bs-danger-text-emphasis: rgb(34.5098039216%, 8.3137254902%, 10.8235294118%);\n --bs-light-text-emphasis: #495057;\n --bs-dark-text-emphasis: #495057;\n --bs-primary-bg-subtle: rgb(81.0196078431%, 88.6274509804%, 99.8431372549%);\n --bs-secondary-bg-subtle: rgb(88.4705882353%, 89.1764705882%, 89.8039215686%);\n --bs-success-bg-subtle: rgb(81.9607843137%, 90.5882352941%, 86.5882352941%);\n --bs-info-bg-subtle: rgb(81.0196078431%, 95.8431372549%, 98.8235294118%);\n --bs-warning-bg-subtle: rgb(100%, 95.137254902%, 80.5490196078%);\n --bs-danger-bg-subtle: rgb(97.2549019608%, 84.1568627451%, 85.4117647059%);\n --bs-light-bg-subtle: rgb(98.6274509804%, 98.8235294118%, 99.0196078431%);\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: rgb(62.0392156863%, 77.2549019608%, 99.6862745098%);\n --bs-secondary-border-subtle: rgb(76.9411764706%, 78.3529411765%, 79.6078431373%);\n --bs-success-border-subtle: rgb(63.9215686275%, 81.1764705882%, 73.1764705882%);\n --bs-info-border-subtle: rgb(62.0392156863%, 91.6862745098%, 97.6470588235%);\n --bs-warning-border-subtle: rgb(100%, 90.2745098039%, 61.0980392157%);\n --bs-danger-border-subtle: rgb(94.5098039216%, 68.3137254902%, 70.8235294118%);\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-heading-color: inherit;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: rgb(4.0784313725%, 34.5098039216%, 79.3725490196%);\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-color: #212529;\n --bs-highlight-bg: rgb(100%, 95.137254902%, 80.5490196078%);\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-xxl: 2rem;\n --bs-border-radius-2xl: var(--bs-border-radius-xxl);\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n --bs-focus-ring-width: 0.25rem;\n --bs-focus-ring-opacity: 0.25;\n --bs-focus-ring-color: rgba(13, 110, 253, 0.25);\n --bs-form-valid-color: #198754;\n --bs-form-valid-border-color: #198754;\n --bs-form-invalid-color: #dc3545;\n --bs-form-invalid-border-color: #dc3545;\n}\n\n[data-bs-theme=dark] {\n color-scheme: dark;\n --bs-body-color: #dee2e6;\n --bs-body-color-rgb: 222, 226, 230;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #fff;\n --bs-emphasis-color-rgb: 255, 255, 255;\n --bs-secondary-color: rgba(222, 226, 230, 0.75);\n --bs-secondary-color-rgb: 222, 226, 230;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(222, 226, 230, 0.5);\n --bs-tertiary-color-rgb: 222, 226, 230;\n --bs-tertiary-bg: rgb(16.6666666667%, 18.6274509804%, 20.5882352941%);\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-primary-text-emphasis: rgb(43.0588235294%, 65.8823529412%, 99.5294117647%);\n --bs-secondary-text-emphasis: rgb(65.4117647059%, 67.5294117647%, 69.4117647059%);\n --bs-success-text-emphasis: rgb(45.8823529412%, 71.7647058824%, 59.7647058824%);\n --bs-info-text-emphasis: rgb(43.0588235294%, 87.5294117647%, 96.4705882353%);\n --bs-warning-text-emphasis: rgb(100%, 85.4117647059%, 41.6470588235%);\n --bs-danger-text-emphasis: rgb(91.7647058824%, 52.4705882353%, 56.2352941176%);\n --bs-light-text-emphasis: #f8f9fa;\n --bs-dark-text-emphasis: #dee2e6;\n --bs-primary-bg-subtle: rgb(1.0196078431%, 8.6274509804%, 19.8431372549%);\n --bs-secondary-bg-subtle: rgb(8.4705882353%, 9.1764705882%, 9.8039215686%);\n --bs-success-bg-subtle: rgb(1.9607843137%, 10.5882352941%, 6.5882352941%);\n --bs-info-bg-subtle: rgb(1.0196078431%, 15.8431372549%, 18.8235294118%);\n --bs-warning-bg-subtle: rgb(20%, 15.137254902%, 0.5490196078%);\n --bs-danger-bg-subtle: rgb(17.2549019608%, 4.1568627451%, 5.4117647059%);\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: rgb(3.0588235294%, 25.8823529412%, 59.5294117647%);\n --bs-secondary-border-subtle: rgb(25.4117647059%, 27.5294117647%, 29.4117647059%);\n --bs-success-border-subtle: rgb(5.8823529412%, 31.7647058824%, 19.7647058824%);\n --bs-info-border-subtle: rgb(3.0588235294%, 47.5294117647%, 56.4705882353%);\n --bs-warning-border-subtle: rgb(60%, 45.4117647059%, 1.6470588235%);\n --bs-danger-border-subtle: rgb(51.7647058824%, 12.4705882353%, 16.2352941176%);\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: inherit;\n --bs-link-color: rgb(43.0588235294%, 65.8823529412%, 99.5294117647%);\n --bs-link-hover-color: rgb(54.4470588235%, 72.7058823529%, 99.6235294118%);\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 139, 185, 254;\n --bs-code-color: rgb(90.3529411765%, 52%, 71.0588235294%);\n --bs-highlight-color: #dee2e6;\n --bs-highlight-bg: rgb(40%, 30.2745098039%, 1.0980392157%);\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n --bs-form-valid-color: rgb(45.8823529412%, 71.7647058824%, 59.7647058824%);\n --bs-form-valid-border-color: rgb(45.8823529412%, 71.7647058824%, 59.7647058824%);\n --bs-form-invalid-color: rgb(91.7647058824%, 52.4705882353%, 56.2352941176%);\n --bs-form-invalid-border-color: rgb(91.7647058824%, 52.4705882353%, 56.2352941176%);\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--bs-heading-color);\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.1875em;\n color: var(--bs-highlight-color);\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-secondary-color);\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n line-height: inherit;\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n -webkit-appearance: textfield;\n outline-offset: -2px;\n}\n[type=search]::-webkit-search-cancel-button {\n cursor: pointer;\n filter: grayscale(1);\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-weight: 300;\n line-height: 1.2;\n font-size: calc(1.625rem + 4.5vw);\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-weight: 300;\n line-height: 1.2;\n font-size: calc(1.575rem + 3.9vw);\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-weight: 300;\n line-height: 1.2;\n font-size: calc(1.525rem + 3.3vw);\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-weight: 300;\n line-height: 1.2;\n font-size: calc(1.475rem + 2.7vw);\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-weight: 300;\n line-height: 1.2;\n font-size: calc(1.425rem + 2.1vw);\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-weight: 300;\n line-height: 1.2;\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: var(--bs-body-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n:root {\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n .gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n .gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n .gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n .gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n .gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-color-type: initial;\n --bs-table-bg-type: initial;\n --bs-table-color-state: initial;\n --bs-table-bg-state: initial;\n --bs-table-color: var(--bs-emphasis-color);\n --bs-table-bg: var(--bs-body-bg);\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-emphasis-color);\n --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);\n --bs-table-active-color: var(--bs-emphasis-color);\n --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);\n --bs-table-hover-color: var(--bs-emphasis-color);\n --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);\n width: 100%;\n margin-bottom: 1rem;\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));\n background-color: var(--bs-table-bg);\n border-bottom-width: var(--bs-border-width);\n box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)));\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: calc(var(--bs-border-width) * 2) solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: var(--bs-border-width) 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 var(--bs-border-width);\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-color-type: var(--bs-table-striped-color);\n --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n --bs-table-color-type: var(--bs-table-striped-color);\n --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-active {\n --bs-table-color-state: var(--bs-table-active-color);\n --bs-table-bg-state: var(--bs-table-active-bg);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-color-state: var(--bs-table-hover-color);\n --bs-table-bg-state: var(--bs-table-hover-bg);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: rgb(81.0196078431%, 88.6274509804%, 99.8431372549%);\n --bs-table-border-color: rgb(64.8156862745%, 70.9019607843%, 79.8745098039%);\n --bs-table-striped-bg: rgb(76.968627451%, 84.1960784314%, 94.8509803922%);\n --bs-table-striped-color: #000;\n --bs-table-active-bg: rgb(72.9176470588%, 79.7647058824%, 89.8588235294%);\n --bs-table-active-color: #000;\n --bs-table-hover-bg: rgb(74.9431372549%, 81.9803921569%, 92.3549019608%);\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: rgb(88.4705882353%, 89.1764705882%, 89.8039215686%);\n --bs-table-border-color: rgb(70.7764705882%, 71.3411764706%, 71.8431372549%);\n --bs-table-striped-bg: rgb(84.0470588235%, 84.7176470588%, 85.3137254902%);\n --bs-table-striped-color: #000;\n --bs-table-active-bg: rgb(79.6235294118%, 80.2588235294%, 80.8235294118%);\n --bs-table-active-color: #000;\n --bs-table-hover-bg: rgb(81.8352941176%, 82.4882352941%, 83.068627451%);\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: rgb(81.9607843137%, 90.5882352941%, 86.5882352941%);\n --bs-table-border-color: rgb(65.568627451%, 72.4705882353%, 69.2705882353%);\n --bs-table-striped-bg: rgb(77.862745098%, 86.0588235294%, 82.2588235294%);\n --bs-table-striped-color: #000;\n --bs-table-active-bg: rgb(73.7647058824%, 81.5294117647%, 77.9294117647%);\n --bs-table-active-color: #000;\n --bs-table-hover-bg: rgb(75.8137254902%, 83.7941176471%, 80.0941176471%);\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: rgb(81.0196078431%, 95.8431372549%, 98.8235294118%);\n --bs-table-border-color: rgb(64.8156862745%, 76.6745098039%, 79.0588235294%);\n --bs-table-striped-bg: rgb(76.968627451%, 91.0509803922%, 93.8823529412%);\n --bs-table-striped-color: #000;\n --bs-table-active-bg: rgb(72.9176470588%, 86.2588235294%, 88.9411764706%);\n --bs-table-active-color: #000;\n --bs-table-hover-bg: rgb(74.9431372549%, 88.6549019608%, 91.4117647059%);\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: rgb(100%, 95.137254902%, 80.5490196078%);\n --bs-table-border-color: rgb(80%, 76.1098039216%, 64.4392156863%);\n --bs-table-striped-bg: rgb(95%, 90.3803921569%, 76.5215686275%);\n --bs-table-striped-color: #000;\n --bs-table-active-bg: rgb(90%, 85.6235294118%, 72.4941176471%);\n --bs-table-active-color: #000;\n --bs-table-hover-bg: rgb(92.5%, 88.0019607843%, 74.5078431373%);\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: rgb(97.2549019608%, 84.1568627451%, 85.4117647059%);\n --bs-table-border-color: rgb(77.8039215686%, 67.3254901961%, 68.3294117647%);\n --bs-table-striped-bg: rgb(92.3921568627%, 79.9490196078%, 81.1411764706%);\n --bs-table-striped-color: #000;\n --bs-table-active-bg: rgb(87.5294117647%, 75.7411764706%, 76.8705882353%);\n --bs-table-active-color: #000;\n --bs-table-hover-bg: rgb(89.9607843137%, 77.8450980392%, 79.0058823529%);\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: rgb(77.8039215686%, 78.1176470588%, 78.431372549%);\n --bs-table-striped-bg: rgb(92.3921568627%, 92.7647058824%, 93.137254902%);\n --bs-table-striped-color: #000;\n --bs-table-active-bg: rgb(87.5294117647%, 87.8823529412%, 88.2352941176%);\n --bs-table-active-color: #000;\n --bs-table-hover-bg: rgb(89.9607843137%, 90.3235294118%, 90.6862745098%);\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: rgb(30.3529411765%, 31.6078431373%, 32.862745098%);\n --bs-table-striped-bg: rgb(17.2941176471%, 18.7843137255%, 20.2745098039%);\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: rgb(21.6470588235%, 23.0588235294%, 24.4705882353%);\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: rgb(19.4705882353%, 20.9215686275%, 22.3725490196%);\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + var(--bs-border-width));\n padding-bottom: calc(0.375rem + var(--bs-border-width));\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + var(--bs-border-width));\n padding-bottom: calc(0.5rem + var(--bs-border-width));\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + var(--bs-border-width));\n padding-bottom: calc(0.25rem + var(--bs-border-width));\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n appearance: none;\n background-color: var(--bs-body-bg);\n background-clip: padding-box;\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: var(--bs-body-color);\n background-color: var(--bs-body-bg);\n border-color: rgb(52.5490196078%, 71.568627451%, 99.6078431373%);\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n min-width: 85px;\n height: 1.5em;\n margin: 0;\n}\n.form-control::-webkit-datetime-edit {\n display: block;\n padding: 0;\n}\n.form-control::placeholder {\n color: var(--bs-secondary-color);\n opacity: 1;\n}\n.form-control:disabled {\n background-color: var(--bs-secondary-bg);\n opacity: 1;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n margin-inline-end: 0.75rem;\n color: var(--bs-body-color);\n background-color: var(--bs-tertiary-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: var(--bs-border-width);\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: var(--bs-secondary-bg);\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: transparent;\n border: solid transparent;\n border-width: var(--bs-border-width) 0;\n}\n.form-control-plaintext:focus {\n outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: var(--bs-border-radius-sm);\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: var(--bs-border-radius-lg);\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-control-color {\n width: 3rem;\n height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n border: 0 !important;\n border-radius: var(--bs-border-radius);\n}\n.form-control-color::-webkit-color-swatch {\n border: 0 !important;\n border-radius: var(--bs-border-radius);\n}\n.form-control-color.form-control-sm {\n height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-select {\n --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n appearance: none;\n background-color: var(--bs-body-bg);\n background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: rgb(52.5490196078%, 71.568627451%, 99.6078431373%);\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: var(--bs-secondary-bg);\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 var(--bs-body-color);\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n border-radius: var(--bs-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n border-radius: var(--bs-border-radius-lg);\n}\n\n[data-bs-theme=dark] .form-select {\n --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-reverse {\n padding-right: 1.5em;\n padding-left: 0;\n text-align: right;\n}\n.form-check-reverse .form-check-input {\n float: right;\n margin-right: -1.5em;\n margin-left: 0;\n}\n\n.form-check-input {\n --bs-form-check-bg: var(--bs-body-bg);\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n appearance: none;\n background-color: var(--bs-form-check-bg);\n background-image: var(--bs-form-check-bg-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: var(--bs-border-width) solid var(--bs-border-color);\n print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: rgb(52.5490196078%, 71.568627451%, 99.6078431373%);\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n cursor: default;\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n width: 2em;\n margin-left: -2.5em;\n background-image: var(--bs-form-switch-bg);\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgb%2852.5490196078%, 71.568627451%, 99.6078431373%%29'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n padding-right: 2.5em;\n padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n margin-right: -2.5em;\n margin-left: 0;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e\");\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n appearance: none;\n background-color: transparent;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n appearance: none;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: rgb(71.5294117647%, 82.9411764706%, 99.7647058824%);\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-secondary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n appearance: none;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: rgb(71.5294117647%, 82.9411764706%, 99.7647058824%);\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-secondary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: var(--bs-secondary-color);\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: var(--bs-secondary-color);\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n min-height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2;\n max-width: 100%;\n height: 100%;\n padding: 1rem 0.75rem;\n overflow: hidden;\n color: rgba(var(--bs-body-color-rgb), 0.65);\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: var(--bs-border-width) solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n padding-left: 0.75rem;\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > textarea:focus ~ label::after,\n.form-floating > textarea:not(:placeholder-shown) ~ label::after {\n position: absolute;\n inset: 1rem 0.375rem;\n z-index: -1;\n height: 1.5em;\n content: \"\";\n background-color: var(--bs-body-bg);\n border-radius: var(--bs-border-radius);\n}\n.form-floating > textarea:disabled ~ label::after {\n background-color: var(--bs-secondary-bg);\n}\n.form-floating > .form-control-plaintext ~ label {\n border-width: var(--bs-border-width) 0;\n}\n.form-floating > :disabled ~ label,\n.form-floating > .form-control:disabled ~ label {\n color: #6c757d;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n z-index: 5;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-tertiary-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: var(--bs-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: var(--bs-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: calc(-1 * var(--bs-border-width));\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-form-valid-color);\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-success);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: var(--bs-form-valid-border-color);\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: var(--bs-form-valid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: var(--bs-form-valid-border-color);\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e\");\n padding-right: 4.125rem;\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: var(--bs-form-valid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: var(--bs-form-valid-border-color);\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: var(--bs-form-valid-color);\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: var(--bs-form-valid-color);\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-form-invalid-color);\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-danger);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: var(--bs-form-invalid-border-color);\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: var(--bs-form-invalid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: var(--bs-form-invalid-border-color);\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n padding-right: 4.125rem;\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: var(--bs-form-invalid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: var(--bs-form-invalid-border-color);\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: var(--bs-form-invalid-color);\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: var(--bs-form-invalid-color);\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: 0.75rem;\n --bs-btn-padding-y: 0.375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: var(--bs-body-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-width: var(--bs-border-width);\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: var(--bs-border-radius);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n --bs-btn-disabled-opacity: 0.65;\n --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n display: inline-block;\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked:focus-visible + .btn {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: rgb(4.3333333333%, 36.6666666667%, 84.3333333333%);\n --bs-btn-hover-border-color: rgb(4.0784313725%, 34.5098039216%, 79.3725490196%);\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: rgb(4.0784313725%, 34.5098039216%, 79.3725490196%);\n --bs-btn-active-border-color: rgb(3.8235294118%, 32.3529411765%, 74.4117647059%);\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: rgb(36%, 39%, 41.6666666667%);\n --bs-btn-hover-border-color: rgb(33.8823529412%, 36.7058823529%, 39.2156862745%);\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: rgb(33.8823529412%, 36.7058823529%, 39.2156862745%);\n --bs-btn-active-border-color: rgb(31.7647058824%, 34.4117647059%, 36.7647058824%);\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: rgb(8.3333333333%, 45%, 28%);\n --bs-btn-hover-border-color: rgb(7.8431372549%, 42.3529411765%, 26.3529411765%);\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: rgb(7.8431372549%, 42.3529411765%, 26.3529411765%);\n --bs-btn-active-border-color: rgb(7.3529411765%, 39.7058823529%, 24.7058823529%);\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: rgb(19.3333333333%, 82.3333333333%, 95%);\n --bs-btn-hover-border-color: rgb(14.5882352941%, 81.2941176471%, 94.7058823529%);\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: rgb(24.0784313725%, 83.3725490196%, 95.2941176471%);\n --bs-btn-active-border-color: rgb(14.5882352941%, 81.2941176471%, 94.7058823529%);\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: rgb(100%, 79.3333333333%, 17.3333333333%);\n --bs-btn-hover-border-color: rgb(100%, 78.1176470588%, 12.4705882353%);\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: rgb(100%, 80.5490196078%, 22.1960784314%);\n --bs-btn-active-border-color: rgb(100%, 78.1176470588%, 12.4705882353%);\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: rgb(73.3333333333%, 17.6666666667%, 23%);\n --bs-btn-hover-border-color: rgb(69.0196078431%, 16.6274509804%, 21.6470588235%);\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: rgb(69.0196078431%, 16.6274509804%, 21.6470588235%);\n --bs-btn-active-border-color: rgb(64.7058823529%, 15.5882352941%, 20.2941176471%);\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: rgb(82.6666666667%, 83%, 83.3333333333%);\n --bs-btn-hover-border-color: rgb(77.8039215686%, 78.1176470588%, 78.431372549%);\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: rgb(77.8039215686%, 78.1176470588%, 78.431372549%);\n --bs-btn-active-border-color: rgb(72.9411764706%, 73.2352941176%, 73.5294117647%);\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: rgb(26%, 27.3333333333%, 28.6666666667%);\n --bs-btn-hover-border-color: rgb(21.6470588235%, 23.0588235294%, 24.4705882353%);\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: rgb(30.3529411765%, 31.6078431373%, 32.862745098%);\n --bs-btn-active-border-color: rgb(21.6470588235%, 23.0588235294%, 24.4705882353%);\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: 0 0 0 #000;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n --bs-btn-padding-y: 0.5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: var(--bs-border-radius-lg);\n}\n\n.btn-sm, .btn-group-sm > .btn {\n --bs-btn-padding-y: 0.25rem;\n --bs-btn-padding-x: 0.5rem;\n --bs-btn-font-size: 0.875rem;\n --bs-btn-border-radius: var(--bs-border-radius-sm);\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: 0.5rem;\n --bs-dropdown-spacer: 0.125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: var(--bs-body-color);\n --bs-dropdown-bg: var(--bs-body-bg);\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: var(--bs-border-radius);\n --bs-dropdown-border-width: var(--bs-border-width);\n --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: 0.5rem;\n --bs-dropdown-box-shadow: var(--bs-box-shadow);\n --bs-dropdown-link-color: var(--bs-body-color);\n --bs-dropdown-link-hover-color: var(--bs-body-color);\n --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: var(--bs-tertiary-color);\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: 0.25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: 0.5rem;\n position: absolute;\n z-index: var(--bs-dropdown-zindex);\n display: none;\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n margin: 0;\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: left;\n list-style: none;\n background-color: var(--bs-dropdown-bg);\n background-clip: padding-box;\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: var(--bs-dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n font-weight: 400;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n border-radius: var(--bs-dropdown-item-border-radius, 0);\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n text-decoration: none;\n background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: var(--bs-border-radius);\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n margin-left: calc(-1 * var(--bs-border-width));\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: calc(-1 * var(--bs-border-width));\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:nth-child(n+3),\n.btn-group-vertical > :not(.btn-check) + .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n background: none;\n border: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link:focus-visible {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.nav-link.disabled, .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: var(--bs-border-width);\n --bs-nav-tabs-border-color: var(--bs-border-color);\n --bs-nav-tabs-border-radius: var(--bs-border-radius);\n --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);\n --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);\n --bs-nav-tabs-link-active-bg: var(--bs-body-bg);\n --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: var(--bs-border-radius);\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-underline {\n --bs-nav-underline-gap: 1rem;\n --bs-nav-underline-border-width: 0.125rem;\n --bs-nav-underline-link-active-color: var(--bs-emphasis-color);\n gap: var(--bs-nav-underline-gap);\n}\n.nav-underline .nav-link {\n padding-right: 0;\n padding-left: 0;\n border-bottom: var(--bs-nav-underline-border-width) solid transparent;\n}\n.nav-underline .nav-link:hover, .nav-underline .nav-link:focus {\n border-bottom-color: currentcolor;\n}\n.nav-underline .nav-link.active,\n.nav-underline .show > .nav-link {\n font-weight: 700;\n color: var(--bs-nav-underline-link-active-color);\n border-bottom-color: currentcolor;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-grow: 1;\n flex-basis: 0;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: 0.5rem;\n --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);\n --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);\n --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);\n --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-padding-y: 0.3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-nav-link-padding-x: 0.5rem;\n --bs-navbar-toggler-padding-y: 0.25rem;\n --bs-navbar-toggler-padding-x: 0.75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);\n --bs-navbar-toggler-border-radius: var(--bs-border-radius);\n --bs-navbar-toggler-focus-width: 0.25rem;\n --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-right: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .nav-link.active, .navbar-nav .nav-link.show {\n color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-grow: 1;\n flex-basis: 100%;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n line-height: 1;\n color: var(--bs-navbar-color);\n background-color: transparent;\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-dark,\n.navbar[data-bs-theme=dark] {\n --bs-navbar-color: rgba(255, 255, 255, 0.55);\n --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n[data-bs-theme=dark] .navbar-toggler-icon {\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: 0.5rem;\n --bs-card-title-color: ;\n --bs-card-subtitle-color: ;\n --bs-card-border-width: var(--bs-border-width);\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: var(--bs-border-radius);\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-card-cap-padding-y: 0.5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: var(--bs-body-bg);\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: 0.75rem;\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n height: var(--bs-card-height);\n color: var(--bs-body-color);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n background-clip: border-box;\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n color: var(--bs-card-title-color);\n}\n\n.card-subtitle {\n margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n margin-bottom: 0;\n color: var(--bs-card-subtitle-color);\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n margin-bottom: 0;\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) > .card-img-top,\n .card-group > .card:not(:last-child) > .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) > .card-img-bottom,\n .card-group > .card:not(:last-child) > .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) > .card-img-top,\n .card-group > .card:not(:first-child) > .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) > .card-img-bottom,\n .card-group > .card:not(:first-child) > .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: var(--bs-body-color);\n --bs-accordion-bg: var(--bs-body-bg);\n --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: var(--bs-border-width);\n --bs-accordion-border-radius: var(--bs-border-radius);\n --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: var(--bs-body-color);\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='rgb%282.0392156863%, 17.2549019608%, 39.6862745098%%29' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: var(--bs-primary-text-emphasis);\n --bs-accordion-active-bg: var(--bs-primary-bg-subtle);\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n font-size: 1rem;\n color: var(--bs-accordion-btn-color);\n text-align: left;\n background-color: var(--bs-accordion-btn-bg);\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n outline: 0;\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: var(--bs-accordion-border-radius);\n border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type > .accordion-header .accordion-button {\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type > .accordion-header .accordion-button.collapsed {\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type > .accordion-collapse {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush > .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush > .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush > .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush > .accordion-item > .accordion-collapse,\n.accordion-flush > .accordion-item > .accordion-header .accordion-button,\n.accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed {\n border-radius: 0;\n}\n\n[data-bs-theme=dark] .accordion-button::after {\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%2843.0588235294%, 65.8823529412%, 99.5294117647%%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\");\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%2843.0588235294%, 65.8823529412%, 99.5294117647%%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\");\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: var(--bs-secondary-color);\n --bs-breadcrumb-item-padding-x: 0.5rem;\n --bs-breadcrumb-item-active-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n list-style: none;\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: 0.75rem;\n --bs-pagination-padding-y: 0.375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: var(--bs-body-bg);\n --bs-pagination-border-width: var(--bs-border-width);\n --bs-pagination-border-color: var(--bs-border-color);\n --bs-pagination-border-radius: var(--bs-border-radius);\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: var(--bs-tertiary-bg);\n --bs-pagination-hover-border-color: var(--bs-border-color);\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: var(--bs-secondary-bg);\n --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: var(--bs-secondary-color);\n --bs-pagination-disabled-bg: var(--bs-secondary-bg);\n --bs-pagination-disabled-border-color: var(--bs-border-color);\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n text-decoration: none;\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n outline: 0;\n box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: calc(-1 * var(--bs-border-width));\n}\n.page-item:first-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: 0.75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: var(--bs-border-radius-lg);\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: 0.5rem;\n --bs-pagination-padding-y: 0.25rem;\n --bs-pagination-font-size: 0.875rem;\n --bs-pagination-border-radius: var(--bs-border-radius-sm);\n}\n\n.badge {\n --bs-badge-padding-x: 0.65em;\n --bs-badge-padding-y: 0.35em;\n --bs-badge-font-size: 0.75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: var(--bs-border-radius);\n display: inline-block;\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n line-height: 1;\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);\n --bs-alert-border-radius: var(--bs-border-radius);\n --bs-alert-link-color: inherit;\n position: relative;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n color: var(--bs-alert-link-color);\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n --bs-alert-color: var(--bs-primary-text-emphasis);\n --bs-alert-bg: var(--bs-primary-bg-subtle);\n --bs-alert-border-color: var(--bs-primary-border-subtle);\n --bs-alert-link-color: var(--bs-primary-text-emphasis);\n}\n\n.alert-secondary {\n --bs-alert-color: var(--bs-secondary-text-emphasis);\n --bs-alert-bg: var(--bs-secondary-bg-subtle);\n --bs-alert-border-color: var(--bs-secondary-border-subtle);\n --bs-alert-link-color: var(--bs-secondary-text-emphasis);\n}\n\n.alert-success {\n --bs-alert-color: var(--bs-success-text-emphasis);\n --bs-alert-bg: var(--bs-success-bg-subtle);\n --bs-alert-border-color: var(--bs-success-border-subtle);\n --bs-alert-link-color: var(--bs-success-text-emphasis);\n}\n\n.alert-info {\n --bs-alert-color: var(--bs-info-text-emphasis);\n --bs-alert-bg: var(--bs-info-bg-subtle);\n --bs-alert-border-color: var(--bs-info-border-subtle);\n --bs-alert-link-color: var(--bs-info-text-emphasis);\n}\n\n.alert-warning {\n --bs-alert-color: var(--bs-warning-text-emphasis);\n --bs-alert-bg: var(--bs-warning-bg-subtle);\n --bs-alert-border-color: var(--bs-warning-border-subtle);\n --bs-alert-link-color: var(--bs-warning-text-emphasis);\n}\n\n.alert-danger {\n --bs-alert-color: var(--bs-danger-text-emphasis);\n --bs-alert-bg: var(--bs-danger-bg-subtle);\n --bs-alert-border-color: var(--bs-danger-border-subtle);\n --bs-alert-link-color: var(--bs-danger-text-emphasis);\n}\n\n.alert-light {\n --bs-alert-color: var(--bs-light-text-emphasis);\n --bs-alert-bg: var(--bs-light-bg-subtle);\n --bs-alert-border-color: var(--bs-light-border-subtle);\n --bs-alert-link-color: var(--bs-light-text-emphasis);\n}\n\n.alert-dark {\n --bs-alert-color: var(--bs-dark-text-emphasis);\n --bs-alert-bg: var(--bs-dark-bg-subtle);\n --bs-alert-border-color: var(--bs-dark-border-subtle);\n --bs-alert-link-color: var(--bs-dark-text-emphasis);\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: var(--bs-progress-height);\n }\n}\n.progress,\n.progress-stacked {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: 0.75rem;\n --bs-progress-bg: var(--bs-secondary-bg);\n --bs-progress-border-radius: var(--bs-border-radius);\n --bs-progress-box-shadow: var(--bs-box-shadow-inset);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width 0.6s ease;\n display: flex;\n height: var(--bs-progress-height);\n overflow: hidden;\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-stacked > .progress {\n overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n width: 100%;\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: var(--bs-body-color);\n --bs-list-group-bg: var(--bs-body-bg);\n --bs-list-group-border-color: var(--bs-border-color);\n --bs-list-group-border-width: var(--bs-border-width);\n --bs-list-group-border-radius: var(--bs-border-radius);\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: 0.5rem;\n --bs-list-group-action-color: var(--bs-secondary-color);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);\n --bs-list-group-action-active-color: var(--bs-body-color);\n --bs-list-group-action-active-bg: var(--bs-secondary-bg);\n --bs-list-group-disabled-color: var(--bs-secondary-color);\n --bs-list-group-disabled-bg: var(--bs-body-bg);\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n text-decoration: none;\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-item-action {\n width: 100%;\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n}\n.list-group-item-action:not(.active):hover, .list-group-item-action:not(.active):focus {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:not(.active):active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n --bs-list-group-color: var(--bs-primary-text-emphasis);\n --bs-list-group-bg: var(--bs-primary-bg-subtle);\n --bs-list-group-border-color: var(--bs-primary-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-primary-border-subtle);\n --bs-list-group-active-color: var(--bs-primary-bg-subtle);\n --bs-list-group-active-bg: var(--bs-primary-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-primary-text-emphasis);\n}\n\n.list-group-item-secondary {\n --bs-list-group-color: var(--bs-secondary-text-emphasis);\n --bs-list-group-bg: var(--bs-secondary-bg-subtle);\n --bs-list-group-border-color: var(--bs-secondary-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);\n --bs-list-group-active-color: var(--bs-secondary-bg-subtle);\n --bs-list-group-active-bg: var(--bs-secondary-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis);\n}\n\n.list-group-item-success {\n --bs-list-group-color: var(--bs-success-text-emphasis);\n --bs-list-group-bg: var(--bs-success-bg-subtle);\n --bs-list-group-border-color: var(--bs-success-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-success-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-success-border-subtle);\n --bs-list-group-active-color: var(--bs-success-bg-subtle);\n --bs-list-group-active-bg: var(--bs-success-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-success-text-emphasis);\n}\n\n.list-group-item-info {\n --bs-list-group-color: var(--bs-info-text-emphasis);\n --bs-list-group-bg: var(--bs-info-bg-subtle);\n --bs-list-group-border-color: var(--bs-info-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-info-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-info-border-subtle);\n --bs-list-group-active-color: var(--bs-info-bg-subtle);\n --bs-list-group-active-bg: var(--bs-info-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-info-text-emphasis);\n}\n\n.list-group-item-warning {\n --bs-list-group-color: var(--bs-warning-text-emphasis);\n --bs-list-group-bg: var(--bs-warning-bg-subtle);\n --bs-list-group-border-color: var(--bs-warning-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-warning-border-subtle);\n --bs-list-group-active-color: var(--bs-warning-bg-subtle);\n --bs-list-group-active-bg: var(--bs-warning-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-warning-text-emphasis);\n}\n\n.list-group-item-danger {\n --bs-list-group-color: var(--bs-danger-text-emphasis);\n --bs-list-group-bg: var(--bs-danger-bg-subtle);\n --bs-list-group-border-color: var(--bs-danger-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-danger-border-subtle);\n --bs-list-group-active-color: var(--bs-danger-bg-subtle);\n --bs-list-group-active-bg: var(--bs-danger-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-danger-text-emphasis);\n}\n\n.list-group-item-light {\n --bs-list-group-color: var(--bs-light-text-emphasis);\n --bs-list-group-bg: var(--bs-light-bg-subtle);\n --bs-list-group-border-color: var(--bs-light-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-light-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-light-border-subtle);\n --bs-list-group-active-color: var(--bs-light-bg-subtle);\n --bs-list-group-active-bg: var(--bs-light-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-light-text-emphasis);\n}\n\n.list-group-item-dark {\n --bs-list-group-color: var(--bs-dark-text-emphasis);\n --bs-list-group-bg: var(--bs-dark-bg-subtle);\n --bs-list-group-border-color: var(--bs-dark-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-dark-border-subtle);\n --bs-list-group-active-color: var(--bs-dark-bg-subtle);\n --bs-list-group-active-bg: var(--bs-dark-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-dark-text-emphasis);\n}\n\n.btn-close {\n --bs-btn-close-color: #000;\n --bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e\");\n --bs-btn-close-opacity: 0.5;\n --bs-btn-close-hover-opacity: 0.75;\n --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-btn-close-focus-opacity: 1;\n --bs-btn-close-disabled-opacity: 0.25;\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: var(--bs-btn-close-color);\n background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;\n filter: var(--bs-btn-close-filter);\n border: 0;\n border-radius: 0.375rem;\n opacity: var(--bs-btn-close-opacity);\n}\n.btn-close:hover {\n color: var(--bs-btn-close-color);\n text-decoration: none;\n opacity: var(--bs-btn-close-hover-opacity);\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: var(--bs-btn-close-focus-shadow);\n opacity: var(--bs-btn-close-focus-opacity);\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n user-select: none;\n opacity: var(--bs-btn-close-disabled-opacity);\n}\n\n.btn-close-white {\n --bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n:root,\n[data-bs-theme=light] {\n --bs-btn-close-filter: ;\n}\n\n[data-bs-theme=dark] {\n --bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: 0.75rem;\n --bs-toast-padding-y: 0.5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: 0.875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-border-width: var(--bs-border-width);\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: var(--bs-border-radius);\n --bs-toast-box-shadow: var(--bs-box-shadow);\n --bs-toast-header-color: var(--bs-secondary-color);\n --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-header-border-color: var(--bs-border-color-translucent);\n width: var(--bs-toast-max-width);\n max-width: 100%;\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n background-clip: padding-box;\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n position: absolute;\n z-index: var(--bs-toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: 0.5rem;\n --bs-modal-color: var(--bs-body-color);\n --bs-modal-bg: var(--bs-body-bg);\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: var(--bs-border-width);\n --bs-modal-border-radius: var(--bs-border-radius-lg);\n --bs-modal-box-shadow: var(--bs-box-shadow-sm);\n --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: var(--bs-border-width);\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: 0.5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: var(--bs-border-width);\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--bs-modal-margin);\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transform: translate(0, -50px);\n transition: transform 0.3s ease-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n background-clip: padding-box;\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n outline: 0;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: 0.5;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-backdrop-zindex);\n width: 100vw;\n height: 100vh;\n background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n margin-top: calc(-0.5 * var(--bs-modal-header-padding-y));\n margin-right: calc(-0.5 * var(--bs-modal-header-padding-x));\n margin-bottom: calc(-0.5 * var(--bs-modal-header-padding-y));\n margin-left: auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: var(--bs-box-shadow);\n }\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n --bs-modal-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header,\n .modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header,\n .modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header,\n .modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header,\n .modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header,\n .modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: 0.5rem;\n --bs-tooltip-padding-y: 0.25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: 0.875rem;\n --bs-tooltip-color: var(--bs-body-bg);\n --bs-tooltip-bg: var(--bs-emphasis-color);\n --bs-tooltip-border-radius: var(--bs-border-radius);\n --bs-tooltip-opacity: 0.9;\n --bs-tooltip-arrow-width: 0.8rem;\n --bs-tooltip-arrow-height: 0.4rem;\n z-index: var(--bs-tooltip-zindex);\n display: block;\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n display: block;\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: calc(-1 * var(--bs-tooltip-arrow-height));\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: calc(-1 * var(--bs-tooltip-arrow-height));\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: 0.875rem;\n --bs-popover-bg: var(--bs-body-bg);\n --bs-popover-border-width: var(--bs-border-width);\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: var(--bs-border-radius-lg);\n --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));\n --bs-popover-box-shadow: var(--bs-box-shadow);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: 0.5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: inherit;\n --bs-popover-header-bg: var(--bs-secondary-bg);\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: var(--bs-body-color);\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: 0.5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n display: block;\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n background-clip: padding-box;\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n display: block;\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--bs-popover-arrow-width);\n margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n margin-bottom: 0;\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n .carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n filter: var(--bs-carousel-control-icon-filter);\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e\") /*rtl:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\")*/;\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\") /*rtl:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e\")*/;\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: var(--bs-carousel-indicator-active-bg);\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: var(--bs-carousel-caption-color);\n text-align: center;\n}\n\n.carousel-dark {\n --bs-carousel-indicator-active-bg: #000;\n --bs-carousel-caption-color: #000;\n --bs-carousel-control-icon-filter: invert(1) grayscale(100);\n}\n\n:root,\n[data-bs-theme=light] {\n --bs-carousel-indicator-active-bg: #fff;\n --bs-carousel-caption-color: #fff;\n --bs-carousel-control-icon-filter: ;\n}\n\n[data-bs-theme=dark] {\n --bs-carousel-indicator-active-bg: #000;\n --bs-carousel-caption-color: #000;\n --bs-carousel-control-icon-filter: invert(1) grayscale(100);\n}\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n flex-shrink: 0;\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n border-radius: 50%;\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-border-width: 0.25em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-grow;\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: var(--bs-body-color);\n --bs-offcanvas-bg: var(--bs-body-bg);\n --bs-offcanvas-border-width: var(--bs-border-width);\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);\n --bs-offcanvas-transition: transform 0.3s ease-in-out;\n --bs-offcanvas-title-line-height: 1.5;\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-sm.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-sm.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-sm.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n visibility: visible;\n }\n}\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n .offcanvas-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-md.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-md.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-md.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n visibility: visible;\n }\n}\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n .offcanvas-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-lg.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-lg.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-lg.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n visibility: visible;\n }\n}\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n .offcanvas-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-xl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-xl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-xl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n .offcanvas-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-xxl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-xxl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-xxl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n .offcanvas-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n.offcanvas.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));\n margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n margin-left: auto;\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: var(--bs-offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n overflow-y: auto;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-secondary {\n color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-success {\n color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-success:hover, .link-success:focus {\n color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-info {\n color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-info:hover, .link-info:focus {\n color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-warning {\n color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-danger {\n color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-light {\n color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-light:hover, .link-light:focus {\n color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-dark {\n color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-body-emphasis {\n color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-body-emphasis:hover, .link-body-emphasis:focus {\n color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;\n text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n}\n\n.focus-ring:focus {\n outline: 0;\n box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);\n}\n\n.icon-link {\n display: inline-flex;\n gap: 0.375rem;\n align-items: center;\n text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n text-underline-offset: 0.25em;\n backface-visibility: hidden;\n}\n.icon-link > .bi {\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n fill: currentcolor;\n transition: 0.2s ease-in-out transform;\n}\n@media (prefers-reduced-motion: reduce) {\n .icon-link > .bi {\n transition: none;\n }\n}\n\n.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi {\n transform: var(--bs-icon-link-transform, translate3d(0.25em, 0, 0));\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n.visually-hidden:not(caption),\n.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {\n position: absolute !important;\n}\n.visually-hidden *,\n.visually-hidden-focusable:not(:focus):not(:focus-within) * {\n overflow: hidden !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: var(--bs-border-width);\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.object-fit-contain {\n object-fit: contain !important;\n}\n\n.object-fit-cover {\n object-fit: cover !important;\n}\n\n.object-fit-fill {\n object-fit: fill !important;\n}\n\n.object-fit-scale {\n object-fit: scale-down !important;\n}\n\n.object-fit-none {\n object-fit: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.overflow-x-auto {\n overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n overflow-y: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-inline-grid {\n display: inline-grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: var(--bs-box-shadow) !important;\n}\n\n.shadow-sm {\n box-shadow: var(--bs-box-shadow-sm) !important;\n}\n\n.shadow-lg {\n box-shadow: var(--bs-box-shadow-lg) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.focus-ring-primary {\n --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-secondary {\n --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-success {\n --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-info {\n --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-warning {\n --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-danger {\n --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-light {\n --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-dark {\n --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity));\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-black {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n border-width: 1px !important;\n}\n\n.border-2 {\n border-width: 2px !important;\n}\n\n.border-3 {\n border-width: 3px !important;\n}\n\n.border-4 {\n border-width: 4px !important;\n}\n\n.border-5 {\n border-width: 5px !important;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.row-gap-0 {\n row-gap: 0 !important;\n}\n\n.row-gap-1 {\n row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n column-gap: 0 !important;\n}\n\n.column-gap-1 {\n column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n column-gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-medium {\n font-weight: 500 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n --bs-text-opacity: 1;\n color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n --bs-text-opacity: 1;\n color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n color: var(--bs-primary-text-emphasis) !important;\n}\n\n.text-secondary-emphasis {\n color: var(--bs-secondary-text-emphasis) !important;\n}\n\n.text-success-emphasis {\n color: var(--bs-success-text-emphasis) !important;\n}\n\n.text-info-emphasis {\n color: var(--bs-info-text-emphasis) !important;\n}\n\n.text-warning-emphasis {\n color: var(--bs-warning-text-emphasis) !important;\n}\n\n.text-danger-emphasis {\n color: var(--bs-danger-text-emphasis) !important;\n}\n\n.text-light-emphasis {\n color: var(--bs-light-text-emphasis) !important;\n}\n\n.text-dark-emphasis {\n color: var(--bs-dark-text-emphasis) !important;\n}\n\n.link-opacity-10 {\n --bs-link-opacity: 0.1;\n}\n\n.link-opacity-10-hover:hover {\n --bs-link-opacity: 0.1;\n}\n\n.link-opacity-25 {\n --bs-link-opacity: 0.25;\n}\n\n.link-opacity-25-hover:hover {\n --bs-link-opacity: 0.25;\n}\n\n.link-opacity-50 {\n --bs-link-opacity: 0.5;\n}\n\n.link-opacity-50-hover:hover {\n --bs-link-opacity: 0.5;\n}\n\n.link-opacity-75 {\n --bs-link-opacity: 0.75;\n}\n\n.link-opacity-75-hover:hover {\n --bs-link-opacity: 0.75;\n}\n\n.link-opacity-100 {\n --bs-link-opacity: 1;\n}\n\n.link-opacity-100-hover:hover {\n --bs-link-opacity: 1;\n}\n\n.link-offset-1 {\n text-underline-offset: 0.125em !important;\n}\n\n.link-offset-1-hover:hover {\n text-underline-offset: 0.125em !important;\n}\n\n.link-offset-2 {\n text-underline-offset: 0.25em !important;\n}\n\n.link-offset-2-hover:hover {\n text-underline-offset: 0.25em !important;\n}\n\n.link-offset-3 {\n text-underline-offset: 0.375em !important;\n}\n\n.link-offset-3-hover:hover {\n text-underline-offset: 0.375em !important;\n}\n\n.link-underline-primary {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-secondary {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-success {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-info {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-warning {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-danger {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-light {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-dark {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-underline-opacity-0 {\n --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-0-hover:hover {\n --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-10 {\n --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-10-hover:hover {\n --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-25 {\n --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-25-hover:hover {\n --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-50 {\n --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-50-hover:hover {\n --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-75 {\n --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-75-hover:hover {\n --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-100 {\n --bs-link-underline-opacity: 1;\n}\n\n.link-underline-opacity-100-hover:hover {\n --bs-link-underline-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-body-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n}\n\n.rounded-top-1 {\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n border-top-left-radius: var(--bs-border-radius-xxl) !important;\n border-top-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-top-circle {\n border-top-left-radius: 50% !important;\n border-top-right-radius: 50% !important;\n}\n\n.rounded-top-pill {\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n\n.rounded-end-1 {\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n border-top-right-radius: var(--bs-border-radius-xxl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-end-circle {\n border-top-right-radius: 50% !important;\n border-bottom-right-radius: 50% !important;\n}\n\n.rounded-end-pill {\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n border-bottom-right-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-bottom-circle {\n border-bottom-right-radius: 50% !important;\n border-bottom-left-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n border-bottom-left-radius: 0 !important;\n border-top-left-radius: 0 !important;\n}\n\n.rounded-start-1 {\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n border-top-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-start-circle {\n border-bottom-left-radius: 50% !important;\n border-top-left-radius: 50% !important;\n}\n\n.rounded-start-pill {\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n.z-n1 {\n z-index: -1 !important;\n}\n\n.z-0 {\n z-index: 0 !important;\n}\n\n.z-1 {\n z-index: 1 !important;\n}\n\n.z-2 {\n z-index: 2 !important;\n}\n\n.z-3 {\n z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .object-fit-sm-contain {\n object-fit: contain !important;\n }\n .object-fit-sm-cover {\n object-fit: cover !important;\n }\n .object-fit-sm-fill {\n object-fit: fill !important;\n }\n .object-fit-sm-scale {\n object-fit: scale-down !important;\n }\n .object-fit-sm-none {\n object-fit: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-inline-grid {\n display: inline-grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .row-gap-sm-0 {\n row-gap: 0 !important;\n }\n .row-gap-sm-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-sm-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-sm-3 {\n row-gap: 1rem !important;\n }\n .row-gap-sm-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-sm-5 {\n row-gap: 3rem !important;\n }\n .column-gap-sm-0 {\n column-gap: 0 !important;\n }\n .column-gap-sm-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-sm-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-sm-3 {\n column-gap: 1rem !important;\n }\n .column-gap-sm-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-sm-5 {\n column-gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .object-fit-md-contain {\n object-fit: contain !important;\n }\n .object-fit-md-cover {\n object-fit: cover !important;\n }\n .object-fit-md-fill {\n object-fit: fill !important;\n }\n .object-fit-md-scale {\n object-fit: scale-down !important;\n }\n .object-fit-md-none {\n object-fit: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-inline-grid {\n display: inline-grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .row-gap-md-0 {\n row-gap: 0 !important;\n }\n .row-gap-md-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-md-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-md-3 {\n row-gap: 1rem !important;\n }\n .row-gap-md-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-md-5 {\n row-gap: 3rem !important;\n }\n .column-gap-md-0 {\n column-gap: 0 !important;\n }\n .column-gap-md-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-md-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-md-3 {\n column-gap: 1rem !important;\n }\n .column-gap-md-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-md-5 {\n column-gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .object-fit-lg-contain {\n object-fit: contain !important;\n }\n .object-fit-lg-cover {\n object-fit: cover !important;\n }\n .object-fit-lg-fill {\n object-fit: fill !important;\n }\n .object-fit-lg-scale {\n object-fit: scale-down !important;\n }\n .object-fit-lg-none {\n object-fit: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-inline-grid {\n display: inline-grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .row-gap-lg-0 {\n row-gap: 0 !important;\n }\n .row-gap-lg-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-lg-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-lg-3 {\n row-gap: 1rem !important;\n }\n .row-gap-lg-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-lg-5 {\n row-gap: 3rem !important;\n }\n .column-gap-lg-0 {\n column-gap: 0 !important;\n }\n .column-gap-lg-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-lg-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-lg-3 {\n column-gap: 1rem !important;\n }\n .column-gap-lg-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-lg-5 {\n column-gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .object-fit-xl-contain {\n object-fit: contain !important;\n }\n .object-fit-xl-cover {\n object-fit: cover !important;\n }\n .object-fit-xl-fill {\n object-fit: fill !important;\n }\n .object-fit-xl-scale {\n object-fit: scale-down !important;\n }\n .object-fit-xl-none {\n object-fit: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-inline-grid {\n display: inline-grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .row-gap-xl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xl-0 {\n column-gap: 0 !important;\n }\n .column-gap-xl-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-xl-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-xl-3 {\n column-gap: 1rem !important;\n }\n .column-gap-xl-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-xl-5 {\n column-gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .object-fit-xxl-contain {\n object-fit: contain !important;\n }\n .object-fit-xxl-cover {\n object-fit: cover !important;\n }\n .object-fit-xxl-fill {\n object-fit: fill !important;\n }\n .object-fit-xxl-scale {\n object-fit: scale-down !important;\n }\n .object-fit-xxl-none {\n object-fit: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-inline-grid {\n display: inline-grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .row-gap-xxl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xxl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xxl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xxl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xxl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xxl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xxl-0 {\n column-gap: 0 !important;\n }\n .column-gap-xxl-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-xxl-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-xxl-3 {\n column-gap: 1rem !important;\n }\n .column-gap-xxl-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-xxl-5 {\n column-gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-inline-grid {\n display: inline-grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n@font-face {\n font-display: swap;\n font-family: \"Gloria Hallelujah\";\n font-style: normal;\n font-weight: 400;\n src: url(\"../fonts/gloria-hallelujah-v24-latin/gloria-hallelujah-v24-latin-regular.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Lato\";\n font-style: normal;\n font-weight: 100;\n src: url(\"../fonts/lato-v25-latin/lato-v25-latin-100.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Lato\";\n font-style: italic;\n font-weight: 100;\n src: url(\"../fonts/lato-v25-latin/lato-v25-latin-100italic.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Lato\";\n font-style: normal;\n font-weight: 300;\n src: url(\"../fonts/lato-v25-latin/lato-v25-latin-300.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Lato\";\n font-style: italic;\n font-weight: 300;\n src: url(\"../fonts/lato-v25-latin/lato-v25-latin-300italic.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Lato\";\n font-style: normal;\n font-weight: 400;\n src: url(\"../fonts/lato-v25-latin/lato-v25-latin-regular.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Lato\";\n font-style: italic;\n font-weight: 400;\n src: url(\"../fonts/lato-v25-latin/lato-v25-latin-italic.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Lato\";\n font-style: normal;\n font-weight: 700;\n src: url(\"../fonts/lato-v25-latin/lato-v25-latin-700.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Lato\";\n font-style: italic;\n font-weight: 700;\n src: url(\"../fonts/lato-v25-latin/lato-v25-latin-700italic.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Lato\";\n font-style: normal;\n font-weight: 900;\n src: url(\"../fonts/lato-v25-latin/lato-v25-latin-900.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Lato\";\n font-style: italic;\n font-weight: 900;\n src: url(\"../fonts/lato-v25-latin/lato-v25-latin-900italic.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: normal;\n font-weight: 200;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-200.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: italic;\n font-weight: 200;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-200italic.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: normal;\n font-weight: 300;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-300.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: italic;\n font-weight: 300;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-300italic.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: normal;\n font-weight: 400;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-regular.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: italic;\n font-weight: 400;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-italic.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: normal;\n font-weight: 500;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-500.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: italic;\n font-weight: 500;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-500italic.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: normal;\n font-weight: 600;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-600.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: italic;\n font-weight: 600;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-600italic.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: normal;\n font-weight: 700;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-700.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: italic;\n font-weight: 700;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-700italic.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: normal;\n font-weight: 800;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-800.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: italic;\n font-weight: 800;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-800italic.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: normal;\n font-weight: 900;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-900.woff2\") format(\"woff2\");\n}\n@font-face {\n font-display: swap;\n font-family: \"Source Sans 3\";\n font-style: italic;\n font-weight: 900;\n src: url(\"../fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-900italic.woff2\") format(\"woff2\");\n}\n/* Color Theme Swatches in Hex */\n*,\nhtml {\n box-sizing: border-box;\n}\n\nhtml,\nbody {\n height: 100%;\n}\n\nbody {\n margin: 0;\n padding: 0;\n font-family: \"Source Sans 3\", \"Segoe UI\", Tahoma, Geneva, Verdana, sans-serif;\n}\n\nh1, .h1,\nh2,\n.h2,\nh3,\n.h3,\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n font-family: \"Lato\", Cambria, Cochin, Georgia, Times, \"Times New Roman\", serif;\n font-weight: 600;\n}\n\nblockquote {\n font-family: \"Gloria Hallelujah\", Cambria, Cochin, Georgia, Times, \"Times New Roman\", serif;\n}\n\n.chuck-norris-joke {\n position: relative;\n width: 100%;\n height: 100%;\n height: 100vh;\n background: #555 url(\"../img/concrete-bg.jpg\") center no-repeat fixed;\n background-size: cover;\n}\n.chuck-norris-joke::after {\n content: \"\";\n position: absolute;\n z-index: 1;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: radial-gradient(circle, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.8) 100%);\n}\n.chuck-norris-joke > * {\n position: relative;\n z-index: 2;\n}\n.chuck-norris-joke {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n}\n.chuck-norris-joke .joke-text {\n color: white;\n text-align: center;\n font-size: 3rem;\n max-width: 80%;\n padding: 2rem;\n text-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);\n}\n\n.header-main {\n width: 100%;\n height: 30vh; /* viewport height */\n height: 400px;\n background: black url(\"../img/header-bg.webp\") center no-repeat border-box;\n background-size: cover;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n border: 20px solid rgba(255, 255, 255, 0.25);\n}\n\n.logo-main img,\n.logo-main svg {\n width: 320px;\n height: auto;\n max-width: 320px;\n}\n.logo-main figcaption {\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.menu-main {\n margin: 0;\n padding: 0;\n background-color: #101010;\n}\n.menu-main ul {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n.menu-main ul.list {\n display: flex;\n}\n.menu-main ul.list li a {\n outline: none;\n}\n.menu-main ul.list li a:hover, .menu-main ul.list li a:focus {\n color: #101010;\n background-color: #f2ebbf;\n}\n.menu-main ul.list li a {\n display: inline-block;\n color: #f2ebbf;\n background-color: #101010;\n padding: 0.5rem 1rem;\n text-decoration: none;\n text-transform: uppercase;\n transition: all 0.25s ease-out;\n}\n.menu-main ul.sublist {\n position: absolute;\n}\n.menu-main ul ul {\n display: none;\n}\n.menu-main ul > li:hover ul,\n.menu-main ul > li:focus ul,\n.menu-main ul > li:focus-within ul {\n display: block;\n}\n\n/* Mobile first */\n.product-manager table tfoot .row > * {\n margin-bottom: 0.5rem;\n}\n\n@media (min-width: 992px) {\n .product-manager table tfoot .row > * {\n margin-bottom: 0;\n }\n}\n.product-manager table td {\n vertical-align: middle;\n}\n\n.product-manager table tbody:empty::after {\n content: \"loading products...\";\n width: max-content;\n display: inline-block;\n color: #999;\n padding: 1rem;\n}\n\n.product-manager table td button {\n margin: 0 3px;\n}\n\n.product-manager table .th-actions {\n width: 185px;\n}\n\n.product-manager table .th-dragger {\n width: 50px;\n}","@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.8 (https://getbootstrap.com/)\n * Copyright 2011-2025 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n","// TODO: change with SASS FontAwesome Version\n@import 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.3.1/css/all.css';\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n\n --#{$prefix}body-color: #{$body-color};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n // scss-docs-end root-body-variables\n\n --#{$prefix}heading-color: #{$headings-color};\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-color: #{$mark-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n // Focus styles\n // scss-docs-start root-focus-variables\n --#{$prefix}focus-ring-width: #{$focus-ring-width};\n --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n --#{$prefix}focus-ring-color: #{$focus-ring-color};\n // scss-docs-end root-focus-variables\n\n // scss-docs-start root-form-validation-variables\n --#{$prefix}form-valid-color: #{$form-valid-color};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n --#{$prefix}form-invalid-color: #{$form-invalid-color};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n color-scheme: dark;\n\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n @each $color, $value in $theme-colors-text-dark {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle-dark {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle-dark {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n --#{$prefix}highlight-color: #{$mark-color-dark};\n --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query () {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query () {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + \" \" + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n } @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + \" \" + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n } @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + \" \" + $value;\n } @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + \" calc(\" + $min-width + if($value < 0, \" - \", \" + \") + $variable-width + \")\";\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluid-val: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluid-val {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule () {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule () {\n #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, ``-`` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on ` `s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `
` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `