diff --git a/6/bundle.25e23cc746eca4886d2b.js b/6/bundle.25e23cc746eca4886d2b.js
deleted file mode 100644
index 9d4db74..0000000
--- a/6/bundle.25e23cc746eca4886d2b.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{var __webpack_modules__={89:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\nvar injectStylesIntoStyleTag = __webpack_require__(379);\nvar injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleDomAPI.js\nvar styleDomAPI = __webpack_require__(795);\nvar styleDomAPI_default = /*#__PURE__*/__webpack_require__.n(styleDomAPI);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertBySelector.js\nvar insertBySelector = __webpack_require__(569);\nvar insertBySelector_default = /*#__PURE__*/__webpack_require__.n(insertBySelector);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\nvar setAttributesWithoutAttributes = __webpack_require__(565);\nvar setAttributesWithoutAttributes_default = /*#__PURE__*/__webpack_require__.n(setAttributesWithoutAttributes);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertStyleElement.js\nvar insertStyleElement = __webpack_require__(216);\nvar insertStyleElement_default = /*#__PURE__*/__webpack_require__.n(insertStyleElement);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleTagTransform.js\nvar styleTagTransform = __webpack_require__(589);\nvar styleTagTransform_default = /*#__PURE__*/__webpack_require__.n(styleTagTransform);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/framework/view/abstract-view.css\nvar abstract_view = __webpack_require__(10);\n;// CONCATENATED MODULE: ./src/framework/view/abstract-view.css\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (styleTagTransform_default());\noptions.setAttributes = (setAttributesWithoutAttributes_default());\n\n options.insert = insertBySelector_default().bind(null, "head");\n \noptions.domAPI = (styleDomAPI_default());\noptions.insertStyleElement = (insertStyleElement_default());\n\nvar update = injectStylesIntoStyleTag_default()(abstract_view/* default */.Z, options);\n\n\n\n\n /* harmony default export */ const view_abstract_view = (abstract_view/* default */.Z && abstract_view/* default.locals */.Z.locals ? abstract_view/* default.locals */.Z.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/framework/view/abstract-view.js\n\n\n\n/** @const {string} Класс, реализующий эффект "покачивания головой" */\nconst SHAKE_CLASS_NAME = \'shake\';\n\n/** @const {number} Время анимации в миллисекундах */\nconst SHAKE_ANIMATION_TIMEOUT = 600;\n\n/**\n * Абстрактный класс представления\n */\nclass AbstractView {\n /** @type {HTMLElement|null} Элемент представления */\n #element = null;\n constructor() {\n if (new.target === AbstractView) {\n throw new Error(\'Can\\\'t instantiate AbstractView, only concrete one.\');\n }\n }\n\n /**\n * Геттер для получения элемента\n * @returns {HTMLElement} Элемент представления\n */\n get element() {\n if (!this.#element) {\n this.#element = createElement(this.template);\n }\n return this.#element;\n }\n\n /**\n * Геттер для получения разметки элемента\n * @abstract\n * @returns {string} Разметка элемента в виде строки\n */\n get template() {\n throw new Error(\'Abstract method not implemented: get template\');\n }\n\n /** Метод для удаления элемента */\n removeElement() {\n this.#element = null;\n }\n\n /**\n * Метод, реализующий эффект "покачивания головой"\n * @param {shakeCallback} [callback] Функция, которая будет вызвана после завершения анимации\n */\n shake(callback) {\n this.element.classList.add(SHAKE_CLASS_NAME);\n setTimeout(() => {\n this.element.classList.remove(SHAKE_CLASS_NAME);\n callback?.();\n }, SHAKE_ANIMATION_TIMEOUT);\n }\n}\n\n/**\n * Функция, которая будет вызвана методом shake после завершения анимации\n * @callback shakeCallback\n */\n;// CONCATENATED MODULE: ./src/framework/render.js\n\n\n/** @enum {string}\n * BEFOREBEGIN - вставить элемент перед началом контейнера\n * AFTERBEGIN - вставить элемент сразу после начала контейнера\n * BEFOREEND - вставить элемент перед концом контейнера\n * AFTEREND - вставить элемент сразу после конца контейнера\n*/\nconst RenderPosition = {\n BEFOREBEGIN: \'beforebegin\',\n AFTERBEGIN: \'afterbegin\',\n BEFOREEND: \'beforeend\',\n AFTEREND: \'afterend\'\n};\n\n/**\n * Функция для создания элемента на основе разметки\n * @param {string} template Разметка в виде строки\n * @returns {HTMLElement} Созданный элемент\n */\nfunction createElement(template) {\n const newElement = document.createElement(\'div\');\n newElement.innerHTML = template;\n return newElement.firstElementChild;\n}\n\n/**\n * Функция для отрисовки элемента\n * @param {AbstractView} component Компонент, который должен был отрисован\n * @param {HTMLElement} container Элемент в котором будет отрисован компонент\n * @param {string} place Позиция компонента относительно контейнера. По умолчанию - `beforeend`\n */\nfunction render(component, container, place = RenderPosition.BEFOREEND) {\n if (!(component instanceof AbstractView)) {\n throw new Error(\'Can render only components\');\n }\n if (container === null) {\n throw new Error(\'Container element doesn\\\'t exist\');\n }\n container.insertAdjacentElement(place, component.element);\n}\n\n/**\n * Функция для замены одного компонента на другой\n * @param {AbstractView} newComponent Компонент, который нужно показать\n * @param {AbstractView} oldComponent Компонент, который нужно скрыть\n */\nfunction replace(newComponent, oldComponent) {\n if (!(newComponent instanceof AbstractView && oldComponent instanceof AbstractView)) {\n throw new Error(\'Can replace only components\');\n }\n const newElement = newComponent.element;\n const oldElement = oldComponent.element;\n const parent = oldElement.parentElement;\n if (parent === null) {\n throw new Error(\'Parent element doesn\\\'t exist\');\n }\n parent.replaceChild(newElement, oldElement);\n}\n\n/**\n * Функция для удаления компонента\n * @param {AbstractView} component Компонент, который нужно удалить\n */\nfunction remove(component) {\n if (component === null) {\n return;\n }\n if (!(component instanceof AbstractView)) {\n throw new Error(\'Can remove only components\');\n }\n component.element.remove();\n component.removeElement();\n}\n\n;// CONCATENATED MODULE: ./src/utils/common.js\nconst ESCAPE_KEY_CODE = 27;\nconst isEscapeKey = evt => evt.keyCode === ESCAPE_KEY_CODE;\nconst getRandomNumber = (from, to) => {\n const lower = Math.ceil(Math.min(from, to));\n const upper = Math.floor(Math.max(from, to));\n const result = Math.random() * (upper - lower + 1) + lower;\n return Math.floor(result);\n};\nconst getRandomString = (desiredStringLength = 1) => {\n const primer = \' ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\';\n let randomString = \'\';\n for (let i = 0; i < desiredStringLength; i++) {\n randomString += primer.charAt(getRandomNumber(0, primer.length - 1));\n }\n return randomString;\n};\nconst getRandomBoolean = () => Math.random() >= 0.5;\nconst getRandomArrayElement = items => items[getRandomNumber(0, items.length - 1)];\nconst getRandomDate = () => {\n const today = new Date();\n const oneYearFromNow = new Date();\n oneYearFromNow.setFullYear(today.getFullYear() + 1);\n const randomTime = Math.random() * (oneYearFromNow - today) + today.getTime();\n return new Date(randomTime);\n};\nconst convertToCamelCase = str => str.replace(/(_\\w)/g, match => match[1].toUpperCase());\nconst convertKeysToCamelCase = items => {\n if (Array.isArray(items)) {\n return items.map(convertKeysToCamelCase);\n }\n if (items !== null && typeof items === \'object\') {\n return Object.entries(items).reduce((newItems, [key, value]) => {\n newItems[convertToCamelCase(key)] = convertKeysToCamelCase(value);\n return newItems;\n }, {});\n }\n return items;\n};\nconst updateItem = (items, update) => items.map(item => item.id === update.id ? update : item);\n\n;// CONCATENATED MODULE: ./src/const.js\nconst EVENTS_TYPES = [\'Taxi\', \'Bus\', \'Train\', \'Ship\', \'Drive\', \'Flight\', \'Check-in\', \'Sightseeing\', \'Restaurant\'];\nconst CITIES = [\'New York\', \'Tokyo\', \'Paris\', \'London\', \'Sydney\', \'Berlin\', \'Rio de Janeiro\', \'Moscow\', \'Cairo\', \'Cape Town\'];\nconst SENTENCES = [\'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras aliquet varius magna, non porta ligula feugiat eget. \', \'Fusce tristique felis at fermentum pharetra. \', \'Aliquam id orci ut lectus varius viverra. \', \'Nullam nunc ex, convallis sed finibus eget, sollicitudin eget ante. \', \'Phasellus eros mauris, condimentum sed nibh vitae, sodales efficitur ipsum. \', \'Sed blandit, eros vel aliquam faucibus, purus ex euismod diam, eu luctus nunc ante ut dui. \', \'Sed sed nisi sed augue convallis suscipit in sed felis. \', \'Aliquam erat volutpat. \', \'Nunc fermentum tortor ac porta dapibus. \', \'In rutrum ac purus sit amet tempus.\'];\nconst FilterType = {\n EVERYTHING: \'everything\',\n FUTURE: \'future\',\n PRESENT: \'present\',\n PAST: \'past\'\n};\nconst SortType = {\n DEFAULT: \'default\',\n PRICE: \'price\',\n TIME: \'time\'\n};\n\n;// CONCATENATED MODULE: ./node_modules/nanoid/index.browser.js\n\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = \'\'\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || \'\'\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) =>\n crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {\n byte &= 63\n if (byte < 36) {\n id += byte.toString(36)\n } else if (byte < 62) {\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte > 62) {\n id += \'-\'\n } else {\n id += \'_\'\n }\n return id\n }, \'\')\n\n;// CONCATENATED MODULE: ./src/mock/events.js\n\n\n\nconst TIME_SKIP = 125;\nconst getRandomEvent = (date, destinationsList) => {\n const firstDate = new Date(date);\n const secondDate = new Date(firstDate);\n const destinationsIds = destinationsList.map(destination => destination.id);\n secondDate.setMinutes(firstDate.getMinutes() + TIME_SKIP);\n const randomEvent = {\n \'id\': nanoid(),\n \'base_price\': getRandomNumber(499, 4999),\n \'date_from\': firstDate.toISOString(),\n \'date_to\': secondDate.toISOString(),\n \'destination\': getRandomArrayElement(destinationsIds),\n \'is_favorite\': getRandomBoolean(),\n \'offers\': [\'04c3e4e6-9053-42ce-b747-e281314baa31\', \'14c3e4e6-9053-42ce-b747-e281314baa31\', \'24c3e4e6-9053-42ce-b747-e281314baa31\', \'34c3e4e6-9053-42ce-b747-e281314baa31\'],\n \'type\': getRandomArrayElement(EVENTS_TYPES)\n };\n return randomEvent;\n};\nconst getRandomEvents = (count, destinationsList) => {\n const date = getRandomDate();\n const events = [];\n for (let i = 0; i < count; i++) {\n events.push(getRandomEvent(date, destinationsList));\n date.setMinutes(date.getMinutes() + TIME_SKIP);\n }\n return events;\n};\n\n;// CONCATENATED MODULE: ./src/mock/offers.js\n\nconst OFFERS_COUNT = 4;\nconst getRandomOffer = id => {\n const offer = {\n \'id\': `${id}4c3e4e6-9053-42ce-b747-e281314baa31`,\n \'title\': `Upgrade ${id}`,\n \'price\': getRandomNumber(19, 499)\n };\n return offer;\n};\nconst getRandomOffers = type => {\n const randomOffers = [{\n \'type\': type,\n \'offers\': []\n }];\n for (let i = 0; i < OFFERS_COUNT; i++) {\n randomOffers[0].offers.push(getRandomOffer(i));\n }\n return randomOffers;\n};\n\n;// CONCATENATED MODULE: ./src/mock/destinations.js\n\n\nconst getRandomDescription = () => {\n let randomDescription = \'\';\n for (let i = 0; i < getRandomNumber(1, 5); i++) {\n randomDescription += getRandomArrayElement(SENTENCES);\n }\n return randomDescription;\n};\nconst getRandomDestination = id => {\n const destination = {\n \'id\': `${id}fa5cb75-a1fe-4b77-a83c-0e528e910e04`,\n \'description\': getRandomDescription(),\n \'name\': CITIES[id],\n \'pictures\': [{\n \'src\': `https://loremflickr.com/248/152?random=${getRandomNumber(1, 100)}`,\n \'description\': getRandomDescription()\n }]\n };\n return destination;\n};\nconst getRandomDestinations = () => {\n const destinations = [];\n for (let i = 0; i < CITIES.length; i++) {\n destinations.push(getRandomDestination(i));\n }\n return destinations;\n};\n\n;// CONCATENATED MODULE: ./src/model/events-connector.js\n\n\n\n\nconst EVENTS_COUNT = 5;\nconst createUserEvents = () => {\n const offersList = convertKeysToCamelCase(getRandomOffers());\n const destinationsList = convertKeysToCamelCase(getRandomDestinations());\n const eventsList = convertKeysToCamelCase(getRandomEvents(EVENTS_COUNT, destinationsList));\n const destinationsMap = new Map(destinationsList.map(destination => [destination.id, destination]));\n const offers = offersList[0].offers;\n const mergedEvents = eventsList.map(event => {\n const destinationData = destinationsMap.get(event.destination);\n const offersData = event.offers.map(offerId => offers.find(offer => offer.id === offerId)).filter(Boolean);\n return {\n ...event,\n destination: {\n id: destinationData.id,\n name: destinationData.name,\n description: destinationData.description,\n pictures: destinationData.pictures\n },\n offers: offersData\n };\n });\n return Array.from(new Map(mergedEvents.map(event => [event.id, event])).values());\n};\nclass EventsConnector {\n get userEvents() {\n return structuredClone(createUserEvents());\n }\n}\n;// CONCATENATED MODULE: ./src/model/events-model.js\n\nclass EventsModel {\n #EventsConnector = new EventsConnector();\n #eventsList = this.#EventsConnector.userEvents;\n get userEvents() {\n return this.#eventsList;\n }\n}\n;// CONCATENATED MODULE: ./src/view/new-trip-info-view.js\n\nfunction createNewTripInfoTemplate() {\n return ` 18 — 20 Mar \n Total: € 1230\n Amsterdam — Chamonix — Geneva
\n\n
\n \n —\n \n
\n${getTimeDifference(dateFrom, dateTo)}
\n\n € ${basePrice}\n
\nLoading...
\';\n}\nclass NoEventsView extends AbstractView {\n get template() {\n return createNoEventsViewTemplate();\n }\n}\n;// CONCATENATED MODULE: ./src/presenter/board-presenter.js\n\n\n\n\n\n\n\n\nclass BoardPresenter {\n #container = null;\n #eventsModel = null;\n #sortComponent = null;\n #eventsListComponent = new NewEventsListView();\n #eventsList = [];\n #eventPresenters = new Map();\n #currentSortType = SortType.DEFAULT;\n #sourcedBoardEvents = [];\n constructor({\n container,\n eventsModel\n }) {\n this.#container = container;\n this.#eventsModel = eventsModel;\n }\n init() {\n this.#eventsList = [...this.#eventsModel.userEvents];\n this.#sourcedBoardEvents = [...this.#eventsModel.userEvents];\n this.#renderBoard();\n this.#renderSort();\n }\n #renderEvent(inputUserEvent) {\n const eventPresenter = new EventPresenter({\n container: this.#eventsListComponent.element,\n onDataChange: this.#handleEventChange,\n onModeChange: this.#handleModeChange\n });\n eventPresenter.init(inputUserEvent);\n this.#eventPresenters.set(inputUserEvent.id, eventPresenter);\n }\n #renderNoEvents() {\n render(new NoEventsView(), this.#container);\n }\n #sortEvents(sortType) {\n switch (sortType) {\n case SortType.PRICE:\n this.#eventsList.sort(sortEventsPrice);\n break;\n case SortType.TIME:\n this.#eventsList.sort(sortEventsTime);\n break;\n default:\n this.#eventsList = [...this.#sourcedBoardEvents];\n }\n this.#currentSortType = sortType;\n }\n #handleSortTypeChange = sortType => {\n if (sortType === undefined || this.#currentSortType === sortType) {\n return;\n }\n this.#sortEvents(sortType);\n this.#clearEventList();\n this.#renderBoard();\n };\n #renderSort() {\n this.#sortComponent = new NewTripSortView({\n onSortTypeChange: this.#handleSortTypeChange\n });\n render(this.#sortComponent, this.#container, \'AFTERBEGIN\');\n }\n #renderBoard() {\n if (this.#eventsList.length === 0) {\n this.#renderNoEvents();\n return;\n }\n render(this.#eventsListComponent, this.#container);\n for (let i = 0; i < this.#eventsList.length; i++) {\n this.#renderEvent(this.#eventsList[i]);\n }\n }\n #handleEventChange = updatedEvent => {\n this.#eventsList = updateItem(this.#eventsList, updatedEvent);\n this.#sourcedBoardEvents = updateItem(this.#sourcedBoardEvents, updatedEvent);\n this.#eventPresenters.get(updatedEvent.id).init(updatedEvent);\n };\n #handleModeChange = () => {\n this.#eventPresenters.forEach(presenter => presenter.resetView());\n };\n #clearEventList() {\n this.#eventPresenters.forEach(presenter => presenter.destroy());\n this.#eventPresenters.clear();\n }\n}\n;// CONCATENATED MODULE: ./src/utils/filter.js\n\n\nconst filter = {\n [FilterType.EVERYTHING]: userEvents => userEvents,\n [FilterType.FUTURE]: userEvents => userEvents.filter(userEvent => isEventFuture(userEvent.dateFrom)),\n [FilterType.PRESENT]: userEvents => userEvents.filter(userEvent => isEventPresent(userEvent.dateFrom)),\n [FilterType.PAST]: userEvents => userEvents.filter(userEvent => isEventPast(userEvent.dateFrom))\n};\n\n;// CONCATENATED MODULE: ./src/mock/filter.js\n\nfunction generateFilter(userEvents) {\n return Object.entries(filter).map(([filterType, filterEvents]) => ({\n type: filterType,\n count: filterEvents(userEvents).length\n }));\n}\n\n;// CONCATENATED MODULE: ./src/main.js\n\n\n\n\n\n\nconst tripMainContainer = document.querySelector(\'.trip-main\');\nconst tripFiltersContainer = tripMainContainer.querySelector(\'.trip-controls__filters\');\nconst tripEventsContainer = document.querySelector(\'.trip-events\');\nconst eventsModel = new EventsModel();\nconst boardPresenter = new BoardPresenter({\n container: tripEventsContainer,\n eventsModel\n});\nconst filters = generateFilter(eventsModel.userEvents);\nrender(new NewTripInfoView(), tripMainContainer, \'AFTERBEGIN\');\nrender(new NewTripFiltersView({\n filters\n}), tripFiltersContainer);\nboardPresenter.init();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDekVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2JpZy10cmlwLy4vc3JjL2ZyYW1ld29yay92aWV3L2Fic3RyYWN0LXZpZXcuY3NzP2RmYTYiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvZnJhbWV3b3JrL3ZpZXcvYWJzdHJhY3Qtdmlldy5qcz80MDczIiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL2ZyYW1ld29yay9yZW5kZXIuanM/YjUxZSIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy91dGlscy9jb21tb24uanM/YzhjMyIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy9jb25zdC5qcz9kZmI2Iiwid2VicGFjazovL2JpZy10cmlwLy4vbm9kZV9tb2R1bGVzL25hbm9pZC9pbmRleC5icm93c2VyLmpzP2IzODEiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvbW9jay9ldmVudHMuanM/NjQ4ZCIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy9tb2NrL29mZmVycy5qcz84ZDI5Iiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL21vY2svZGVzdGluYXRpb25zLmpzP2Q4YmYiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvbW9kZWwvZXZlbnRzLWNvbm5lY3Rvci5qcz9hZGU4Iiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL21vZGVsL2V2ZW50cy1tb2RlbC5qcz9lMDk5Iiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL3ZpZXcvbmV3LXRyaXAtaW5mby12aWV3LmpzPzJmNTgiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvdmlldy9uZXctZmlsdGVycy12aWV3LmpzPzQzMzUiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvdmlldy9uZXctc29ydC1jb250YWluZXItdmlldy5qcz83ZTQ5Iiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL3ZpZXcvbmV3LWV2ZW50cy1saXN0LXZpZXcuanM/NjgwZCIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy91dGlscy9ldmVudC5qcz8yYTUxIiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL3ZpZXcvbmV3LWV2ZW50cy1pdGVtLXZpZXcuanM/NzRiYyIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy92aWV3L25ldy1ldmVudC1lZGl0LWVsZW1lbnQtdmlldy5qcz80NDUwIiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL3ByZXNlbnRlci9ldmVudC1wcmVzZW50ZXIuanM/YzVmNSIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy92aWV3L25vLWV2ZW50cy12aWV3LmpzPzI5ODciLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvcHJlc2VudGVyL2JvYXJkLXByZXNlbnRlci5qcz81YTYwIiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL3V0aWxzL2ZpbHRlci5qcz9lZmE2Iiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL21vY2svZmlsdGVyLmpzPzk0MmIiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvbWFpbi5qcz84MTM4Il0sInNvdXJjZXNDb250ZW50IjpbIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9hYnN0cmFjdC12aWV3LmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vYWJzdHJhY3Qtdmlldy5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBjcmVhdGVFbGVtZW50IH0gZnJvbSAnLi4vcmVuZGVyLmpzJztcbmltcG9ydCAnLi9hYnN0cmFjdC12aWV3LmNzcyc7XG5cbi8qKiBAY29uc3Qge3N0cmluZ30g0JrQu9Cw0YHRgSwg0YDQtdCw0LvQuNC30YPRjtGJ0LjQuSDRjdGE0YTQtdC60YIgXCLQv9C+0LrQsNGH0LjQstCw0L3QuNGPINCz0L7Qu9C+0LLQvtC5XCIgKi9cbmNvbnN0IFNIQUtFX0NMQVNTX05BTUUgPSAnc2hha2UnO1xuXG4vKiogQGNvbnN0IHtudW1iZXJ9INCS0YDQtdC80Y8g0LDQvdC40LzQsNGG0LjQuCDQsiDQvNC40LvQu9C40YHQtdC60YPQvdC00LDRhSAqL1xuY29uc3QgU0hBS0VfQU5JTUFUSU9OX1RJTUVPVVQgPSA2MDA7XG5cbi8qKlxuICog0JDQsdGB0YLRgNCw0LrRgtC90YvQuSDQutC70LDRgdGBINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFic3RyYWN0VmlldyB7XG4gIC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR8bnVsbH0g0K3Qu9C10LzQtdC90YIg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8gKi9cbiAgI2VsZW1lbnQgPSBudWxsO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAobmV3LnRhcmdldCA9PT0gQWJzdHJhY3RWaWV3KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgaW5zdGFudGlhdGUgQWJzdHJhY3RWaWV3LCBvbmx5IGNvbmNyZXRlIG9uZS4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog0JPQtdGC0YLQtdGAINC00LvRjyDQv9C+0LvRg9GH0LXQvdC40Y8g0Y3Qu9C10LzQtdC90YLQsFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9INCt0LvQtdC80LXQvdGCINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPXG4gICAqL1xuICBnZXQgZWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMuI2VsZW1lbnQpIHtcbiAgICAgIHRoaXMuI2VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KHRoaXMudGVtcGxhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jZWxlbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiDQk9C10YLRgtC10YAg0LTQu9GPINC/0L7Qu9GD0YfQtdC90LjRjyDRgNCw0LfQvNC10YLQutC4INGN0LvQtdC80LXQvdGC0LBcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9INCg0LDQt9C80LXRgtC60LAg0Y3Qu9C10LzQtdC90YLQsCDQsiDQstC40LTQtSDRgdGC0YDQvtC60LhcbiAgICovXG4gIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fic3RyYWN0IG1ldGhvZCBub3QgaW1wbGVtZW50ZWQ6IGdldCB0ZW1wbGF0ZScpO1xuICB9XG5cbiAgLyoqINCc0LXRgtC+0LQg0LTQu9GPINGD0LTQsNC70LXQvdC40Y8g0Y3Qu9C10LzQtdC90YLQsCAqL1xuICByZW1vdmVFbGVtZW50KCkge1xuICAgIHRoaXMuI2VsZW1lbnQgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqINCc0LXRgtC+0LQsINGA0LXQsNC70LjQt9GD0Y7RidC40Lkg0Y3RhNGE0LXQutGCIFwi0L/QvtC60LDRh9C40LLQsNC90LjRjyDQs9C+0LvQvtCy0L7QuVwiXG4gICAqIEBwYXJhbSB7c2hha2VDYWxsYmFja30gW2NhbGxiYWNrXSDQpNGD0L3QutGG0LjRjywg0LrQvtGC0L7RgNCw0Y8g0LHRg9C00LXRgiDQstGL0LfQstCw0L3QsCDQv9C+0YHQu9C1INC30LDQstC10YDRiNC10L3QuNGPINCw0L3QuNC80LDRhtC40LhcbiAgICovXG4gIHNoYWtlKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoU0hBS0VfQ0xBU1NfTkFNRSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShTSEFLRV9DTEFTU19OQU1FKTtcbiAgICAgIGNhbGxiYWNrPy4oKTtcbiAgICB9LCBTSEFLRV9BTklNQVRJT05fVElNRU9VVCk7XG4gIH1cbn1cblxuLyoqXG4gKiDQpNGD0L3QutGG0LjRjywg0LrQvtGC0L7RgNCw0Y8g0LHRg9C00LXRgiDQstGL0LfQstCw0L3QsCDQvNC10YLQvtC00L7QvCBzaGFrZSDQv9C+0YHQu9C1INC30LDQstC10YDRiNC10L3QuNGPINCw0L3QuNC80LDRhtC40LhcbiAqIEBjYWxsYmFjayBzaGFrZUNhbGxiYWNrXG4gKi8iLCJpbXBvcnQgQWJzdHJhY3RWaWV3IGZyb20gJy4vdmlldy9hYnN0cmFjdC12aWV3LmpzJztcblxuLyoqIEBlbnVtIHtzdHJpbmd9XG4gKiBCRUZPUkVCRUdJTiAtINCy0YHRgtCw0LLQuNGC0Ywg0Y3Qu9C10LzQtdC90YIg0L/QtdGA0LXQtCDQvdCw0YfQsNC70L7QvCDQutC+0L3RgtC10LnQvdC10YDQsFxuICogQUZURVJCRUdJTiAtINCy0YHRgtCw0LLQuNGC0Ywg0Y3Qu9C10LzQtdC90YIg0YHRgNCw0LfRgyDQv9C+0YHQu9C1INC90LDRh9Cw0LvQsCDQutC+0L3RgtC10LnQvdC10YDQsFxuICogQkVGT1JFRU5EIC0g0LLRgdGC0LDQstC40YLRjCDRjdC70LXQvNC10L3RgiDQv9C10YDQtdC0INC60L7QvdGG0L7QvCDQutC+0L3RgtC10LnQvdC10YDQsFxuICogQUZURVJFTkQgLSDQstGB0YLQsNCy0LjRgtGMINGN0LvQtdC80LXQvdGCINGB0YDQsNC30YMg0L/QvtGB0LvQtSDQutC+0L3RhtCwINC60L7QvdGC0LXQudC90LXRgNCwXG4qL1xuY29uc3QgUmVuZGVyUG9zaXRpb24gPSB7XG4gIEJFRk9SRUJFR0lOOiAnYmVmb3JlYmVnaW4nLFxuICBBRlRFUkJFR0lOOiAnYWZ0ZXJiZWdpbicsXG4gIEJFRk9SRUVORDogJ2JlZm9yZWVuZCcsXG4gIEFGVEVSRU5EOiAnYWZ0ZXJlbmQnXG59O1xuXG4vKipcbiAqINCk0YPQvdC60YbQuNGPINC00LvRjyDRgdC+0LfQtNCw0L3QuNGPINGN0LvQtdC80LXQvdGC0LAg0L3QsCDQvtGB0L3QvtCy0LUg0YDQsNC30LzQtdGC0LrQuFxuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlINCg0LDQt9C80LXRgtC60LAg0LIg0LLQuNC00LUg0YHRgtGA0L7QutC4XG4gKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9INCh0L7Qt9C00LDQvdC90YvQuSDRjdC70LXQvNC10L3RglxuICovXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRlbXBsYXRlKSB7XG4gIGNvbnN0IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSB0ZW1wbGF0ZTtcbiAgcmV0dXJuIG5ld0VsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG59XG5cbi8qKlxuICog0KTRg9C90LrRhtC40Y8g0LTQu9GPINC+0YLRgNC40YHQvtCy0LrQuCDRjdC70LXQvNC10L3RgtCwXG4gKiBAcGFyYW0ge0Fic3RyYWN0Vmlld30gY29tcG9uZW50INCa0L7QvNC/0L7QvdC10L3Rgiwg0LrQvtGC0L7RgNGL0Lkg0LTQvtC70LbQtdC9INCx0YvQuyDQvtGC0YDQuNGB0L7QstCw0L1cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciDQrdC70LXQvNC10L3RgiDQsiDQutC+0YLQvtGA0L7QvCDQsdGD0LTQtdGCINC+0YLRgNC40YHQvtCy0LDQvSDQutC+0LzQv9C+0L3QtdC90YJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbGFjZSDQn9C+0LfQuNGG0LjRjyDQutC+0LzQv9C+0L3QtdC90YLQsCDQvtGC0L3QvtGB0LjRgtC10LvRjNC90L4g0LrQvtC90YLQtdC50L3QtdGA0LAuINCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIC0gYGJlZm9yZWVuZGBcbiAqL1xuZnVuY3Rpb24gcmVuZGVyKGNvbXBvbmVudCwgY29udGFpbmVyLCBwbGFjZSA9IFJlbmRlclBvc2l0aW9uLkJFRk9SRUVORCkge1xuICBpZiAoIShjb21wb25lbnQgaW5zdGFuY2VvZiBBYnN0cmFjdFZpZXcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gcmVuZGVyIG9ubHkgY29tcG9uZW50cycpO1xuICB9XG4gIGlmIChjb250YWluZXIgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRhaW5lciBlbGVtZW50IGRvZXNuXFwndCBleGlzdCcpO1xuICB9XG4gIGNvbnRhaW5lci5pbnNlcnRBZGphY2VudEVsZW1lbnQocGxhY2UsIGNvbXBvbmVudC5lbGVtZW50KTtcbn1cblxuLyoqXG4gKiDQpNGD0L3QutGG0LjRjyDQtNC70Y8g0LfQsNC80LXQvdGLINC+0LTQvdC+0LPQviDQutC+0LzQv9C+0L3QtdC90YLQsCDQvdCwINC00YDRg9Cz0L7QuVxuICogQHBhcmFtIHtBYnN0cmFjdFZpZXd9IG5ld0NvbXBvbmVudCDQmtC+0LzQv9C+0L3QtdC90YIsINC60L7RgtC+0YDRi9C5INC90YPQttC90L4g0L/QvtC60LDQt9Cw0YLRjFxuICogQHBhcmFtIHtBYnN0cmFjdFZpZXd9IG9sZENvbXBvbmVudCDQmtC+0LzQv9C+0L3QtdC90YIsINC60L7RgtC+0YDRi9C5INC90YPQttC90L4g0YHQutGA0YvRgtGMXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2UobmV3Q29tcG9uZW50LCBvbGRDb21wb25lbnQpIHtcbiAgaWYgKCEobmV3Q29tcG9uZW50IGluc3RhbmNlb2YgQWJzdHJhY3RWaWV3ICYmIG9sZENvbXBvbmVudCBpbnN0YW5jZW9mIEFic3RyYWN0VmlldykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiByZXBsYWNlIG9ubHkgY29tcG9uZW50cycpO1xuICB9XG4gIGNvbnN0IG5ld0VsZW1lbnQgPSBuZXdDb21wb25lbnQuZWxlbWVudDtcbiAgY29uc3Qgb2xkRWxlbWVudCA9IG9sZENvbXBvbmVudC5lbGVtZW50O1xuICBjb25zdCBwYXJlbnQgPSBvbGRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBlbGVtZW50IGRvZXNuXFwndCBleGlzdCcpO1xuICB9XG4gIHBhcmVudC5yZXBsYWNlQ2hpbGQobmV3RWxlbWVudCwgb2xkRWxlbWVudCk7XG59XG5cbi8qKlxuICog0KTRg9C90LrRhtC40Y8g0LTQu9GPINGD0LTQsNC70LXQvdC40Y8g0LrQvtC80L/QvtC90LXQvdGC0LBcbiAqIEBwYXJhbSB7QWJzdHJhY3RWaWV3fSBjb21wb25lbnQg0JrQvtC80L/QvtC90LXQvdGCLCDQutC+0YLQvtGA0YvQuSDQvdGD0LbQvdC+INGD0LTQsNC70LjRgtGMXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZShjb21wb25lbnQpIHtcbiAgaWYgKGNvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIShjb21wb25lbnQgaW5zdGFuY2VvZiBBYnN0cmFjdFZpZXcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gcmVtb3ZlIG9ubHkgY29tcG9uZW50cycpO1xuICB9XG4gIGNvbXBvbmVudC5lbGVtZW50LnJlbW92ZSgpO1xuICBjb21wb25lbnQucmVtb3ZlRWxlbWVudCgpO1xufVxuZXhwb3J0IHsgUmVuZGVyUG9zaXRpb24sIGNyZWF0ZUVsZW1lbnQsIHJlbmRlciwgcmVwbGFjZSwgcmVtb3ZlIH07IiwiY29uc3QgRVNDQVBFX0tFWV9DT0RFID0gMjc7XG5jb25zdCBpc0VzY2FwZUtleSA9IGV2dCA9PiBldnQua2V5Q29kZSA9PT0gRVNDQVBFX0tFWV9DT0RFO1xuY29uc3QgZ2V0UmFuZG9tTnVtYmVyID0gKGZyb20sIHRvKSA9PiB7XG4gIGNvbnN0IGxvd2VyID0gTWF0aC5jZWlsKE1hdGgubWluKGZyb20sIHRvKSk7XG4gIGNvbnN0IHVwcGVyID0gTWF0aC5mbG9vcihNYXRoLm1heChmcm9tLCB0bykpO1xuICBjb25zdCByZXN1bHQgPSBNYXRoLnJhbmRvbSgpICogKHVwcGVyIC0gbG93ZXIgKyAxKSArIGxvd2VyO1xuICByZXR1cm4gTWF0aC5mbG9vcihyZXN1bHQpO1xufTtcbmNvbnN0IGdldFJhbmRvbVN0cmluZyA9IChkZXNpcmVkU3RyaW5nTGVuZ3RoID0gMSkgPT4ge1xuICBjb25zdCBwcmltZXIgPSAnIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcbiAgbGV0IHJhbmRvbVN0cmluZyA9ICcnO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlc2lyZWRTdHJpbmdMZW5ndGg7IGkrKykge1xuICAgIHJhbmRvbVN0cmluZyArPSBwcmltZXIuY2hhckF0KGdldFJhbmRvbU51bWJlcigwLCBwcmltZXIubGVuZ3RoIC0gMSkpO1xuICB9XG4gIHJldHVybiByYW5kb21TdHJpbmc7XG59O1xuY29uc3QgZ2V0UmFuZG9tQm9vbGVhbiA9ICgpID0+IE1hdGgucmFuZG9tKCkgPj0gMC41O1xuY29uc3QgZ2V0UmFuZG9tQXJyYXlFbGVtZW50ID0gaXRlbXMgPT4gaXRlbXNbZ2V0UmFuZG9tTnVtYmVyKDAsIGl0ZW1zLmxlbmd0aCAtIDEpXTtcbmNvbnN0IGdldFJhbmRvbURhdGUgPSAoKSA9PiB7XG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgY29uc3Qgb25lWWVhckZyb21Ob3cgPSBuZXcgRGF0ZSgpO1xuICBvbmVZZWFyRnJvbU5vdy5zZXRGdWxsWWVhcih0b2RheS5nZXRGdWxsWWVhcigpICsgMSk7XG4gIGNvbnN0IHJhbmRvbVRpbWUgPSBNYXRoLnJhbmRvbSgpICogKG9uZVllYXJGcm9tTm93IC0gdG9kYXkpICsgdG9kYXkuZ2V0VGltZSgpO1xuICByZXR1cm4gbmV3IERhdGUocmFuZG9tVGltZSk7XG59O1xuY29uc3QgY29udmVydFRvQ2FtZWxDYXNlID0gc3RyID0+IHN0ci5yZXBsYWNlKC8oX1xcdykvZywgbWF0Y2ggPT4gbWF0Y2hbMV0udG9VcHBlckNhc2UoKSk7XG5jb25zdCBjb252ZXJ0S2V5c1RvQ2FtZWxDYXNlID0gaXRlbXMgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKGNvbnZlcnRLZXlzVG9DYW1lbENhc2UpO1xuICB9XG4gIGlmIChpdGVtcyAhPT0gbnVsbCAmJiB0eXBlb2YgaXRlbXMgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGl0ZW1zKS5yZWR1Y2UoKG5ld0l0ZW1zLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIG5ld0l0ZW1zW2NvbnZlcnRUb0NhbWVsQ2FzZShrZXkpXSA9IGNvbnZlcnRLZXlzVG9DYW1lbENhc2UodmFsdWUpO1xuICAgICAgcmV0dXJuIG5ld0l0ZW1zO1xuICAgIH0sIHt9KTtcbiAgfVxuICByZXR1cm4gaXRlbXM7XG59O1xuY29uc3QgdXBkYXRlSXRlbSA9IChpdGVtcywgdXBkYXRlKSA9PiBpdGVtcy5tYXAoaXRlbSA9PiBpdGVtLmlkID09PSB1cGRhdGUuaWQgPyB1cGRhdGUgOiBpdGVtKTtcbmV4cG9ydCB7IHVwZGF0ZUl0ZW0sIGdldFJhbmRvbU51bWJlciwgZ2V0UmFuZG9tU3RyaW5nLCBnZXRSYW5kb21Cb29sZWFuLCBnZXRSYW5kb21EYXRlLCBnZXRSYW5kb21BcnJheUVsZW1lbnQsIGNvbnZlcnRLZXlzVG9DYW1lbENhc2UsIGlzRXNjYXBlS2V5IH07IiwiY29uc3QgRVZFTlRTX1RZUEVTID0gWydUYXhpJywgJ0J1cycsICdUcmFpbicsICdTaGlwJywgJ0RyaXZlJywgJ0ZsaWdodCcsICdDaGVjay1pbicsICdTaWdodHNlZWluZycsICdSZXN0YXVyYW50J107XG5jb25zdCBDSVRJRVMgPSBbJ05ldyBZb3JrJywgJ1Rva3lvJywgJ1BhcmlzJywgJ0xvbmRvbicsICdTeWRuZXknLCAnQmVybGluJywgJ1JpbyBkZSBKYW5laXJvJywgJ01vc2NvdycsICdDYWlybycsICdDYXBlIFRvd24nXTtcbmNvbnN0IFNFTlRFTkNFUyA9IFsnTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBhbGlxdWV0IHZhcml1cyBtYWduYSwgbm9uIHBvcnRhIGxpZ3VsYSBmZXVnaWF0IGVnZXQuICcsICdGdXNjZSB0cmlzdGlxdWUgZmVsaXMgYXQgZmVybWVudHVtIHBoYXJldHJhLiAnLCAnQWxpcXVhbSBpZCBvcmNpIHV0IGxlY3R1cyB2YXJpdXMgdml2ZXJyYS4gJywgJ051bGxhbSBudW5jIGV4LCBjb252YWxsaXMgc2VkIGZpbmlidXMgZWdldCwgc29sbGljaXR1ZGluIGVnZXQgYW50ZS4gJywgJ1BoYXNlbGx1cyBlcm9zIG1hdXJpcywgY29uZGltZW50dW0gc2VkIG5pYmggdml0YWUsIHNvZGFsZXMgZWZmaWNpdHVyIGlwc3VtLiAnLCAnU2VkIGJsYW5kaXQsIGVyb3MgdmVsIGFsaXF1YW0gZmF1Y2lidXMsIHB1cnVzIGV4IGV1aXNtb2QgZGlhbSwgZXUgbHVjdHVzIG51bmMgYW50ZSB1dCBkdWkuICcsICdTZWQgc2VkIG5pc2kgc2VkIGF1Z3VlIGNvbnZhbGxpcyBzdXNjaXBpdCBpbiBzZWQgZmVsaXMuICcsICdBbGlxdWFtIGVyYXQgdm9sdXRwYXQuICcsICdOdW5jIGZlcm1lbnR1bSB0b3J0b3IgYWMgcG9ydGEgZGFwaWJ1cy4gJywgJ0luIHJ1dHJ1bSBhYyBwdXJ1cyBzaXQgYW1ldCB0ZW1wdXMuJ107XG5jb25zdCBGaWx0ZXJUeXBlID0ge1xuICBFVkVSWVRISU5HOiAnZXZlcnl0aGluZycsXG4gIEZVVFVSRTogJ2Z1dHVyZScsXG4gIFBSRVNFTlQ6ICdwcmVzZW50JyxcbiAgUEFTVDogJ3Bhc3QnXG59O1xuY29uc3QgU29ydFR5cGUgPSB7XG4gIERFRkFVTFQ6ICdkZWZhdWx0JyxcbiAgUFJJQ0U6ICdwcmljZScsXG4gIFRJTUU6ICd0aW1lJ1xufTtcbmV4cG9ydCB7IEVWRU5UU19UWVBFUywgQ0lUSUVTLCBTRU5URU5DRVMsIEZpbHRlclR5cGUsIFNvcnRUeXBlIH07IiwiZXhwb3J0IHsgdXJsQWxwaGFiZXQgfSBmcm9tICcuL3VybC1hbHBoYWJldC9pbmRleC5qcydcbmV4cG9ydCBsZXQgcmFuZG9tID0gYnl0ZXMgPT4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShieXRlcykpXG5leHBvcnQgbGV0IGN1c3RvbVJhbmRvbSA9IChhbHBoYWJldCwgZGVmYXVsdFNpemUsIGdldFJhbmRvbSkgPT4ge1xuICBsZXQgbWFzayA9ICgyIDw8IChNYXRoLmxvZyhhbHBoYWJldC5sZW5ndGggLSAxKSAvIE1hdGguTE4yKSkgLSAxXG4gIGxldCBzdGVwID0gLX4oKDEuNiAqIG1hc2sgKiBkZWZhdWx0U2l6ZSkgLyBhbHBoYWJldC5sZW5ndGgpXG4gIHJldHVybiAoc2l6ZSA9IGRlZmF1bHRTaXplKSA9PiB7XG4gICAgbGV0IGlkID0gJydcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgbGV0IGJ5dGVzID0gZ2V0UmFuZG9tKHN0ZXApXG4gICAgICBsZXQgaiA9IHN0ZXBcbiAgICAgIHdoaWxlIChqLS0pIHtcbiAgICAgICAgaWQgKz0gYWxwaGFiZXRbYnl0ZXNbal0gJiBtYXNrXSB8fCAnJ1xuICAgICAgICBpZiAoaWQubGVuZ3RoID09PSBzaXplKSByZXR1cm4gaWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmV4cG9ydCBsZXQgY3VzdG9tQWxwaGFiZXQgPSAoYWxwaGFiZXQsIHNpemUgPSAyMSkgPT5cbiAgY3VzdG9tUmFuZG9tKGFscGhhYmV0LCBzaXplLCByYW5kb20pXG5leHBvcnQgbGV0IG5hbm9pZCA9IChzaXplID0gMjEpID0+XG4gIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoc2l6ZSkpLnJlZHVjZSgoaWQsIGJ5dGUpID0+IHtcbiAgICBieXRlICY9IDYzXG4gICAgaWYgKGJ5dGUgPCAzNikge1xuICAgICAgaWQgKz0gYnl0ZS50b1N0cmluZygzNilcbiAgICB9IGVsc2UgaWYgKGJ5dGUgPCA2Mikge1xuICAgICAgaWQgKz0gKGJ5dGUgLSAyNikudG9TdHJpbmcoMzYpLnRvVXBwZXJDYXNlKClcbiAgICB9IGVsc2UgaWYgKGJ5dGUgPiA2Mikge1xuICAgICAgaWQgKz0gJy0nXG4gICAgfSBlbHNlIHtcbiAgICAgIGlkICs9ICdfJ1xuICAgIH1cbiAgICByZXR1cm4gaWRcbiAgfSwgJycpXG4iLCJpbXBvcnQgeyBnZXRSYW5kb21BcnJheUVsZW1lbnQsIGdldFJhbmRvbU51bWJlciwgZ2V0UmFuZG9tQm9vbGVhbiwgZ2V0UmFuZG9tRGF0ZSB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbic7XG5pbXBvcnQgeyBFVkVOVFNfVFlQRVMgfSBmcm9tICcuLi9jb25zdCc7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnO1xuY29uc3QgVElNRV9TS0lQID0gMTI1O1xuY29uc3QgZ2V0UmFuZG9tRXZlbnQgPSAoZGF0ZSwgZGVzdGluYXRpb25zTGlzdCkgPT4ge1xuICBjb25zdCBmaXJzdERhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgY29uc3Qgc2Vjb25kRGF0ZSA9IG5ldyBEYXRlKGZpcnN0RGF0ZSk7XG4gIGNvbnN0IGRlc3RpbmF0aW9uc0lkcyA9IGRlc3RpbmF0aW9uc0xpc3QubWFwKGRlc3RpbmF0aW9uID0+IGRlc3RpbmF0aW9uLmlkKTtcbiAgc2Vjb25kRGF0ZS5zZXRNaW51dGVzKGZpcnN0RGF0ZS5nZXRNaW51dGVzKCkgKyBUSU1FX1NLSVApO1xuICBjb25zdCByYW5kb21FdmVudCA9IHtcbiAgICAnaWQnOiBuYW5vaWQoKSxcbiAgICAnYmFzZV9wcmljZSc6IGdldFJhbmRvbU51bWJlcig0OTksIDQ5OTkpLFxuICAgICdkYXRlX2Zyb20nOiBmaXJzdERhdGUudG9JU09TdHJpbmcoKSxcbiAgICAnZGF0ZV90byc6IHNlY29uZERhdGUudG9JU09TdHJpbmcoKSxcbiAgICAnZGVzdGluYXRpb24nOiBnZXRSYW5kb21BcnJheUVsZW1lbnQoZGVzdGluYXRpb25zSWRzKSxcbiAgICAnaXNfZmF2b3JpdGUnOiBnZXRSYW5kb21Cb29sZWFuKCksXG4gICAgJ29mZmVycyc6IFsnMDRjM2U0ZTYtOTA1My00MmNlLWI3NDctZTI4MTMxNGJhYTMxJywgJzE0YzNlNGU2LTkwNTMtNDJjZS1iNzQ3LWUyODEzMTRiYWEzMScsICcyNGMzZTRlNi05MDUzLTQyY2UtYjc0Ny1lMjgxMzE0YmFhMzEnLCAnMzRjM2U0ZTYtOTA1My00MmNlLWI3NDctZTI4MTMxNGJhYTMxJ10sXG4gICAgJ3R5cGUnOiBnZXRSYW5kb21BcnJheUVsZW1lbnQoRVZFTlRTX1RZUEVTKVxuICB9O1xuICByZXR1cm4gcmFuZG9tRXZlbnQ7XG59O1xuY29uc3QgZ2V0UmFuZG9tRXZlbnRzID0gKGNvdW50LCBkZXN0aW5hdGlvbnNMaXN0KSA9PiB7XG4gIGNvbnN0IGRhdGUgPSBnZXRSYW5kb21EYXRlKCk7XG4gIGNvbnN0IGV2ZW50cyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBldmVudHMucHVzaChnZXRSYW5kb21FdmVudChkYXRlLCBkZXN0aW5hdGlvbnNMaXN0KSk7XG4gICAgZGF0ZS5zZXRNaW51dGVzKGRhdGUuZ2V0TWludXRlcygpICsgVElNRV9TS0lQKTtcbiAgfVxuICByZXR1cm4gZXZlbnRzO1xufTtcbmV4cG9ydCB7IGdldFJhbmRvbUV2ZW50cyB9OyIsImltcG9ydCB7IGdldFJhbmRvbU51bWJlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbic7XG5jb25zdCBPRkZFUlNfQ09VTlQgPSA0O1xuY29uc3QgZ2V0UmFuZG9tT2ZmZXIgPSBpZCA9PiB7XG4gIGNvbnN0IG9mZmVyID0ge1xuICAgICdpZCc6IGAke2lkfTRjM2U0ZTYtOTA1My00MmNlLWI3NDctZTI4MTMxNGJhYTMxYCxcbiAgICAndGl0bGUnOiBgVXBncmFkZSAke2lkfWAsXG4gICAgJ3ByaWNlJzogZ2V0UmFuZG9tTnVtYmVyKDE5LCA0OTkpXG4gIH07XG4gIHJldHVybiBvZmZlcjtcbn07XG5jb25zdCBnZXRSYW5kb21PZmZlcnMgPSB0eXBlID0+IHtcbiAgY29uc3QgcmFuZG9tT2ZmZXJzID0gW3tcbiAgICAndHlwZSc6IHR5cGUsXG4gICAgJ29mZmVycyc6IFtdXG4gIH1dO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IE9GRkVSU19DT1VOVDsgaSsrKSB7XG4gICAgcmFuZG9tT2ZmZXJzWzBdLm9mZmVycy5wdXNoKGdldFJhbmRvbU9mZmVyKGkpKTtcbiAgfVxuICByZXR1cm4gcmFuZG9tT2ZmZXJzO1xufTtcbmV4cG9ydCB7IGdldFJhbmRvbU9mZmVycyB9OyIsImltcG9ydCB7IGdldFJhbmRvbUFycmF5RWxlbWVudCwgZ2V0UmFuZG9tTnVtYmVyIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJztcbmltcG9ydCB7IFNFTlRFTkNFUywgQ0lUSUVTIH0gZnJvbSAnLi4vY29uc3QnO1xuY29uc3QgZ2V0UmFuZG9tRGVzY3JpcHRpb24gPSAoKSA9PiB7XG4gIGxldCByYW5kb21EZXNjcmlwdGlvbiA9ICcnO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGdldFJhbmRvbU51bWJlcigxLCA1KTsgaSsrKSB7XG4gICAgcmFuZG9tRGVzY3JpcHRpb24gKz0gZ2V0UmFuZG9tQXJyYXlFbGVtZW50KFNFTlRFTkNFUyk7XG4gIH1cbiAgcmV0dXJuIHJhbmRvbURlc2NyaXB0aW9uO1xufTtcbmNvbnN0IGdldFJhbmRvbURlc3RpbmF0aW9uID0gaWQgPT4ge1xuICBjb25zdCBkZXN0aW5hdGlvbiA9IHtcbiAgICAnaWQnOiBgJHtpZH1mYTVjYjc1LWExZmUtNGI3Ny1hODNjLTBlNTI4ZTkxMGUwNGAsXG4gICAgJ2Rlc2NyaXB0aW9uJzogZ2V0UmFuZG9tRGVzY3JpcHRpb24oKSxcbiAgICAnbmFtZSc6IENJVElFU1tpZF0sXG4gICAgJ3BpY3R1cmVzJzogW3tcbiAgICAgICdzcmMnOiBgaHR0cHM6Ly9sb3JlbWZsaWNrci5jb20vMjQ4LzE1Mj9yYW5kb209JHtnZXRSYW5kb21OdW1iZXIoMSwgMTAwKX1gLFxuICAgICAgJ2Rlc2NyaXB0aW9uJzogZ2V0UmFuZG9tRGVzY3JpcHRpb24oKVxuICAgIH1dXG4gIH07XG4gIHJldHVybiBkZXN0aW5hdGlvbjtcbn07XG5jb25zdCBnZXRSYW5kb21EZXN0aW5hdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IGRlc3RpbmF0aW9ucyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IENJVElFUy5sZW5ndGg7IGkrKykge1xuICAgIGRlc3RpbmF0aW9ucy5wdXNoKGdldFJhbmRvbURlc3RpbmF0aW9uKGkpKTtcbiAgfVxuICByZXR1cm4gZGVzdGluYXRpb25zO1xufTtcbmV4cG9ydCB7IGdldFJhbmRvbURlc3RpbmF0aW9ucyB9OyIsImltcG9ydCB7IGdldFJhbmRvbUV2ZW50cyB9IGZyb20gJy4uL21vY2svZXZlbnRzJztcbmltcG9ydCB7IGdldFJhbmRvbU9mZmVycyB9IGZyb20gJy4uL21vY2svb2ZmZXJzJztcbmltcG9ydCB7IGdldFJhbmRvbURlc3RpbmF0aW9ucyB9IGZyb20gJy4uL21vY2svZGVzdGluYXRpb25zJztcbmltcG9ydCB7IGNvbnZlcnRLZXlzVG9DYW1lbENhc2UgfSBmcm9tICcuLi91dGlscy9jb21tb24nO1xuY29uc3QgRVZFTlRTX0NPVU5UID0gNTtcbmNvbnN0IGNyZWF0ZVVzZXJFdmVudHMgPSAoKSA9PiB7XG4gIGNvbnN0IG9mZmVyc0xpc3QgPSBjb252ZXJ0S2V5c1RvQ2FtZWxDYXNlKGdldFJhbmRvbU9mZmVycygpKTtcbiAgY29uc3QgZGVzdGluYXRpb25zTGlzdCA9IGNvbnZlcnRLZXlzVG9DYW1lbENhc2UoZ2V0UmFuZG9tRGVzdGluYXRpb25zKCkpO1xuICBjb25zdCBldmVudHNMaXN0ID0gY29udmVydEtleXNUb0NhbWVsQ2FzZShnZXRSYW5kb21FdmVudHMoRVZFTlRTX0NPVU5ULCBkZXN0aW5hdGlvbnNMaXN0KSk7XG4gIGNvbnN0IGRlc3RpbmF0aW9uc01hcCA9IG5ldyBNYXAoZGVzdGluYXRpb25zTGlzdC5tYXAoZGVzdGluYXRpb24gPT4gW2Rlc3RpbmF0aW9uLmlkLCBkZXN0aW5hdGlvbl0pKTtcbiAgY29uc3Qgb2ZmZXJzID0gb2ZmZXJzTGlzdFswXS5vZmZlcnM7XG4gIGNvbnN0IG1lcmdlZEV2ZW50cyA9IGV2ZW50c0xpc3QubWFwKGV2ZW50ID0+IHtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkRhdGEgPSBkZXN0aW5hdGlvbnNNYXAuZ2V0KGV2ZW50LmRlc3RpbmF0aW9uKTtcbiAgICBjb25zdCBvZmZlcnNEYXRhID0gZXZlbnQub2ZmZXJzLm1hcChvZmZlcklkID0+IG9mZmVycy5maW5kKG9mZmVyID0+IG9mZmVyLmlkID09PSBvZmZlcklkKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIGRlc3RpbmF0aW9uOiB7XG4gICAgICAgIGlkOiBkZXN0aW5hdGlvbkRhdGEuaWQsXG4gICAgICAgIG5hbWU6IGRlc3RpbmF0aW9uRGF0YS5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogZGVzdGluYXRpb25EYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgICBwaWN0dXJlczogZGVzdGluYXRpb25EYXRhLnBpY3R1cmVzXG4gICAgICB9LFxuICAgICAgb2ZmZXJzOiBvZmZlcnNEYXRhXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBBcnJheS5mcm9tKG5ldyBNYXAobWVyZ2VkRXZlbnRzLm1hcChldmVudCA9PiBbZXZlbnQuaWQsIGV2ZW50XSkpLnZhbHVlcygpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudHNDb25uZWN0b3Ige1xuICBnZXQgdXNlckV2ZW50cygpIHtcbiAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKGNyZWF0ZVVzZXJFdmVudHMoKSk7XG4gIH1cbn0iLCJpbXBvcnQgRXZlbnRzQ29ubmVjdG9yIGZyb20gJy4vZXZlbnRzLWNvbm5lY3Rvcic7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudHNNb2RlbCB7XG4gICNFdmVudHNDb25uZWN0b3IgPSBuZXcgRXZlbnRzQ29ubmVjdG9yKCk7XG4gICNldmVudHNMaXN0ID0gdGhpcy4jRXZlbnRzQ29ubmVjdG9yLnVzZXJFdmVudHM7XG4gIGdldCB1c2VyRXZlbnRzKCkge1xuICAgIHJldHVybiB0aGlzLiNldmVudHNMaXN0O1xuICB9XG59IiwiaW1wb3J0IEFic3RyYWN0VmlldyBmcm9tICcuLi9mcmFtZXdvcmsvdmlldy9hYnN0cmFjdC12aWV3JztcbmZ1bmN0aW9uIGNyZWF0ZU5ld1RyaXBJbmZvVGVtcGxhdGUoKSB7XG4gIHJldHVybiBgPHNlY3Rpb24gY2xhc3M9XCJ0cmlwLW1haW5fX3RyaXAtaW5mbyAgdHJpcC1pbmZvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJpcC1pbmZvX19tYWluXCI+XG4gICAgICAgICAgICAgIDxoMSBjbGFzcz1cInRyaXAtaW5mb19fdGl0bGVcIj5BbXN0ZXJkYW0gJm1kYXNoOyBDaGFtb25peCAmbWRhc2g7IEdlbmV2YTwvaDE+XG5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0cmlwLWluZm9fX2RhdGVzXCI+MTgmbmJzcDsmbWRhc2g7Jm5ic3A7MjAgTWFyPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidHJpcC1pbmZvX19jb3N0XCI+XG4gICAgICAgICAgICAgIFRvdGFsOiAmZXVybzsmbmJzcDs8c3BhbiBjbGFzcz1cInRyaXAtaW5mb19fY29zdC12YWx1ZVwiPjEyMzA8L3NwYW4+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9zZWN0aW9uPmA7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXdUcmlwSW5mb1ZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXcge1xuICBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld1RyaXBJbmZvVGVtcGxhdGUoKTtcbiAgfVxufSIsImltcG9ydCBBYnN0cmFjdFZpZXcgZnJvbSAnLi4vZnJhbWV3b3JrL3ZpZXcvYWJzdHJhY3Qtdmlldyc7XG5jb25zdCBjcmVhdGVGaWx0ZXJJdGVtVGVtcGxhdGUgPSAoZmlsdGVyLCBpc0NoZWNrZWQpID0+IHtcbiAgY29uc3Qge1xuICAgIHR5cGUsXG4gICAgY291bnRcbiAgfSA9IGZpbHRlcjtcbiAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwidHJpcC1maWx0ZXJzX19maWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJmaWx0ZXItJHt0eXBlfVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRyaXAtZmlsdGVyc19fZmlsdGVyLWlucHV0IHZpc3VhbGx5LWhpZGRlblwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInRyaXAtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHt0eXBlfVwiXG4gICAgICAgICAgICAgICAgICAke2lzQ2hlY2tlZCA/ICdjaGVja2VkJyA6ICcnfVxuICAgICAgICAgICAgICAgICAgJHtjb3VudCA9PT0gMCA/ICdkaXNhYmxlZCcgOiAnJ30+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0cmlwLWZpbHRlcnNfX2ZpbHRlci1sYWJlbFwiIGZvcj1cImZpbHRlci0ke3R5cGV9XCI+JHt0eXBlfTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbn07XG5jb25zdCBjcmVhdGVOZXdUcmlwRmlsdGVyc1RlbXBsYXRlID0gZmlsdGVySXRlbXMgPT4ge1xuICBjb25zdCBmaWx0ZXJJdGVtc1RlbXBsYXRlID0gZmlsdGVySXRlbXMubWFwKChmaWx0ZXIsIGluZGV4KSA9PiBjcmVhdGVGaWx0ZXJJdGVtVGVtcGxhdGUoZmlsdGVyLCBpbmRleCA9PT0gMCkpLmpvaW4oJycpO1xuICByZXR1cm4gYDxmb3JtIGNsYXNzPVwidHJpcC1maWx0ZXJzXCIgYWN0aW9uPVwiI1wiIG1ldGhvZD1cImdldFwiPlxuICAke2ZpbHRlckl0ZW1zVGVtcGxhdGV9XG4gIDxidXR0b24gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIiB0eXBlPVwic3VibWl0XCI+QWNjZXB0IGZpbHRlcjwvYnV0dG9uPjwvZm9ybT5gO1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ld1RyaXBGaWx0ZXJzVmlldyBleHRlbmRzIEFic3RyYWN0VmlldyB7XG4gICNmaWx0ZXJzID0gbnVsbDtcbiAgY29uc3RydWN0b3IoZmlsdGVycykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jZmlsdGVycyA9IGZpbHRlcnM7XG4gIH1cbiAgZ2V0IHRlbXBsYXRlKCkge1xuICAgIHJldHVybiBjcmVhdGVOZXdUcmlwRmlsdGVyc1RlbXBsYXRlKHRoaXMuI2ZpbHRlcnMuZmlsdGVycyk7XG4gIH1cbn0iLCJpbXBvcnQgQWJzdHJhY3RWaWV3IGZyb20gJy4uL2ZyYW1ld29yay92aWV3L2Fic3RyYWN0LXZpZXcnO1xuaW1wb3J0IHsgU29ydFR5cGUgfSBmcm9tICcuLi9jb25zdCc7XG5mdW5jdGlvbiBjcmVhdGVOZXdUcmlwU29ydFRlbXBsYXRlKCkge1xuICByZXR1cm4gYDxmb3JtIGNsYXNzPVwidHJpcC1ldmVudHNfX3RyaXAtc29ydCAgdHJpcC1zb3J0XCIgYWN0aW9uPVwiI1wiIG1ldGhvZD1cImdldFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyaXAtc29ydF9faXRlbSAgdHJpcC1zb3J0X19pdGVtLS1kYXlcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGlkPVwic29ydC1kYXlcIiBjbGFzcz1cInRyaXAtc29ydF9faW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0cmlwLXNvcnRcIiB2YWx1ZT1cInNvcnQtZGF5XCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidHJpcC1zb3J0X19idG5cIiBmb3I9XCJzb3J0LWRheVwiIGRhdGEtc29ydC10eXBlPVwiJHtTb3J0VHlwZS5ERUZBVUxUfVwiPkRheTwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyaXAtc29ydF9faXRlbSAgdHJpcC1zb3J0X19pdGVtLS1ldmVudFwiPlxuICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJzb3J0LWV2ZW50XCIgY2xhc3M9XCJ0cmlwLXNvcnRfX2lucHV0ICB2aXN1YWxseS1oaWRkZW5cIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwidHJpcC1zb3J0XCIgdmFsdWU9XCJzb3J0LWV2ZW50XCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRyaXAtc29ydF9fYnRuXCIgZm9yPVwic29ydC1ldmVudFwiPkV2ZW50PC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJpcC1zb3J0X19pdGVtICB0cmlwLXNvcnRfX2l0ZW0tLXRpbWVcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGlkPVwic29ydC10aW1lXCIgY2xhc3M9XCJ0cmlwLXNvcnRfX2lucHV0ICB2aXN1YWxseS1oaWRkZW5cIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwidHJpcC1zb3J0XCIgdmFsdWU9XCJzb3J0LXRpbWVcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidHJpcC1zb3J0X19idG5cIiBmb3I9XCJzb3J0LXRpbWVcIiBkYXRhLXNvcnQtdHlwZT1cIiR7U29ydFR5cGUuVElNRX1cIj5UaW1lPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJpcC1zb3J0X19pdGVtICB0cmlwLXNvcnRfX2l0ZW0tLXByaWNlXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cInNvcnQtcHJpY2VcIiBjbGFzcz1cInRyaXAtc29ydF9faW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0cmlwLXNvcnRcIiB2YWx1ZT1cInNvcnQtcHJpY2VcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidHJpcC1zb3J0X19idG5cIiBmb3I9XCJzb3J0LXByaWNlXCIgZGF0YS1zb3J0LXR5cGU9XCIke1NvcnRUeXBlLlBSSUNFfVwiPlByaWNlPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJpcC1zb3J0X19pdGVtICB0cmlwLXNvcnRfX2l0ZW0tLW9mZmVyXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cInNvcnQtb2ZmZXJcIiBjbGFzcz1cInRyaXAtc29ydF9faW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0cmlwLXNvcnRcIiB2YWx1ZT1cInNvcnQtb2ZmZXJcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidHJpcC1zb3J0X19idG5cIiBmb3I9XCJzb3J0LW9mZmVyXCI+T2ZmZXJzPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9ybT5gO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV3VHJpcFNvcnRWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3IHtcbiAgI2hhbmRsZVNvcnRUeXBlQ2hhbmdlID0gbnVsbDtcbiAgY29uc3RydWN0b3Ioe1xuICAgIG9uU29ydFR5cGVDaGFuZ2VcbiAgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jaGFuZGxlU29ydFR5cGVDaGFuZ2UgPSBvblNvcnRUeXBlQ2hhbmdlO1xuICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuI3NvcnRUeXBlQ2hhbmdlSGFuZGxlcik7XG4gIH1cbiAgZ2V0IHRlbXBsYXRlKCkge1xuICAgIHJldHVybiBjcmVhdGVOZXdUcmlwU29ydFRlbXBsYXRlKCk7XG4gIH1cbiAgI3NvcnRUeXBlQ2hhbmdlSGFuZGxlciA9IGV2dCA9PiB7XG4gICAgaWYgKGV2dC50YXJnZXQudGFnTmFtZSAhPT0gJ0xBQkVMJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLiNoYW5kbGVTb3J0VHlwZUNoYW5nZShldnQudGFyZ2V0LmRhdGFzZXQuc29ydFR5cGUpO1xuICB9O1xufSIsImltcG9ydCBBYnN0cmFjdFZpZXcgZnJvbSAnLi4vZnJhbWV3b3JrL3ZpZXcvYWJzdHJhY3Qtdmlldyc7XG5mdW5jdGlvbiBjcmVhdGVOZXdUcmlwRXZlbnRzTGlzdFRlbXBsYXRlKCkge1xuICByZXR1cm4gJzx1bCBjbGFzcz1cInRyaXAtZXZlbnRzX19saXN0XCI+PC91bD4nO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV3RXZlbnRzTGlzdFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXcge1xuICBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld1RyaXBFdmVudHNMaXN0VGVtcGxhdGUoKTtcbiAgfVxufSIsImltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5jb25zdCBodW1hbml6ZUR1ZURhdGUgPSAoZHVlRGF0ZSwgZGF0ZUZvcm1hdCkgPT4gZHVlRGF0ZSA/IGRheWpzKGR1ZURhdGUpLmZvcm1hdChkYXRlRm9ybWF0KSA6ICcnO1xuY29uc3QgaXNFdmVudEZ1dHVyZSA9IGRhdGVGcm9tID0+IGRhdGVGcm9tICYmIGRheWpzKCkuaXNBZnRlcihkYXRlRnJvbSwgJ0QnKTtcbmNvbnN0IGlzRXZlbnRQcmVzZW50ID0gKGRhdGVGcm9tLCBkYXRlVG8pID0+IHtcbiAgY29uc3Qgbm93ID0gZGF5anMoKTtcbiAgcmV0dXJuIGRhdGVGcm9tICYmIGRhdGVUbyAmJiBub3cuaXNBZnRlcihkYXRlRnJvbSwgJ0QnKSAmJiBub3cuaXNCZWZvcmUoZGF0ZVRvLCAnRCcpIHx8IG5vdy5pc1NhbWUoZGF0ZVRvLCAnRCcpO1xufTtcbmNvbnN0IGlzRXZlbnRQYXN0ID0gZGF0ZVRvID0+IGRhdGVUbyAmJiBkYXlqcygpLmlzQWZ0ZXIoZGF0ZVRvLCAnRCcpO1xuY29uc3Qgc29ydEV2ZW50c1ByaWNlID0gKGV2ZW50QSwgZXZlbnRCKSA9PiBldmVudEIuYmFzZVByaWNlIC0gZXZlbnRBLmJhc2VQcmljZTtcbmNvbnN0IHNvcnRFdmVudHNUaW1lID0gKGV2ZW50QSwgZXZlbnRCKSA9PiB7XG4gIGNvbnN0IGRhdGVGcm9tQSA9IGRheWpzKGV2ZW50QS5kYXRlRnJvbSk7XG4gIGNvbnN0IGRhdGVUb0EgPSBkYXlqcyhldmVudEEuZGF0ZVRvKTtcbiAgY29uc3QgZGF0ZUZyb21CID0gZGF5anMoZXZlbnRCLmRhdGVGcm9tKTtcbiAgY29uc3QgZGF0ZVRvQiA9IGRheWpzKGV2ZW50Qi5kYXRlVG8pO1xuICBjb25zdCBkdXJhdGlvbkEgPSBkYXRlVG9BLmRpZmYoZGF0ZUZyb21BKTtcbiAgY29uc3QgZHVyYXRpb25CID0gZGF0ZVRvQi5kaWZmKGRhdGVGcm9tQik7XG4gIHJldHVybiBkdXJhdGlvbkIgLSBkdXJhdGlvbkE7XG59O1xuZXhwb3J0IHsgaHVtYW5pemVEdWVEYXRlLCBpc0V2ZW50RnV0dXJlLCBpc0V2ZW50UHJlc2VudCwgaXNFdmVudFBhc3QsIHNvcnRFdmVudHNQcmljZSwgc29ydEV2ZW50c1RpbWUgfTsiLCJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IEFic3RyYWN0VmlldyBmcm9tICcuLi9mcmFtZXdvcmsvdmlldy9hYnN0cmFjdC12aWV3JztcbmltcG9ydCB7IGh1bWFuaXplRHVlRGF0ZSB9IGZyb20gJy4uL3V0aWxzL2V2ZW50JztcbmNvbnN0IFRJTUVfUEFUVEVSTiA9ICdoaDptbSc7XG5jb25zdCBIVU1BTklaRURfRVZFTlRfREFURV9QQVRURVJOID0gJ01NTSBERCc7XG5jb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICh0aW1lU3RhcnQsIHRpbWVFbmQpID0+IHtcbiAgY29uc3Qgc3RhcnQgPSBkYXlqcyh0aW1lU3RhcnQpO1xuICBjb25zdCBlbmQgPSBkYXlqcyh0aW1lRW5kKTtcbiAgY29uc3QgZGlmZmVyZW5jZUluRGF5cyA9IGVuZC5kaWZmKHN0YXJ0LCAnZGF5Jyk7XG4gIGNvbnN0IGRpZmZlcmVuY2VJbkhvdXJzID0gZW5kLmRpZmYoc3RhcnQsICdob3VyJykgJSAyNDtcbiAgY29uc3QgZGlmZmVyZW5jZUluTWludXRlcyA9IGVuZC5kaWZmKHN0YXJ0LCAnbWludXRlJykgJSA2MDtcbiAgaWYgKGRpZmZlcmVuY2VJbkRheXMgPiAwKSB7XG4gICAgcmV0dXJuIGAke1N0cmluZyhkaWZmZXJlbmNlSW5EYXlzKS5wYWRTdGFydCgyLCAnMCcpfUQgJHtTdHJpbmcoZGlmZmVyZW5jZUluSG91cnMpLnBhZFN0YXJ0KDIsICcwJyl9SCAke1N0cmluZyhkaWZmZXJlbmNlSW5NaW51dGVzKS5wYWRTdGFydCgyLCAnMCcpfU1gO1xuICB9IGVsc2UgaWYgKGRpZmZlcmVuY2VJbkhvdXJzID4gMCkge1xuICAgIHJldHVybiBgJHtTdHJpbmcoZGlmZmVyZW5jZUluSG91cnMpLnBhZFN0YXJ0KDIsICcwJyl9SCAke1N0cmluZyhkaWZmZXJlbmNlSW5NaW51dGVzKS5wYWRTdGFydCgyLCAnMCcpfU1gO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBgJHtTdHJpbmcoZGlmZmVyZW5jZUluTWludXRlcykucGFkU3RhcnQoMiwgJzAnKX1NYDtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU5ld09mZmVyID0gb2ZmZXIgPT4ge1xuICBjb25zdCB7XG4gICAgdGl0bGUsXG4gICAgcHJpY2VcbiAgfSA9IG9mZmVyO1xuICByZXR1cm4gYDxsaSBjbGFzcz1cImV2ZW50X19vZmZlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV2ZW50X19vZmZlci10aXRsZVwiPiR7dGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAmcGx1czsmZXVybzsmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldmVudF9fb2ZmZXItcHJpY2VcIj4ke3ByaWNlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGk+YDtcbn07XG5jb25zdCBjcmVhdGVPZmZlcnMgPSBvZmZlcnMgPT4ge1xuICBsZXQgb2ZmZXJzSFRNTCA9ICcnO1xuICBvZmZlcnMuZm9yRWFjaChvZmZlciA9PiB7XG4gICAgb2ZmZXJzSFRNTCArPSBjcmVhdGVOZXdPZmZlcihvZmZlcik7XG4gIH0pO1xuICByZXR1cm4gb2ZmZXJzSFRNTDtcbn07XG5jb25zdCBjcmVhdGVOZXdUcmlwRXZlbnRzSXRlbVRlbXBsYXRlID0gZXZlbnREYXRhID0+IHtcbiAgY29uc3Qge1xuICAgIGJhc2VQcmljZSxcbiAgICBkYXRlRnJvbSxcbiAgICBkYXRlVG8sXG4gICAgaXNGYXZvcml0ZSxcbiAgICB0eXBlLFxuICAgIG9mZmVycyxcbiAgICBkZXN0aW5hdGlvblxuICB9ID0gZXZlbnREYXRhO1xuICBjb25zdCBmYXZvcml0ZUJ1dHRvbkNsYXNzTmFtZSA9IGlzRmF2b3JpdGUgPyAnZXZlbnRfX2Zhdm9yaXRlLWJ0bi0tYWN0aXZlJyA6ICcnO1xuICBjb25zdCBodW1hbml6ZWRFdmVudERhdGUgPSBodW1hbml6ZUR1ZURhdGUoZGF0ZUZyb20sIEhVTUFOSVpFRF9FVkVOVF9EQVRFX1BBVFRFUk4pO1xuICBjb25zdCBodW1hbml6ZWRTdGFydFRpbWUgPSBodW1hbml6ZUR1ZURhdGUoZGF0ZUZyb20sIFRJTUVfUEFUVEVSTik7XG4gIGNvbnN0IGh1bWFuaXplZEVuZFRpbWUgPSBodW1hbml6ZUR1ZURhdGUoZGF0ZVRvLCBUSU1FX1BBVFRFUk4pO1xuICByZXR1cm4gYDxsaSBjbGFzcz1cInRyaXAtZXZlbnRzX19pdGVtXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudFwiPlxuICAgICAgICAgICAgICAgIDx0aW1lIGNsYXNzPVwiZXZlbnRfX2RhdGVcIiBkYXRldGltZT1cIiR7ZGF0ZUZyb219XCI+JHtodW1hbml6ZWRFdmVudERhdGV9PC90aW1lPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fdHlwZVwiPlxuICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImV2ZW50X190eXBlLWljb25cIiB3aWR0aD1cIjQyXCIgaGVpZ2h0PVwiNDJcIiBzcmM9XCJpbWcvaWNvbnMvJHt0eXBlfS5wbmdcIiBhbHQ9XCJFdmVudCB0eXBlIGljb25cIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJldmVudF9fdGl0bGVcIj4ke3R5cGV9ICR7ZGVzdGluYXRpb24ubmFtZX08L2gzPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fc2NoZWR1bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZXZlbnRfX3RpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRpbWUgY2xhc3M9XCJldmVudF9fc3RhcnQtdGltZVwiIGRhdGV0aW1lPVwiJHtkYXRlRnJvbX1cIj4ke2h1bWFuaXplZFN0YXJ0VGltZX08L3RpbWU+XG4gICAgICAgICAgICAgICAgICAgICZtZGFzaDtcbiAgICAgICAgICAgICAgICAgICAgPHRpbWUgY2xhc3M9XCJldmVudF9fZW5kLXRpbWVcIiBkYXRldGltZT1cIiR7ZGF0ZVRvfVwiPiR7aHVtYW5pemVkRW5kVGltZX08L3RpbWU+XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImV2ZW50X19kdXJhdGlvblwiPiR7Z2V0VGltZURpZmZlcmVuY2UoZGF0ZUZyb20sIGRhdGVUbyl9PC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZXZlbnRfX3ByaWNlXCI+XG4gICAgICAgICAgICAgICAgICAmZXVybzsmbmJzcDs8c3BhbiBjbGFzcz1cImV2ZW50X19wcmljZS12YWx1ZVwiPiR7YmFzZVByaWNlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+T2ZmZXJzOjwvaDQ+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZXZlbnRfX3NlbGVjdGVkLW9mZmVyc1wiPlxuICAgICAgICAgICAgICAgICR7Y3JlYXRlT2ZmZXJzKG9mZmVycyl9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZXZlbnRfX2Zhdm9yaXRlLWJ0biAke2Zhdm9yaXRlQnV0dG9uQ2xhc3NOYW1lfVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+QWRkIHRvIGZhdm9yaXRlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImV2ZW50X19mYXZvcml0ZS1pY29uXCIgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjI4XCIgdmlld0JveD1cIjAgMCAyOCAyOFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDIxbC04LjIyODk5IDQuMzI2MiAxLjU3MTU5LTkuMTYzMUwuNjg1MjA5IDkuNjczNzYgOS44ODU1IDguMzM2ODggMTQgMGw0LjExNDUgOC4zMzY4OCA5LjIwMDMgMS4zMzY4OC02LjY1NzQgNi40ODkzNCAxLjU3MTYgOS4xNjMxTDE0IDIxelwiLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImV2ZW50X19yb2xsdXAtYnRuXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5PcGVuIGV2ZW50PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5gO1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ld0V2ZW50c0l0ZW1WaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3IHtcbiAgI2V2ZW50RGF0YSA9IG51bGw7XG4gICNoYW5kbGVDbGljayA9IG51bGw7XG4gICNyb2xsdXBCdXR0b24gPSBudWxsO1xuICAjaGFuZGxlRmF2b3JpdGVDbGljayA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICB1c2VyRXZlbnQsXG4gICAgb25DbGljayxcbiAgICBvbkZhdm9yaXRlQ2xpY2tcbiAgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jZXZlbnREYXRhID0gdXNlckV2ZW50O1xuICAgIHRoaXMuI2hhbmRsZUNsaWNrID0gb25DbGljaztcbiAgICB0aGlzLiNoYW5kbGVGYXZvcml0ZUNsaWNrID0gb25GYXZvcml0ZUNsaWNrO1xuICAgIHRoaXMuI3JvbGx1cEJ1dHRvbiA9IHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZXZlbnRfX3JvbGx1cC1idG4nKTtcbiAgICB0aGlzLiNyb2xsdXBCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLiNjbGlja0hhbmRsZXIpO1xuICAgIHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZXZlbnRfX2Zhdm9yaXRlLWljb24nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuI2Zhdm9yaXRlQ2xpY2tIYW5kbGVyKTtcbiAgfVxuICBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld1RyaXBFdmVudHNJdGVtVGVtcGxhdGUodGhpcy4jZXZlbnREYXRhKTtcbiAgfVxuICAjY2xpY2tIYW5kbGVyID0gZXZ0ID0+IHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLiNoYW5kbGVDbGljaygpO1xuICB9O1xuICByZW1vdmVFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLiNyb2xsdXBCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLiNjbGlja0hhbmRsZXIpO1xuICB9XG4gICNmYXZvcml0ZUNsaWNrSGFuZGxlciA9IGV2dCA9PiB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy4jaGFuZGxlRmF2b3JpdGVDbGljaygpO1xuICB9O1xufSIsImltcG9ydCBBYnN0cmFjdFZpZXcgZnJvbSAnLi4vZnJhbWV3b3JrL3ZpZXcvYWJzdHJhY3Qtdmlldyc7XG5pbXBvcnQgeyBodW1hbml6ZUR1ZURhdGUgfSBmcm9tICcuLi91dGlscy9ldmVudCc7XG5jb25zdCBUSU1FX1BBVFRFUk4gPSAnREQvTU0vWVkgaGg6bW0nO1xuY29uc3QgY3JlYXRlTmV3T2ZmZXIgPSBvZmZlciA9PiB7XG4gIGNvbnN0IHtcbiAgICB0aXRsZSxcbiAgICBwcmljZVxuICB9ID0gb2ZmZXI7XG4gIHJldHVybiBgPGRpdiBjbGFzcz1cImV2ZW50X19vZmZlci1zZWxlY3RvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZXZlbnRfX29mZmVyLWNoZWNrYm94ICB2aXN1YWxseS1oaWRkZW5cIiBpZD1cImV2ZW50LW9mZmVyLWx1Z2dhZ2UtMVwiIHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJldmVudC1vZmZlci1sdWdnYWdlXCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImV2ZW50X19vZmZlci1sYWJlbFwiIGZvcj1cImV2ZW50LW9mZmVyLWx1Z2dhZ2UtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV2ZW50X19vZmZlci10aXRsZVwiPiR7dGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAmcGx1czsmZXVybzsmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldmVudF9fb2ZmZXItcHJpY2VcIj4ke3ByaWNlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbn07XG5jb25zdCBjcmVhdGVPZmZlcnMgPSBvZmZlcnMgPT4ge1xuICBsZXQgb2ZmZXJzSFRNTCA9ICcnO1xuICBvZmZlcnMuZm9yRWFjaChvZmZlciA9PiB7XG4gICAgb2ZmZXJzSFRNTCArPSBjcmVhdGVOZXdPZmZlcihvZmZlcik7XG4gIH0pO1xuICByZXR1cm4gb2ZmZXJzSFRNTDtcbn07XG5jb25zdCBjcmVhdGVOZXdFdmVudEVkaXRFbGVtZW50VGVtcGxhdGUgPSBldmVudERhdGEgPT4ge1xuICBjb25zdCB7XG4gICAgYmFzZVByaWNlLFxuICAgIGRhdGVGcm9tLFxuICAgIGRhdGVUbyxcbiAgICB0eXBlLFxuICAgIG9mZmVycyxcbiAgICBkZXN0aW5hdGlvblxuICB9ID0gZXZlbnREYXRhO1xuICBjb25zdCBkYXRlU3RhcnQgPSBodW1hbml6ZUR1ZURhdGUoZGF0ZUZyb20sIFRJTUVfUEFUVEVSTik7XG4gIGNvbnN0IGRhdGVFbmQgPSBodW1hbml6ZUR1ZURhdGUoZGF0ZVRvLCBUSU1FX1BBVFRFUk4pO1xuICByZXR1cm4gYDxsaSBjbGFzcz1cInRyaXAtZXZlbnRzX19pdGVtXCI+XG4gICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZXZlbnQgZXZlbnQtLWVkaXRcIiBhY3Rpb249XCIjXCIgbWV0aG9kPVwicG9zdFwiPlxuICAgICAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJldmVudF9faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnRfX3R5cGUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJldmVudF9fdHlwZSAgZXZlbnRfX3R5cGUtYnRuXCIgZm9yPVwiZXZlbnQtdHlwZS10b2dnbGUtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+Q2hvb3NlIGV2ZW50IHR5cGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImV2ZW50X190eXBlLWljb25cIiB3aWR0aD1cIjE3XCIgaGVpZ2h0PVwiMTdcIiBzcmM9XCJpbWcvaWNvbnMvJHt0eXBlfS5wbmdcIiBhbHQ9XCJFdmVudCB0eXBlIGljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZXZlbnRfX3R5cGUtdG9nZ2xlICB2aXN1YWxseS1oaWRkZW5cIiBpZD1cImV2ZW50LXR5cGUtdG9nZ2xlLTFcIiB0eXBlPVwiY2hlY2tib3hcIj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnRfX3R5cGUtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz1cImV2ZW50X190eXBlLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+RXZlbnQgdHlwZTwvbGVnZW5kPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnRfX3R5cGUtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJldmVudC10eXBlLXRheGktMVwiIGNsYXNzPVwiZXZlbnRfX3R5cGUtaW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJldmVudC10eXBlXCIgdmFsdWU9XCJ0YXhpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImV2ZW50X190eXBlLWxhYmVsICBldmVudF9fdHlwZS1sYWJlbC0tdGF4aVwiIGZvcj1cImV2ZW50LXR5cGUtdGF4aS0xXCI+VGF4aTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50X190eXBlLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZXZlbnQtdHlwZS1idXMtMVwiIGNsYXNzPVwiZXZlbnRfX3R5cGUtaW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJldmVudC10eXBlXCIgdmFsdWU9XCJidXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZXZlbnRfX3R5cGUtbGFiZWwgIGV2ZW50X190eXBlLWxhYmVsLS1idXNcIiBmb3I9XCJldmVudC10eXBlLWJ1cy0xXCI+QnVzPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnRfX3R5cGUtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJldmVudC10eXBlLXRyYWluLTFcIiBjbGFzcz1cImV2ZW50X190eXBlLWlucHV0ICB2aXN1YWxseS1oaWRkZW5cIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiZXZlbnQtdHlwZVwiIHZhbHVlPVwidHJhaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZXZlbnRfX3R5cGUtbGFiZWwgIGV2ZW50X190eXBlLWxhYmVsLS10cmFpblwiIGZvcj1cImV2ZW50LXR5cGUtdHJhaW4tMVwiPlRyYWluPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnRfX3R5cGUtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJldmVudC10eXBlLXNoaXAtMVwiIGNsYXNzPVwiZXZlbnRfX3R5cGUtaW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJldmVudC10eXBlXCIgdmFsdWU9XCJzaGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImV2ZW50X190eXBlLWxhYmVsICBldmVudF9fdHlwZS1sYWJlbC0tc2hpcFwiIGZvcj1cImV2ZW50LXR5cGUtc2hpcC0xXCI+U2hpcDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50X190eXBlLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZXZlbnQtdHlwZS1kcml2ZS0xXCIgY2xhc3M9XCJldmVudF9fdHlwZS1pbnB1dCAgdmlzdWFsbHktaGlkZGVuXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cImV2ZW50LXR5cGVcIiB2YWx1ZT1cImRyaXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImV2ZW50X190eXBlLWxhYmVsICBldmVudF9fdHlwZS1sYWJlbC0tZHJpdmVcIiBmb3I9XCJldmVudC10eXBlLWRyaXZlLTFcIj5Ecml2ZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50X190eXBlLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZXZlbnQtdHlwZS1mbGlnaHQtMVwiIGNsYXNzPVwiZXZlbnRfX3R5cGUtaW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJldmVudC10eXBlXCIgdmFsdWU9XCJmbGlnaHRcIiBjaGVja2VkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJldmVudF9fdHlwZS1sYWJlbCAgZXZlbnRfX3R5cGUtbGFiZWwtLWZsaWdodFwiIGZvcj1cImV2ZW50LXR5cGUtZmxpZ2h0LTFcIj5GbGlnaHQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fdHlwZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImV2ZW50LXR5cGUtY2hlY2staW4tMVwiIGNsYXNzPVwiZXZlbnRfX3R5cGUtaW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJldmVudC10eXBlXCIgdmFsdWU9XCJjaGVjay1pblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJldmVudF9fdHlwZS1sYWJlbCAgZXZlbnRfX3R5cGUtbGFiZWwtLWNoZWNrLWluXCIgZm9yPVwiZXZlbnQtdHlwZS1jaGVjay1pbi0xXCI+Q2hlY2staW48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fdHlwZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImV2ZW50LXR5cGUtc2lnaHRzZWVpbmctMVwiIGNsYXNzPVwiZXZlbnRfX3R5cGUtaW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJldmVudC10eXBlXCIgdmFsdWU9XCJzaWdodHNlZWluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJldmVudF9fdHlwZS1sYWJlbCAgZXZlbnRfX3R5cGUtbGFiZWwtLXNpZ2h0c2VlaW5nXCIgZm9yPVwiZXZlbnQtdHlwZS1zaWdodHNlZWluZy0xXCI+U2lnaHRzZWVpbmc8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fdHlwZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImV2ZW50LXR5cGUtcmVzdGF1cmFudC0xXCIgY2xhc3M9XCJldmVudF9fdHlwZS1pbnB1dCAgdmlzdWFsbHktaGlkZGVuXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cImV2ZW50LXR5cGVcIiB2YWx1ZT1cInJlc3RhdXJhbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZXZlbnRfX3R5cGUtbGFiZWwgIGV2ZW50X190eXBlLWxhYmVsLS1yZXN0YXVyYW50XCIgZm9yPVwiZXZlbnQtdHlwZS1yZXN0YXVyYW50LTFcIj5SZXN0YXVyYW50PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fZmllbGQtZ3JvdXAgIGV2ZW50X19maWVsZC1ncm91cC0tZGVzdGluYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZXZlbnRfX2xhYmVsICBldmVudF9fdHlwZS1vdXRwdXRcIiBmb3I9XCJldmVudC1kZXN0aW5hdGlvbi0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHt0eXBlfVxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJldmVudF9faW5wdXQgIGV2ZW50X19pbnB1dC0tZGVzdGluYXRpb25cIiBpZD1cImV2ZW50LWRlc3RpbmF0aW9uLTFcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJldmVudC1kZXN0aW5hdGlvblwiIHZhbHVlPVwiJHtkZXN0aW5hdGlvbi5uYW1lfVwiIGxpc3Q9XCJkZXN0aW5hdGlvbi1saXN0LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRhdGFsaXN0IGlkPVwiZGVzdGluYXRpb24tbGlzdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFtc3RlcmRhbVwiPjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJHZW5ldmFcIj48L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQ2hhbW9uaXhcIj48L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kYXRhbGlzdD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnRfX2ZpZWxkLWdyb3VwICBldmVudF9fZmllbGQtZ3JvdXAtLXRpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCIgZm9yPVwiZXZlbnQtc3RhcnQtdGltZS0xXCI+RnJvbTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImV2ZW50X19pbnB1dCAgZXZlbnRfX2lucHV0LS10aW1lXCIgaWQ9XCJldmVudC1zdGFydC10aW1lLTFcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJldmVudC1zdGFydC10aW1lXCIgdmFsdWU9XCIke2RhdGVTdGFydH1cIj5cbiAgICAgICAgICAgICAgICAgICAgJm1kYXNoO1xuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIiBmb3I9XCJldmVudC1lbmQtdGltZS0xXCI+VG88L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJldmVudF9faW5wdXQgIGV2ZW50X19pbnB1dC0tdGltZVwiIGlkPVwiZXZlbnQtZW5kLXRpbWUtMVwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImV2ZW50LWVuZC10aW1lXCIgdmFsdWU9XCIke2RhdGVFbmR9XCI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50X19maWVsZC1ncm91cCAgZXZlbnRfX2ZpZWxkLWdyb3VwLS1wcmljZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJldmVudF9fbGFiZWxcIiBmb3I9XCJldmVudC1wcmljZS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5QcmljZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAmZXVybztcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZXZlbnRfX2lucHV0ICBldmVudF9faW5wdXQtLXByaWNlXCIgaWQ9XCJldmVudC1wcmljZS0xXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiZXZlbnQtcHJpY2VcIiB2YWx1ZT1cIiR7YmFzZVByaWNlfVwiPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJldmVudF9fc2F2ZS1idG4gIGJ0biAgYnRuLS1ibHVlXCIgdHlwZT1cInN1Ym1pdFwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJldmVudF9fcmVzZXQtYnRuXCIgdHlwZT1cInJlc2V0XCI+RGVsZXRlPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZXZlbnRfX3JvbGx1cC1idG5cIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+T3BlbiBldmVudDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZXZlbnRfX2RldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZXZlbnRfX3NlY3Rpb24gIGV2ZW50X19zZWN0aW9uLS1vZmZlcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiZXZlbnRfX3NlY3Rpb24tdGl0bGUgIGV2ZW50X19zZWN0aW9uLXRpdGxlLS1vZmZlcnNcIj5PZmZlcnM8L2gzPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fYXZhaWxhYmxlLW9mZmVyc1wiPlxuICAgICAgICAgICAgICAgICAgICAke2NyZWF0ZU9mZmVycyhvZmZlcnMpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJldmVudF9fc2VjdGlvbiAgZXZlbnRfX3NlY3Rpb24tLWRlc3RpbmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImV2ZW50X19zZWN0aW9uLXRpdGxlICBldmVudF9fc2VjdGlvbi10aXRsZS0tZGVzdGluYXRpb25cIj5EZXN0aW5hdGlvbjwvaDM+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZXZlbnRfX2Rlc3RpbmF0aW9uLWRlc2NyaXB0aW9uXCI+JHtkZXN0aW5hdGlvbi5kZXNjcmlwdGlvbn08L3A+XG4gICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2xpPmA7XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV3RXZlbnRFZGl0RWxlbWVudFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXcge1xuICAjZXZlbnREYXRhID0gbnVsbDtcbiAgI2hhbmRsZUNsaWNrID0gbnVsbDtcbiAgI3JvbGx1cEJ1dHRvbiA9IG51bGw7XG4gICNoYW5kbGVTdWJtaXQgPSBudWxsO1xuICAjZm9ybUVsZW1lbnQgPSBudWxsO1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgdXNlckV2ZW50LFxuICAgIG9uQ2xpY2ssXG4gICAgb25TdWJtaXRcbiAgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jZXZlbnREYXRhID0gdXNlckV2ZW50O1xuICAgIHRoaXMuI2hhbmRsZUNsaWNrID0gb25DbGljaztcbiAgICB0aGlzLiNoYW5kbGVTdWJtaXQgPSBvblN1Ym1pdDtcbiAgICB0aGlzLiNyb2xsdXBCdXR0b24gPSB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcignLmV2ZW50X19yb2xsdXAtYnRuJyk7XG4gICAgdGhpcy4jcm9sbHVwQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy4jY2xpY2tIYW5kbGVyKTtcbiAgICB0aGlzLiNmb3JtRWxlbWVudCA9IHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZXZlbnQtLWVkaXQnKTtcbiAgICB0aGlzLiNmb3JtRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCB0aGlzLiNzdWJtaXRIYW5kbGVyKTtcbiAgfVxuICBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld0V2ZW50RWRpdEVsZW1lbnRUZW1wbGF0ZSh0aGlzLiNldmVudERhdGEpO1xuICB9XG4gICNjbGlja0hhbmRsZXIgPSBldnQgPT4ge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuI2hhbmRsZUNsaWNrKHRoaXMuI2V2ZW50RGF0YSk7XG4gIH07XG4gICNzdWJtaXRIYW5kbGVyID0gZXZ0ID0+IHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLiNoYW5kbGVDbGljayh0aGlzLiNldmVudERhdGEpO1xuICB9O1xuICByZW1vdmVFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLiNyb2xsdXBCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLiNjbGlja0hhbmRsZXIpO1xuICAgIHRoaXMuI2Zvcm1FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIHRoaXMuI3N1Ym1pdEhhbmRsZXIpO1xuICB9XG59IiwiaW1wb3J0IHsgcmVuZGVyLCByZXBsYWNlLCByZW1vdmUgfSBmcm9tICcuLi9mcmFtZXdvcmsvcmVuZGVyLmpzJztcbmltcG9ydCB7IGlzRXNjYXBlS2V5IH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uLmpzJztcbmltcG9ydCBOZXdFdmVudHNJdGVtVmlldyBmcm9tICcuLi92aWV3L25ldy1ldmVudHMtaXRlbS12aWV3LmpzJztcbmltcG9ydCBOZXdFdmVudEVkaXRFbGVtZW50VmlldyBmcm9tICcuLi92aWV3L25ldy1ldmVudC1lZGl0LWVsZW1lbnQtdmlldy5qcyc7XG5jb25zdCBNb2RlID0ge1xuICBERUZBVUxUOiAnREVGQVVMVCcsXG4gIEVESVRJTkc6ICdFRElUSU5HJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50UHJlc2VudGVyIHtcbiAgI2NvbnRhaW5lciA9IG51bGw7XG4gICNoYW5kbGVEYXRhQ2hhbmdlID0gbnVsbDtcbiAgI2hhbmRsZU1vZGVDaGFuZ2UgPSBudWxsO1xuICAjZXZlbnRDb21wb25lbnQgPSBudWxsO1xuICAjZXZlbnRFZGl0Q29tcG9uZW50ID0gbnVsbDtcbiAgI2V2ZW50SXRlbSA9IG51bGw7XG4gICNtb2RlID0gTW9kZS5ERUZBVUxUO1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgY29udGFpbmVyLFxuICAgIG9uRGF0YUNoYW5nZSxcbiAgICBvbk1vZGVDaGFuZ2VcbiAgfSkge1xuICAgIHRoaXMuI2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICB0aGlzLiNoYW5kbGVEYXRhQ2hhbmdlID0gb25EYXRhQ2hhbmdlO1xuICAgIHRoaXMuI2hhbmRsZU1vZGVDaGFuZ2UgPSBvbk1vZGVDaGFuZ2U7XG4gIH1cbiAgaW5pdChldmVudEl0ZW0pIHtcbiAgICB0aGlzLiNldmVudEl0ZW0gPSBldmVudEl0ZW07XG4gICAgY29uc3QgcHJldkV2ZW50Q29tcG9uZW50ID0gdGhpcy4jZXZlbnRDb21wb25lbnQ7XG4gICAgY29uc3QgcHJldkV2ZW50RWRpdENvbXBvbmVudCA9IHRoaXMuI2V2ZW50RWRpdENvbXBvbmVudDtcbiAgICB0aGlzLiNldmVudENvbXBvbmVudCA9IG5ldyBOZXdFdmVudHNJdGVtVmlldyh7XG4gICAgICB1c2VyRXZlbnQ6IHRoaXMuI2V2ZW50SXRlbSxcbiAgICAgIG9uQ2xpY2s6IHRoaXMuI2hhbmRsZUVkaXRDbGljayxcbiAgICAgIG9uRmF2b3JpdGVDbGljazogdGhpcy4jaGFuZGxlRmF2b3JpdGVDbGlja1xuICAgIH0pO1xuICAgIHRoaXMuI2V2ZW50RWRpdENvbXBvbmVudCA9IG5ldyBOZXdFdmVudEVkaXRFbGVtZW50Vmlldyh7XG4gICAgICB1c2VyRXZlbnQ6IHRoaXMuI2V2ZW50SXRlbSxcbiAgICAgIG9uQ2xpY2s6IHRoaXMuI2hhbmRsZVNhdmVDbGlja1xuICAgIH0pO1xuICAgIGlmIChwcmV2RXZlbnRDb21wb25lbnQgPT09IG51bGwgfHwgcHJldkV2ZW50RWRpdENvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgICAgcmVuZGVyKHRoaXMuI2V2ZW50Q29tcG9uZW50LCB0aGlzLiNjb250YWluZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy4jbW9kZSA9PT0gTW9kZS5ERUZBVUxUKSB7XG4gICAgICByZXBsYWNlKHRoaXMuI2V2ZW50Q29tcG9uZW50LCBwcmV2RXZlbnRDb21wb25lbnQpO1xuICAgIH1cbiAgICBpZiAodGhpcy4jbW9kZSA9PT0gTW9kZS5FRElUSU5HKSB7XG4gICAgICByZXBsYWNlKHRoaXMuI2V2ZW50RWRpdENvbXBvbmVudCwgcHJldkV2ZW50RWRpdENvbXBvbmVudCk7XG4gICAgfVxuICAgIHJlbW92ZShwcmV2RXZlbnRDb21wb25lbnQpO1xuICAgIHJlbW92ZShwcmV2RXZlbnRFZGl0Q29tcG9uZW50KTtcbiAgfVxuICAjcmVwbGFjZUV2ZW50Q2FyZFRvRWRpdEZvcm0oKSB7XG4gICAgcmVwbGFjZSh0aGlzLiNldmVudEVkaXRDb21wb25lbnQsIHRoaXMuI2V2ZW50Q29tcG9uZW50KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy4jZXNjS2V5RG93bkhhbmRsZXIpO1xuICAgIHRoaXMuI2hhbmRsZU1vZGVDaGFuZ2UoKTtcbiAgICB0aGlzLiNtb2RlID0gTW9kZS5FRElUSU5HO1xuICB9XG4gICNyZXBsYWNlRWRpdEZvcm1Ub0V2ZW50Q2FyZCgpIHtcbiAgICByZXBsYWNlKHRoaXMuI2V2ZW50Q29tcG9uZW50LCB0aGlzLiNldmVudEVkaXRDb21wb25lbnQpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLiNlc2NLZXlEb3duSGFuZGxlcik7XG4gICAgdGhpcy4jbW9kZSA9IE1vZGUuREVGQVVMVDtcbiAgfVxuICBkZXN0cm95KCkge1xuICAgIHJlbW92ZSh0aGlzLiNldmVudENvbXBvbmVudCk7XG4gICAgcmVtb3ZlKHRoaXMuI2V2ZW50RWRpdENvbXBvbmVudCk7XG4gIH1cbiAgcmVzZXRWaWV3KCkge1xuICAgIGlmICh0aGlzLiNtb2RlICE9PSBNb2RlLkRFRkFVTFQpIHtcbiAgICAgIHRoaXMuI3JlcGxhY2VFZGl0Rm9ybVRvRXZlbnRDYXJkKCk7XG4gICAgfVxuICB9XG4gICNlc2NLZXlEb3duSGFuZGxlciA9IGV2dCA9PiB7XG4gICAgaWYgKGlzRXNjYXBlS2V5KGV2dCkpIHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy4jcmVwbGFjZUVkaXRGb3JtVG9FdmVudENhcmQoKTtcbiAgICB9XG4gIH07XG4gICNoYW5kbGVFZGl0Q2xpY2sgPSAoKSA9PiB7XG4gICAgdGhpcy4jcmVwbGFjZUV2ZW50Q2FyZFRvRWRpdEZvcm0oKTtcbiAgfTtcbiAgI2hhbmRsZUZhdm9yaXRlQ2xpY2sgPSAoKSA9PiB7XG4gICAgdGhpcy4jaGFuZGxlRGF0YUNoYW5nZSh7XG4gICAgICAuLi50aGlzLiNldmVudEl0ZW0sXG4gICAgICBpc0Zhdm9yaXRlOiAhdGhpcy4jZXZlbnRJdGVtLmlzRmF2b3JpdGVcbiAgICB9KTtcbiAgfTtcbiAgI2hhbmRsZVNhdmVDbGljayA9IGV2ZW50SXRlbSA9PiB7XG4gICAgdGhpcy4jaGFuZGxlRGF0YUNoYW5nZShldmVudEl0ZW0pO1xuICAgIHRoaXMuI3JlcGxhY2VFZGl0Rm9ybVRvRXZlbnRDYXJkKCk7XG4gIH07XG59IiwiaW1wb3J0IEFic3RyYWN0VmlldyBmcm9tICcuLi9mcmFtZXdvcmsvdmlldy9hYnN0cmFjdC12aWV3JztcbmZ1bmN0aW9uIGNyZWF0ZU5vRXZlbnRzVmlld1RlbXBsYXRlKCkge1xuICByZXR1cm4gJzxwIGNsYXNzPVwidHJpcC1ldmVudHNfX21zZ1wiPkxvYWRpbmcuLi48L3A+Jztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vRXZlbnRzVmlldyBleHRlbmRzIEFic3RyYWN0VmlldyB7XG4gIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlTm9FdmVudHNWaWV3VGVtcGxhdGUoKTtcbiAgfVxufSIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gJy4uL2ZyYW1ld29yay9yZW5kZXIuanMnO1xuaW1wb3J0IHsgdXBkYXRlSXRlbSB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbi5qcyc7XG5pbXBvcnQgTmV3VHJpcFNvcnRWaWV3IGZyb20gJy4uL3ZpZXcvbmV3LXNvcnQtY29udGFpbmVyLXZpZXcuanMnO1xuaW1wb3J0IE5ld0V2ZW50c0xpc3RWaWV3IGZyb20gJy4uL3ZpZXcvbmV3LWV2ZW50cy1saXN0LXZpZXcuanMnO1xuaW1wb3J0IEV2ZW50UHJlc2VudGVyIGZyb20gJy4vZXZlbnQtcHJlc2VudGVyLmpzJztcbmltcG9ydCBOb0V2ZW50c1ZpZXcgZnJvbSAnLi4vdmlldy9uby1ldmVudHMtdmlldy5qcyc7XG5pbXBvcnQgeyBTb3J0VHlwZSB9IGZyb20gJy4uL2NvbnN0LmpzJztcbmltcG9ydCB7IHNvcnRFdmVudHNQcmljZSwgc29ydEV2ZW50c1RpbWUgfSBmcm9tICcuLi91dGlscy9ldmVudC5qcyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb2FyZFByZXNlbnRlciB7XG4gICNjb250YWluZXIgPSBudWxsO1xuICAjZXZlbnRzTW9kZWwgPSBudWxsO1xuICAjc29ydENvbXBvbmVudCA9IG51bGw7XG4gICNldmVudHNMaXN0Q29tcG9uZW50ID0gbmV3IE5ld0V2ZW50c0xpc3RWaWV3KCk7XG4gICNldmVudHNMaXN0ID0gW107XG4gICNldmVudFByZXNlbnRlcnMgPSBuZXcgTWFwKCk7XG4gICNjdXJyZW50U29ydFR5cGUgPSBTb3J0VHlwZS5ERUZBVUxUO1xuICAjc291cmNlZEJvYXJkRXZlbnRzID0gW107XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBjb250YWluZXIsXG4gICAgZXZlbnRzTW9kZWxcbiAgfSkge1xuICAgIHRoaXMuI2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICB0aGlzLiNldmVudHNNb2RlbCA9IGV2ZW50c01vZGVsO1xuICB9XG4gIGluaXQoKSB7XG4gICAgdGhpcy4jZXZlbnRzTGlzdCA9IFsuLi50aGlzLiNldmVudHNNb2RlbC51c2VyRXZlbnRzXTtcbiAgICB0aGlzLiNzb3VyY2VkQm9hcmRFdmVudHMgPSBbLi4udGhpcy4jZXZlbnRzTW9kZWwudXNlckV2ZW50c107XG4gICAgdGhpcy4jcmVuZGVyQm9hcmQoKTtcbiAgICB0aGlzLiNyZW5kZXJTb3J0KCk7XG4gIH1cbiAgI3JlbmRlckV2ZW50KGlucHV0VXNlckV2ZW50KSB7XG4gICAgY29uc3QgZXZlbnRQcmVzZW50ZXIgPSBuZXcgRXZlbnRQcmVzZW50ZXIoe1xuICAgICAgY29udGFpbmVyOiB0aGlzLiNldmVudHNMaXN0Q29tcG9uZW50LmVsZW1lbnQsXG4gICAgICBvbkRhdGFDaGFuZ2U6IHRoaXMuI2hhbmRsZUV2ZW50Q2hhbmdlLFxuICAgICAgb25Nb2RlQ2hhbmdlOiB0aGlzLiNoYW5kbGVNb2RlQ2hhbmdlXG4gICAgfSk7XG4gICAgZXZlbnRQcmVzZW50ZXIuaW5pdChpbnB1dFVzZXJFdmVudCk7XG4gICAgdGhpcy4jZXZlbnRQcmVzZW50ZXJzLnNldChpbnB1dFVzZXJFdmVudC5pZCwgZXZlbnRQcmVzZW50ZXIpO1xuICB9XG4gICNyZW5kZXJOb0V2ZW50cygpIHtcbiAgICByZW5kZXIobmV3IE5vRXZlbnRzVmlldygpLCB0aGlzLiNjb250YWluZXIpO1xuICB9XG4gICNzb3J0RXZlbnRzKHNvcnRUeXBlKSB7XG4gICAgc3dpdGNoIChzb3J0VHlwZSkge1xuICAgICAgY2FzZSBTb3J0VHlwZS5QUklDRTpcbiAgICAgICAgdGhpcy4jZXZlbnRzTGlzdC5zb3J0KHNvcnRFdmVudHNQcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTb3J0VHlwZS5USU1FOlxuICAgICAgICB0aGlzLiNldmVudHNMaXN0LnNvcnQoc29ydEV2ZW50c1RpbWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuI2V2ZW50c0xpc3QgPSBbLi4udGhpcy4jc291cmNlZEJvYXJkRXZlbnRzXTtcbiAgICB9XG4gICAgdGhpcy4jY3VycmVudFNvcnRUeXBlID0gc29ydFR5cGU7XG4gIH1cbiAgI2hhbmRsZVNvcnRUeXBlQ2hhbmdlID0gc29ydFR5cGUgPT4ge1xuICAgIGlmIChzb3J0VHlwZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuI2N1cnJlbnRTb3J0VHlwZSA9PT0gc29ydFR5cGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy4jc29ydEV2ZW50cyhzb3J0VHlwZSk7XG4gICAgdGhpcy4jY2xlYXJFdmVudExpc3QoKTtcbiAgICB0aGlzLiNyZW5kZXJCb2FyZCgpO1xuICB9O1xuICAjcmVuZGVyU29ydCgpIHtcbiAgICB0aGlzLiNzb3J0Q29tcG9uZW50ID0gbmV3IE5ld1RyaXBTb3J0Vmlldyh7XG4gICAgICBvblNvcnRUeXBlQ2hhbmdlOiB0aGlzLiNoYW5kbGVTb3J0VHlwZUNoYW5nZVxuICAgIH0pO1xuICAgIHJlbmRlcih0aGlzLiNzb3J0Q29tcG9uZW50LCB0aGlzLiNjb250YWluZXIsICdBRlRFUkJFR0lOJyk7XG4gIH1cbiAgI3JlbmRlckJvYXJkKCkge1xuICAgIGlmICh0aGlzLiNldmVudHNMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy4jcmVuZGVyTm9FdmVudHMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVuZGVyKHRoaXMuI2V2ZW50c0xpc3RDb21wb25lbnQsIHRoaXMuI2NvbnRhaW5lcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLiNldmVudHNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLiNyZW5kZXJFdmVudCh0aGlzLiNldmVudHNMaXN0W2ldKTtcbiAgICB9XG4gIH1cbiAgI2hhbmRsZUV2ZW50Q2hhbmdlID0gdXBkYXRlZEV2ZW50ID0+IHtcbiAgICB0aGlzLiNldmVudHNMaXN0ID0gdXBkYXRlSXRlbSh0aGlzLiNldmVudHNMaXN0LCB1cGRhdGVkRXZlbnQpO1xuICAgIHRoaXMuI3NvdXJjZWRCb2FyZEV2ZW50cyA9IHVwZGF0ZUl0ZW0odGhpcy4jc291cmNlZEJvYXJkRXZlbnRzLCB1cGRhdGVkRXZlbnQpO1xuICAgIHRoaXMuI2V2ZW50UHJlc2VudGVycy5nZXQodXBkYXRlZEV2ZW50LmlkKS5pbml0KHVwZGF0ZWRFdmVudCk7XG4gIH07XG4gICNoYW5kbGVNb2RlQ2hhbmdlID0gKCkgPT4ge1xuICAgIHRoaXMuI2V2ZW50UHJlc2VudGVycy5mb3JFYWNoKHByZXNlbnRlciA9PiBwcmVzZW50ZXIucmVzZXRWaWV3KCkpO1xuICB9O1xuICAjY2xlYXJFdmVudExpc3QoKSB7XG4gICAgdGhpcy4jZXZlbnRQcmVzZW50ZXJzLmZvckVhY2gocHJlc2VudGVyID0+IHByZXNlbnRlci5kZXN0cm95KCkpO1xuICAgIHRoaXMuI2V2ZW50UHJlc2VudGVycy5jbGVhcigpO1xuICB9XG59IiwiaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gJy4uL2NvbnN0JztcbmltcG9ydCB7IGlzRXZlbnRGdXR1cmUsIGlzRXZlbnRQcmVzZW50LCBpc0V2ZW50UGFzdCB9IGZyb20gJy4vZXZlbnQnO1xuY29uc3QgZmlsdGVyID0ge1xuICBbRmlsdGVyVHlwZS5FVkVSWVRISU5HXTogdXNlckV2ZW50cyA9PiB1c2VyRXZlbnRzLFxuICBbRmlsdGVyVHlwZS5GVVRVUkVdOiB1c2VyRXZlbnRzID0+IHVzZXJFdmVudHMuZmlsdGVyKHVzZXJFdmVudCA9PiBpc0V2ZW50RnV0dXJlKHVzZXJFdmVudC5kYXRlRnJvbSkpLFxuICBbRmlsdGVyVHlwZS5QUkVTRU5UXTogdXNlckV2ZW50cyA9PiB1c2VyRXZlbnRzLmZpbHRlcih1c2VyRXZlbnQgPT4gaXNFdmVudFByZXNlbnQodXNlckV2ZW50LmRhdGVGcm9tKSksXG4gIFtGaWx0ZXJUeXBlLlBBU1RdOiB1c2VyRXZlbnRzID0+IHVzZXJFdmVudHMuZmlsdGVyKHVzZXJFdmVudCA9PiBpc0V2ZW50UGFzdCh1c2VyRXZlbnQuZGF0ZUZyb20pKVxufTtcbmV4cG9ydCB7IGZpbHRlciB9OyIsImltcG9ydCB7IGZpbHRlciB9IGZyb20gJy4uL3V0aWxzL2ZpbHRlci5qcyc7XG5mdW5jdGlvbiBnZW5lcmF0ZUZpbHRlcih1c2VyRXZlbnRzKSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhmaWx0ZXIpLm1hcCgoW2ZpbHRlclR5cGUsIGZpbHRlckV2ZW50c10pID0+ICh7XG4gICAgdHlwZTogZmlsdGVyVHlwZSxcbiAgICBjb3VudDogZmlsdGVyRXZlbnRzKHVzZXJFdmVudHMpLmxlbmd0aFxuICB9KSk7XG59XG5leHBvcnQgeyBnZW5lcmF0ZUZpbHRlciB9OyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gJy4vZnJhbWV3b3JrL3JlbmRlci5qcyc7XG5pbXBvcnQgRXZlbnRzTW9kZWwgZnJvbSAnLi9tb2RlbC9ldmVudHMtbW9kZWwuanMnO1xuaW1wb3J0IE5ld1RyaXBJbmZvVmlldyBmcm9tICcuL3ZpZXcvbmV3LXRyaXAtaW5mby12aWV3LmpzJztcbmltcG9ydCBOZXdUcmlwRmlsdGVyc1ZpZXcgZnJvbSAnLi92aWV3L25ldy1maWx0ZXJzLXZpZXcuanMnO1xuaW1wb3J0IEJvYXJkUHJlc2VudGVyIGZyb20gJy4vcHJlc2VudGVyL2JvYXJkLXByZXNlbnRlci5qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUZpbHRlciB9IGZyb20gJy4vbW9jay9maWx0ZXIuanMnO1xuY29uc3QgdHJpcE1haW5Db250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudHJpcC1tYWluJyk7XG5jb25zdCB0cmlwRmlsdGVyc0NvbnRhaW5lciA9IHRyaXBNYWluQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy50cmlwLWNvbnRyb2xzX19maWx0ZXJzJyk7XG5jb25zdCB0cmlwRXZlbnRzQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRyaXAtZXZlbnRzJyk7XG5jb25zdCBldmVudHNNb2RlbCA9IG5ldyBFdmVudHNNb2RlbCgpO1xuY29uc3QgYm9hcmRQcmVzZW50ZXIgPSBuZXcgQm9hcmRQcmVzZW50ZXIoe1xuICBjb250YWluZXI6IHRyaXBFdmVudHNDb250YWluZXIsXG4gIGV2ZW50c01vZGVsXG59KTtcbmNvbnN0IGZpbHRlcnMgPSBnZW5lcmF0ZUZpbHRlcihldmVudHNNb2RlbC51c2VyRXZlbnRzKTtcbnJlbmRlcihuZXcgTmV3VHJpcEluZm9WaWV3KCksIHRyaXBNYWluQ29udGFpbmVyLCAnQUZURVJCRUdJTicpO1xucmVuZGVyKG5ldyBOZXdUcmlwRmlsdGVyc1ZpZXcoe1xuICBmaWx0ZXJzXG59KSwgdHJpcEZpbHRlcnNDb250YWluZXIpO1xuYm9hcmRQcmVzZW50ZXIuaW5pdCgpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///89\n')},10:(module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ".shake {\\n animation: shake 0.6s;\\n position: relative;\\n z-index: 10;\\n}\\n\\n@keyframes shake {\\n 0%,\\n 100% {\\n transform: translateX(0);\\n }\\n\\n 10%,\\n 30%,\\n 50%,\\n 70%,\\n 90% {\\n transform: translateX(-5px);\\n }\\n\\n 20%,\\n 40%,\\n 60%,\\n 80% {\\n transform: translateX(5px);\\n }\\n}\\n", ""]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy9mcmFtZXdvcmsvdmlldy9hYnN0cmFjdC12aWV3LmNzcz9kZjNkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9OT19TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvbm9Tb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfTk9fU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuc2hha2Uge1xcbiAgYW5pbWF0aW9uOiBzaGFrZSAwLjZzO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogMTA7XFxufVxcblxcbkBrZXlmcmFtZXMgc2hha2Uge1xcbiAgMCUsXFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xcbiAgfVxcblxcbiAgMTAlLFxcbiAgMzAlLFxcbiAgNTAlLFxcbiAgNzAlLFxcbiAgOTAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01cHgpO1xcbiAgfVxcblxcbiAgMjAlLFxcbiAgNDAlLFxcbiAgNjAlLFxcbiAgODAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDVweCk7XFxuICB9XFxufVxcblwiLCBcIlwiXSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///10\n')},645:module=>{"use strict";eval('\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = "";\n var needLayer = typeof item[5] !== "undefined";\n if (item[4]) {\n content += "@supports (".concat(item[4], ") {");\n }\n if (item[2]) {\n content += "@media ".concat(item[2], " {");\n }\n if (needLayer) {\n content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += "}";\n }\n if (item[2]) {\n content += "}";\n }\n if (item[4]) {\n content += "}";\n }\n return content;\n }).join("");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === "string") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== "undefined") {\n if (typeof item[5] === "undefined") {\n item[5] = layer;\n } else {\n item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = "".concat(supports);\n } else {\n item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQ1LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzPzI0ZmIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107XG5cbiAgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICB2YXIgbmVlZExheWVyID0gdHlwZW9mIGl0ZW1bNV0gIT09IFwidW5kZWZpbmVkXCI7XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBjb250ZW50ICs9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07XG5cbiAgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgbGlzdC5pID0gZnVuY3Rpb24gaShtb2R1bGVzLCBtZWRpYSwgZGVkdXBlLCBzdXBwb3J0cywgbGF5ZXIpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIHVuZGVmaW5lZF1dO1xuICAgIH1cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2tdWzBdO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBfayA9IDA7IF9rIDwgbW9kdWxlcy5sZW5ndGg7IF9rKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2tdKTtcbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWzVdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobWVkaWEpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN1cHBvcnRzKSB7XG4gICAgICAgIGlmICghaXRlbVs0XSkge1xuICAgICAgICAgIGl0ZW1bNF0gPSBcIlwiLmNvbmNhdChzdXBwb3J0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzRdID0gc3VwcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBsaXN0O1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///645\n')},81:module=>{"use strict";eval("\n\nmodule.exports = function (i) {\n return i[1];\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2JpZy10cmlwLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL25vU291cmNlTWFwcy5qcz8yN2M4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiBpWzFdO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///81\n")},484:function(module){eval('!function(t,e){ true?module.exports=e():0}(this,(function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",f="month",h="quarter",c="year",d="date",l="Invalid Date",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()18 — 20 Mar
\n\n Total: € 1230\n
\n\n \n —\n \n
\n${getTimeDifference(dateFrom, dateTo)}
\n\n € ${basePrice}\n
\nLoading...
\';\n}\nclass NoEventsView extends AbstractView {\n get template() {\n return createNoEventsViewTemplate();\n }\n}\n;// CONCATENATED MODULE: ./src/presenter/board-presenter.js\n\n\n\n\n\n\n\n\nclass BoardPresenter {\n #container = null;\n #eventsModel = null;\n #sortComponent = null;\n #eventsListComponent = new NewEventsListView();\n #eventsList = [];\n #eventPresenters = new Map();\n #currentSortType = SortType.DEFAULT;\n #sourcedBoardEvents = [];\n #findDestinationData = null;\n #getDestinationsData = null;\n #getOffersMapByType = null;\n constructor({\n container,\n eventsModel\n }) {\n this.#container = container;\n this.#eventsModel = eventsModel;\n this.#findDestinationData = this.#eventsModel.findDestinationData;\n this.#getDestinationsData = this.#eventsModel.getDestinationsData;\n this.#getOffersMapByType = this.#eventsModel.getOffersMapByType;\n }\n init() {\n this.#eventsList = [...this.#eventsModel.userEvents];\n this.#sourcedBoardEvents = [...this.#eventsModel.userEvents];\n this.#renderBoard();\n this.#renderSort();\n }\n #renderEvent(inputUserEvent) {\n const eventPresenter = new EventPresenter({\n container: this.#eventsListComponent.element,\n onDataChange: this.#handleEventChange,\n onModeChange: this.#handleModeChange,\n findDestinationData: this.#findDestinationData,\n getDestinationsList: this.#getDestinationsData,\n getOffersMapByType: this.#getOffersMapByType\n });\n eventPresenter.init(inputUserEvent);\n this.#eventPresenters.set(inputUserEvent.id, eventPresenter);\n }\n #renderNoEvents() {\n render(new NoEventsView(), this.#container);\n }\n #sortEvents(sortType) {\n switch (sortType) {\n case SortType.PRICE:\n this.#eventsList.sort(sortEventsPrice);\n break;\n case SortType.TIME:\n this.#eventsList.sort(sortEventsTime);\n break;\n default:\n this.#eventsList = [...this.#sourcedBoardEvents];\n }\n this.#currentSortType = sortType;\n }\n #handleSortTypeChange = sortType => {\n if (sortType === undefined || this.#currentSortType === sortType) {\n return;\n }\n this.#sortEvents(sortType);\n this.#clearEventList();\n this.#renderBoard();\n };\n #renderSort() {\n this.#sortComponent = new NewTripSortView({\n onSortTypeChange: this.#handleSortTypeChange\n });\n render(this.#sortComponent, this.#container, \'AFTERBEGIN\');\n }\n #renderBoard() {\n if (this.#eventsList.length === 0) {\n this.#renderNoEvents();\n return;\n }\n render(this.#eventsListComponent, this.#container);\n for (let i = 0; i < this.#eventsList.length; i++) {\n this.#renderEvent(this.#eventsList[i]);\n }\n }\n #handleEventChange = updatedEvent => {\n this.#eventsList = updateItem(this.#eventsList, updatedEvent);\n this.#sourcedBoardEvents = updateItem(this.#sourcedBoardEvents, updatedEvent);\n this.#eventPresenters.get(updatedEvent.id).init(updatedEvent);\n };\n #handleModeChange = () => {\n this.#eventPresenters.forEach(presenter => presenter.resetView());\n };\n #clearEventList() {\n this.#eventPresenters.forEach(presenter => presenter.destroy());\n this.#eventPresenters.clear();\n }\n}\n;// CONCATENATED MODULE: ./src/utils/filter.js\n\n\nconst filter = {\n [FilterType.EVERYTHING]: userEvents => userEvents,\n [FilterType.FUTURE]: userEvents => userEvents.filter(userEvent => isEventFuture(userEvent.dateFrom)),\n [FilterType.PRESENT]: userEvents => userEvents.filter(userEvent => isEventPresent(userEvent.dateFrom)),\n [FilterType.PAST]: userEvents => userEvents.filter(userEvent => isEventPast(userEvent.dateFrom))\n};\n\n;// CONCATENATED MODULE: ./src/mock/filter.js\n\nfunction generateFilter(userEvents) {\n return Object.entries(filter).map(([filterType, filterEvents]) => ({\n type: filterType,\n count: filterEvents(userEvents).length\n }));\n}\n\n;// CONCATENATED MODULE: ./src/main.js\n\n\n\n\n\n\nconst tripMainContainer = document.querySelector(\'.trip-main\');\nconst tripFiltersContainer = tripMainContainer.querySelector(\'.trip-controls__filters\');\nconst tripEventsContainer = document.querySelector(\'.trip-events\');\nconst eventsModel = new EventsModel();\nconst boardPresenter = new BoardPresenter({\n container: tripEventsContainer,\n eventsModel\n});\nconst filters = generateFilter(eventsModel.userEvents);\nrender(new NewTripInfoView(), tripMainContainer, \'AFTERBEGIN\');\nrender(new NewTripFiltersView({\n filters\n}), tripFiltersContainer);\nboardPresenter.init();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjgwLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3JJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzlJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy9mcmFtZXdvcmsvdmlldy9hYnN0cmFjdC12aWV3LmNzcz9kZmE2Iiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL2ZyYW1ld29yay92aWV3L2Fic3RyYWN0LXZpZXcuanM/NDA3MyIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy9mcmFtZXdvcmsvcmVuZGVyLmpzP2I1MWUiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvdXRpbHMvY29tbW9uLmpzP2M4YzMiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvY29uc3QuanM/ZGZiNiIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL25vZGVfbW9kdWxlcy9uYW5vaWQvaW5kZXguYnJvd3Nlci5qcz9iMzgxIiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL21vY2svZXZlbnRzLmpzPzY0OGQiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvbW9jay9vZmZlcnMuanM/OGQyOSIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy9tb2NrL2Rlc3RpbmF0aW9ucy5qcz9kOGJmIiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL21vZGVsL2V2ZW50cy1jb25uZWN0b3IuanM/YWRlOCIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy9tb2RlbC9ldmVudHMtbW9kZWwuanM/ZTA5OSIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy92aWV3L25ldy10cmlwLWluZm8tdmlldy5qcz8yZjU4Iiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL3ZpZXcvbmV3LWZpbHRlcnMtdmlldy5qcz80MzM1Iiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL3ZpZXcvbmV3LXNvcnQtY29udGFpbmVyLXZpZXcuanM/N2U0OSIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy92aWV3L25ldy1ldmVudHMtbGlzdC12aWV3LmpzPzY4MGQiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvdXRpbHMvZXZlbnQuanM/MmE1MSIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy92aWV3L25ldy1ldmVudHMtaXRlbS12aWV3LmpzPzc0YmMiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvZnJhbWV3b3JrL3ZpZXcvYWJzdHJhY3Qtc3RhdGVmdWwtdmlldy5qcz9jNDliIiwid2VicGFjazovL2JpZy10cmlwLy4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2VzbS90eXBlcy9vcHRpb25zLmpzPzljNTAiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZXNtL2wxMG4vZGVmYXVsdC5qcz80ZTQ1Iiwid2VicGFjazovL2JpZy10cmlwLy4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2VzbS91dGlscy9pbmRleC5qcz8zNzdhIiwid2VicGFjazovL2JpZy10cmlwLy4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2VzbS91dGlscy9kb20uanM/NjJhNiIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9lc20vdXRpbHMvZm9ybWF0dGluZy5qcz84MmMwIiwid2VicGFjazovL2JpZy10cmlwLy4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2VzbS91dGlscy9kYXRlcy5qcz8wYjQ2Iiwid2VicGFjazovL2JpZy10cmlwLy4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2VzbS9pbmRleC5qcz81ZjYwIiwid2VicGFjazovL2JpZy10cmlwLy4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5taW4uY3NzP2UwM2IiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvdmlldy9uZXctZXZlbnQtZWRpdC1lbGVtZW50LXZpZXcuanM/NDQ1MCIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy9wcmVzZW50ZXIvZXZlbnQtcHJlc2VudGVyLmpzP2M1ZjUiLCJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9zcmMvdmlldy9uby1ldmVudHMtdmlldy5qcz8yOTg3Iiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL3ByZXNlbnRlci9ib2FyZC1wcmVzZW50ZXIuanM/NWE2MCIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy91dGlscy9maWx0ZXIuanM/ZWZhNiIsIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy9tb2NrL2ZpbHRlci5qcz85NDJiIiwid2VicGFjazovL2JpZy10cmlwLy4vc3JjL21haW4uanM/ODEzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vYWJzdHJhY3Qtdmlldy5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2Fic3RyYWN0LXZpZXcuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCB9IGZyb20gJy4uL3JlbmRlci5qcyc7XG5pbXBvcnQgJy4vYWJzdHJhY3Qtdmlldy5jc3MnO1xuXG4vKiogQGNvbnN0IHtzdHJpbmd9INCa0LvQsNGB0YEsINGA0LXQsNC70LjQt9GD0Y7RidC40Lkg0Y3RhNGE0LXQutGCIFwi0L/QvtC60LDRh9C40LLQsNC90LjRjyDQs9C+0LvQvtCy0L7QuVwiICovXG5jb25zdCBTSEFLRV9DTEFTU19OQU1FID0gJ3NoYWtlJztcblxuLyoqIEBjb25zdCB7bnVtYmVyfSDQktGA0LXQvNGPINCw0L3QuNC80LDRhtC40Lgg0LIg0LzQuNC70LvQuNGB0LXQutGD0L3QtNCw0YUgKi9cbmNvbnN0IFNIQUtFX0FOSU1BVElPTl9USU1FT1VUID0gNjAwO1xuXG4vKipcbiAqINCQ0LHRgdGC0YDQsNC60YLQvdGL0Lkg0LrQu9Cw0YHRgSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRj1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBYnN0cmFjdFZpZXcge1xuICAvKiogQHR5cGUge0hUTUxFbGVtZW50fG51bGx9INCt0LvQtdC80LXQvdGCINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPICovXG4gICNlbGVtZW50ID0gbnVsbDtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKG5ldy50YXJnZXQgPT09IEFic3RyYWN0Vmlldykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGluc3RhbnRpYXRlIEFic3RyYWN0Vmlldywgb25seSBjb25jcmV0ZSBvbmUuJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqINCT0LXRgtGC0LXRgCDQtNC70Y8g0L/QvtC70YPRh9C10L3QuNGPINGN0LvQtdC80LXQvdGC0LBcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fSDQrdC70LXQvNC10L3RgiDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRj1xuICAgKi9cbiAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLiNlbGVtZW50KSB7XG4gICAgICB0aGlzLiNlbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0aGlzLnRlbXBsYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI2VsZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICog0JPQtdGC0YLQtdGAINC00LvRjyDQv9C+0LvRg9GH0LXQvdC40Y8g0YDQsNC30LzQtdGC0LrQuCDRjdC70LXQvNC10L3RgtCwXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSDQoNCw0LfQvNC10YLQutCwINGN0LvQtdC80LXQvdGC0LAg0LIg0LLQuNC00LUg0YHRgtGA0L7QutC4XG4gICAqL1xuICBnZXQgdGVtcGxhdGUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBYnN0cmFjdCBtZXRob2Qgbm90IGltcGxlbWVudGVkOiBnZXQgdGVtcGxhdGUnKTtcbiAgfVxuXG4gIC8qKiDQnNC10YLQvtC0INC00LvRjyDRg9C00LDQu9C10L3QuNGPINGN0LvQtdC80LXQvdGC0LAgKi9cbiAgcmVtb3ZlRWxlbWVudCgpIHtcbiAgICB0aGlzLiNlbGVtZW50ID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiDQnNC10YLQvtC0LCDRgNC10LDQu9C40LfRg9GO0YnQuNC5INGN0YTRhNC10LrRgiBcItC/0L7QutCw0YfQuNCy0LDQvdC40Y8g0LPQvtC70L7QstC+0LlcIlxuICAgKiBAcGFyYW0ge3NoYWtlQ2FsbGJhY2t9IFtjYWxsYmFja10g0KTRg9C90LrRhtC40Y8sINC60L7RgtC+0YDQsNGPINCx0YPQtNC10YIg0LLRi9C30LLQsNC90LAg0L/QvtGB0LvQtSDQt9Cw0LLQtdGA0YjQtdC90LjRjyDQsNC90LjQvNCw0YbQuNC4XG4gICAqL1xuICBzaGFrZShjYWxsYmFjaykge1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFNIQUtFX0NMQVNTX05BTUUpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoU0hBS0VfQ0xBU1NfTkFNRSk7XG4gICAgICBjYWxsYmFjaz8uKCk7XG4gICAgfSwgU0hBS0VfQU5JTUFUSU9OX1RJTUVPVVQpO1xuICB9XG59XG5cbi8qKlxuICog0KTRg9C90LrRhtC40Y8sINC60L7RgtC+0YDQsNGPINCx0YPQtNC10YIg0LLRi9C30LLQsNC90LAg0LzQtdGC0L7QtNC+0Lwgc2hha2Ug0L/QvtGB0LvQtSDQt9Cw0LLQtdGA0YjQtdC90LjRjyDQsNC90LjQvNCw0YbQuNC4XG4gKiBAY2FsbGJhY2sgc2hha2VDYWxsYmFja1xuICovIiwiaW1wb3J0IEFic3RyYWN0VmlldyBmcm9tICcuL3ZpZXcvYWJzdHJhY3Qtdmlldy5qcyc7XG5cbi8qKiBAZW51bSB7c3RyaW5nfVxuICogQkVGT1JFQkVHSU4gLSDQstGB0YLQsNCy0LjRgtGMINGN0LvQtdC80LXQvdGCINC/0LXRgNC10LQg0L3QsNGH0LDQu9C+0Lwg0LrQvtC90YLQtdC50L3QtdGA0LBcbiAqIEFGVEVSQkVHSU4gLSDQstGB0YLQsNCy0LjRgtGMINGN0LvQtdC80LXQvdGCINGB0YDQsNC30YMg0L/QvtGB0LvQtSDQvdCw0YfQsNC70LAg0LrQvtC90YLQtdC50L3QtdGA0LBcbiAqIEJFRk9SRUVORCAtINCy0YHRgtCw0LLQuNGC0Ywg0Y3Qu9C10LzQtdC90YIg0L/QtdGA0LXQtCDQutC+0L3RhtC+0Lwg0LrQvtC90YLQtdC50L3QtdGA0LBcbiAqIEFGVEVSRU5EIC0g0LLRgdGC0LDQstC40YLRjCDRjdC70LXQvNC10L3RgiDRgdGA0LDQt9GDINC/0L7RgdC70LUg0LrQvtC90YbQsCDQutC+0L3RgtC10LnQvdC10YDQsFxuKi9cbmNvbnN0IFJlbmRlclBvc2l0aW9uID0ge1xuICBCRUZPUkVCRUdJTjogJ2JlZm9yZWJlZ2luJyxcbiAgQUZURVJCRUdJTjogJ2FmdGVyYmVnaW4nLFxuICBCRUZPUkVFTkQ6ICdiZWZvcmVlbmQnLFxuICBBRlRFUkVORDogJ2FmdGVyZW5kJ1xufTtcblxuLyoqXG4gKiDQpNGD0L3QutGG0LjRjyDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDRjdC70LXQvNC10L3RgtCwINC90LAg0L7RgdC90L7QstC1INGA0LDQt9C80LXRgtC60LhcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZSDQoNCw0LfQvNC10YLQutCwINCyINCy0LjQtNC1INGB0YLRgNC+0LrQuFxuICogQHJldHVybnMge0hUTUxFbGVtZW50fSDQodC+0LfQtNCw0L3QvdGL0Lkg0Y3Qu9C10LzQtdC90YJcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0ZW1wbGF0ZSkge1xuICBjb25zdCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG5ld0VsZW1lbnQuaW5uZXJIVE1MID0gdGVtcGxhdGU7XG4gIHJldHVybiBuZXdFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkO1xufVxuXG4vKipcbiAqINCk0YPQvdC60YbQuNGPINC00LvRjyDQvtGC0YDQuNGB0L7QstC60Lgg0Y3Qu9C10LzQtdC90YLQsFxuICogQHBhcmFtIHtBYnN0cmFjdFZpZXd9IGNvbXBvbmVudCDQmtC+0LzQv9C+0L3QtdC90YIsINC60L7RgtC+0YDRi9C5INC00L7Qu9C20LXQvSDQsdGL0Lsg0L7RgtGA0LjRgdC+0LLQsNC9XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIg0K3Qu9C10LzQtdC90YIg0LIg0LrQvtGC0L7RgNC+0Lwg0LHRg9C00LXRgiDQvtGC0YDQuNGB0L7QstCw0L0g0LrQvtC80L/QvtC90LXQvdGCXG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhY2Ug0J/QvtC30LjRhtC40Y8g0LrQvtC80L/QvtC90LXQvdGC0LAg0L7RgtC90L7RgdC40YLQtdC70YzQvdC+INC60L7QvdGC0LXQudC90LXRgNCwLiDQn9C+INGD0LzQvtC70YfQsNC90LjRjiAtIGBiZWZvcmVlbmRgXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcihjb21wb25lbnQsIGNvbnRhaW5lciwgcGxhY2UgPSBSZW5kZXJQb3NpdGlvbi5CRUZPUkVFTkQpIHtcbiAgaWYgKCEoY29tcG9uZW50IGluc3RhbmNlb2YgQWJzdHJhY3RWaWV3KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIHJlbmRlciBvbmx5IGNvbXBvbmVudHMnKTtcbiAgfVxuICBpZiAoY29udGFpbmVyID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb250YWluZXIgZWxlbWVudCBkb2VzblxcJ3QgZXhpc3QnKTtcbiAgfVxuICBjb250YWluZXIuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KHBsYWNlLCBjb21wb25lbnQuZWxlbWVudCk7XG59XG5cbi8qKlxuICog0KTRg9C90LrRhtC40Y8g0LTQu9GPINC30LDQvNC10L3RiyDQvtC00L3QvtCz0L4g0LrQvtC80L/QvtC90LXQvdGC0LAg0L3QsCDQtNGA0YPQs9C+0LlcbiAqIEBwYXJhbSB7QWJzdHJhY3RWaWV3fSBuZXdDb21wb25lbnQg0JrQvtC80L/QvtC90LXQvdGCLCDQutC+0YLQvtGA0YvQuSDQvdGD0LbQvdC+INC/0L7QutCw0LfQsNGC0YxcbiAqIEBwYXJhbSB7QWJzdHJhY3RWaWV3fSBvbGRDb21wb25lbnQg0JrQvtC80L/QvtC90LXQvdGCLCDQutC+0YLQvtGA0YvQuSDQvdGD0LbQvdC+INGB0LrRgNGL0YLRjFxuICovXG5mdW5jdGlvbiByZXBsYWNlKG5ld0NvbXBvbmVudCwgb2xkQ29tcG9uZW50KSB7XG4gIGlmICghKG5ld0NvbXBvbmVudCBpbnN0YW5jZW9mIEFic3RyYWN0VmlldyAmJiBvbGRDb21wb25lbnQgaW5zdGFuY2VvZiBBYnN0cmFjdFZpZXcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gcmVwbGFjZSBvbmx5IGNvbXBvbmVudHMnKTtcbiAgfVxuICBjb25zdCBuZXdFbGVtZW50ID0gbmV3Q29tcG9uZW50LmVsZW1lbnQ7XG4gIGNvbnN0IG9sZEVsZW1lbnQgPSBvbGRDb21wb25lbnQuZWxlbWVudDtcbiAgY29uc3QgcGFyZW50ID0gb2xkRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICBpZiAocGFyZW50ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgZWxlbWVudCBkb2VzblxcJ3QgZXhpc3QnKTtcbiAgfVxuICBwYXJlbnQucmVwbGFjZUNoaWxkKG5ld0VsZW1lbnQsIG9sZEVsZW1lbnQpO1xufVxuXG4vKipcbiAqINCk0YPQvdC60YbQuNGPINC00LvRjyDRg9C00LDQu9C10L3QuNGPINC60L7QvNC/0L7QvdC10L3RgtCwXG4gKiBAcGFyYW0ge0Fic3RyYWN0Vmlld30gY29tcG9uZW50INCa0L7QvNC/0L7QvdC10L3Rgiwg0LrQvtGC0L7RgNGL0Lkg0L3Rg9C20L3QviDRg9C00LDQu9C40YLRjFxuICovXG5mdW5jdGlvbiByZW1vdmUoY29tcG9uZW50KSB7XG4gIGlmIChjb21wb25lbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCEoY29tcG9uZW50IGluc3RhbmNlb2YgQWJzdHJhY3RWaWV3KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIHJlbW92ZSBvbmx5IGNvbXBvbmVudHMnKTtcbiAgfVxuICBjb21wb25lbnQuZWxlbWVudC5yZW1vdmUoKTtcbiAgY29tcG9uZW50LnJlbW92ZUVsZW1lbnQoKTtcbn1cbmV4cG9ydCB7IFJlbmRlclBvc2l0aW9uLCBjcmVhdGVFbGVtZW50LCByZW5kZXIsIHJlcGxhY2UsIHJlbW92ZSB9OyIsImNvbnN0IEVTQ0FQRV9LRVlfQ09ERSA9IDI3O1xuY29uc3QgaXNFc2NhcGVLZXkgPSBldnQgPT4gZXZ0LmtleUNvZGUgPT09IEVTQ0FQRV9LRVlfQ09ERTtcbmNvbnN0IGdldFJhbmRvbU51bWJlciA9IChmcm9tLCB0bykgPT4ge1xuICBjb25zdCBsb3dlciA9IE1hdGguY2VpbChNYXRoLm1pbihmcm9tLCB0bykpO1xuICBjb25zdCB1cHBlciA9IE1hdGguZmxvb3IoTWF0aC5tYXgoZnJvbSwgdG8pKTtcbiAgY29uc3QgcmVzdWx0ID0gTWF0aC5yYW5kb20oKSAqICh1cHBlciAtIGxvd2VyICsgMSkgKyBsb3dlcjtcbiAgcmV0dXJuIE1hdGguZmxvb3IocmVzdWx0KTtcbn07XG5jb25zdCBnZXRSYW5kb21TdHJpbmcgPSAoZGVzaXJlZFN0cmluZ0xlbmd0aCA9IDEpID0+IHtcbiAgY29uc3QgcHJpbWVyID0gJyBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XG4gIGxldCByYW5kb21TdHJpbmcgPSAnJztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXNpcmVkU3RyaW5nTGVuZ3RoOyBpKyspIHtcbiAgICByYW5kb21TdHJpbmcgKz0gcHJpbWVyLmNoYXJBdChnZXRSYW5kb21OdW1iZXIoMCwgcHJpbWVyLmxlbmd0aCAtIDEpKTtcbiAgfVxuICByZXR1cm4gcmFuZG9tU3RyaW5nO1xufTtcbmNvbnN0IGdldFJhbmRvbUJvb2xlYW4gPSAoKSA9PiBNYXRoLnJhbmRvbSgpID49IDAuNTtcbmNvbnN0IGdldFJhbmRvbUFycmF5RWxlbWVudCA9IGl0ZW1zID0+IGl0ZW1zW2dldFJhbmRvbU51bWJlcigwLCBpdGVtcy5sZW5ndGggLSAxKV07XG5jb25zdCBnZXRSYW5kb21EYXRlID0gKCkgPT4ge1xuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IG9uZVllYXJGcm9tTm93ID0gbmV3IERhdGUoKTtcbiAgb25lWWVhckZyb21Ob3cuc2V0RnVsbFllYXIodG9kYXkuZ2V0RnVsbFllYXIoKSArIDEpO1xuICBjb25zdCByYW5kb21UaW1lID0gTWF0aC5yYW5kb20oKSAqIChvbmVZZWFyRnJvbU5vdyAtIHRvZGF5KSArIHRvZGF5LmdldFRpbWUoKTtcbiAgcmV0dXJuIG5ldyBEYXRlKHJhbmRvbVRpbWUpO1xufTtcbmNvbnN0IGNvbnZlcnRUb0NhbWVsQ2FzZSA9IHN0ciA9PiBzdHIucmVwbGFjZSgvKF9cXHcpL2csIG1hdGNoID0+IG1hdGNoWzFdLnRvVXBwZXJDYXNlKCkpO1xuY29uc3QgY29udmVydEtleXNUb0NhbWVsQ2FzZSA9IGl0ZW1zID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcChjb252ZXJ0S2V5c1RvQ2FtZWxDYXNlKTtcbiAgfVxuICBpZiAoaXRlbXMgIT09IG51bGwgJiYgdHlwZW9mIGl0ZW1zID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpdGVtcykucmVkdWNlKChuZXdJdGVtcywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBuZXdJdGVtc1tjb252ZXJ0VG9DYW1lbENhc2Uoa2V5KV0gPSBjb252ZXJ0S2V5c1RvQ2FtZWxDYXNlKHZhbHVlKTtcbiAgICAgIHJldHVybiBuZXdJdGVtcztcbiAgICB9LCB7fSk7XG4gIH1cbiAgcmV0dXJuIGl0ZW1zO1xufTtcbmNvbnN0IHVwZGF0ZUl0ZW0gPSAoaXRlbXMsIHVwZGF0ZSkgPT4gaXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5pZCA9PT0gdXBkYXRlLmlkID8gdXBkYXRlIDogaXRlbSk7XG5leHBvcnQgeyB1cGRhdGVJdGVtLCBnZXRSYW5kb21OdW1iZXIsIGdldFJhbmRvbVN0cmluZywgZ2V0UmFuZG9tQm9vbGVhbiwgZ2V0UmFuZG9tRGF0ZSwgZ2V0UmFuZG9tQXJyYXlFbGVtZW50LCBjb252ZXJ0S2V5c1RvQ2FtZWxDYXNlLCBpc0VzY2FwZUtleSB9OyIsImNvbnN0IEVWRU5UU19UWVBFUyA9IFsnVGF4aScsICdCdXMnLCAnVHJhaW4nLCAnU2hpcCcsICdEcml2ZScsICdGbGlnaHQnLCAnQ2hlY2staW4nLCAnU2lnaHRzZWVpbmcnLCAnUmVzdGF1cmFudCddO1xuY29uc3QgQ0lUSUVTID0gWydOZXcgWW9yaycsICdUb2t5bycsICdQYXJpcycsICdMb25kb24nLCAnU3lkbmV5JywgJ0JlcmxpbicsICdSaW8gZGUgSmFuZWlybycsICdNb3Njb3cnLCAnQ2Fpcm8nLCAnQ2FwZSBUb3duJ107XG5jb25zdCBTRU5URU5DRVMgPSBbJ0xvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVsaXQuIENyYXMgYWxpcXVldCB2YXJpdXMgbWFnbmEsIG5vbiBwb3J0YSBsaWd1bGEgZmV1Z2lhdCBlZ2V0LiAnLCAnRnVzY2UgdHJpc3RpcXVlIGZlbGlzIGF0IGZlcm1lbnR1bSBwaGFyZXRyYS4gJywgJ0FsaXF1YW0gaWQgb3JjaSB1dCBsZWN0dXMgdmFyaXVzIHZpdmVycmEuICcsICdOdWxsYW0gbnVuYyBleCwgY29udmFsbGlzIHNlZCBmaW5pYnVzIGVnZXQsIHNvbGxpY2l0dWRpbiBlZ2V0IGFudGUuICcsICdQaGFzZWxsdXMgZXJvcyBtYXVyaXMsIGNvbmRpbWVudHVtIHNlZCBuaWJoIHZpdGFlLCBzb2RhbGVzIGVmZmljaXR1ciBpcHN1bS4gJywgJ1NlZCBibGFuZGl0LCBlcm9zIHZlbCBhbGlxdWFtIGZhdWNpYnVzLCBwdXJ1cyBleCBldWlzbW9kIGRpYW0sIGV1IGx1Y3R1cyBudW5jIGFudGUgdXQgZHVpLiAnLCAnU2VkIHNlZCBuaXNpIHNlZCBhdWd1ZSBjb252YWxsaXMgc3VzY2lwaXQgaW4gc2VkIGZlbGlzLiAnLCAnQWxpcXVhbSBlcmF0IHZvbHV0cGF0LiAnLCAnTnVuYyBmZXJtZW50dW0gdG9ydG9yIGFjIHBvcnRhIGRhcGlidXMuICcsICdJbiBydXRydW0gYWMgcHVydXMgc2l0IGFtZXQgdGVtcHVzLiddO1xuY29uc3QgRmlsdGVyVHlwZSA9IHtcbiAgRVZFUllUSElORzogJ2V2ZXJ5dGhpbmcnLFxuICBGVVRVUkU6ICdmdXR1cmUnLFxuICBQUkVTRU5UOiAncHJlc2VudCcsXG4gIFBBU1Q6ICdwYXN0J1xufTtcbmNvbnN0IFNvcnRUeXBlID0ge1xuICBERUZBVUxUOiAnZGVmYXVsdCcsXG4gIFBSSUNFOiAncHJpY2UnLFxuICBUSU1FOiAndGltZSdcbn07XG5leHBvcnQgeyBFVkVOVFNfVFlQRVMsIENJVElFUywgU0VOVEVOQ0VTLCBGaWx0ZXJUeXBlLCBTb3J0VHlwZSB9OyIsImV4cG9ydCB7IHVybEFscGhhYmV0IH0gZnJvbSAnLi91cmwtYWxwaGFiZXQvaW5kZXguanMnXG5leHBvcnQgbGV0IHJhbmRvbSA9IGJ5dGVzID0+IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpKVxuZXhwb3J0IGxldCBjdXN0b21SYW5kb20gPSAoYWxwaGFiZXQsIGRlZmF1bHRTaXplLCBnZXRSYW5kb20pID0+IHtcbiAgbGV0IG1hc2sgPSAoMiA8PCAoTWF0aC5sb2coYWxwaGFiZXQubGVuZ3RoIC0gMSkgLyBNYXRoLkxOMikpIC0gMVxuICBsZXQgc3RlcCA9IC1+KCgxLjYgKiBtYXNrICogZGVmYXVsdFNpemUpIC8gYWxwaGFiZXQubGVuZ3RoKVxuICByZXR1cm4gKHNpemUgPSBkZWZhdWx0U2l6ZSkgPT4ge1xuICAgIGxldCBpZCA9ICcnXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCBieXRlcyA9IGdldFJhbmRvbShzdGVwKVxuICAgICAgbGV0IGogPSBzdGVwXG4gICAgICB3aGlsZSAoai0tKSB7XG4gICAgICAgIGlkICs9IGFscGhhYmV0W2J5dGVzW2pdICYgbWFza10gfHwgJydcbiAgICAgICAgaWYgKGlkLmxlbmd0aCA9PT0gc2l6ZSkgcmV0dXJuIGlkXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5leHBvcnQgbGV0IGN1c3RvbUFscGhhYmV0ID0gKGFscGhhYmV0LCBzaXplID0gMjEpID0+XG4gIGN1c3RvbVJhbmRvbShhbHBoYWJldCwgc2l6ZSwgcmFuZG9tKVxuZXhwb3J0IGxldCBuYW5vaWQgPSAoc2l6ZSA9IDIxKSA9PlxuICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KHNpemUpKS5yZWR1Y2UoKGlkLCBieXRlKSA9PiB7XG4gICAgYnl0ZSAmPSA2M1xuICAgIGlmIChieXRlIDwgMzYpIHtcbiAgICAgIGlkICs9IGJ5dGUudG9TdHJpbmcoMzYpXG4gICAgfSBlbHNlIGlmIChieXRlIDwgNjIpIHtcbiAgICAgIGlkICs9IChieXRlIC0gMjYpLnRvU3RyaW5nKDM2KS50b1VwcGVyQ2FzZSgpXG4gICAgfSBlbHNlIGlmIChieXRlID4gNjIpIHtcbiAgICAgIGlkICs9ICctJ1xuICAgIH0gZWxzZSB7XG4gICAgICBpZCArPSAnXydcbiAgICB9XG4gICAgcmV0dXJuIGlkXG4gIH0sICcnKVxuIiwiaW1wb3J0IHsgZ2V0UmFuZG9tQXJyYXlFbGVtZW50LCBnZXRSYW5kb21OdW1iZXIsIGdldFJhbmRvbUJvb2xlYW4sIGdldFJhbmRvbURhdGUgfSBmcm9tICcuLi91dGlscy9jb21tb24nO1xuaW1wb3J0IHsgRVZFTlRTX1RZUEVTIH0gZnJvbSAnLi4vY29uc3QnO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJztcbmNvbnN0IFRJTUVfU0tJUCA9IDEyNTtcbmNvbnN0IGdldE9mZmVySWRzQnlUeXBlID0gKG9mZmVyc01hcCwgdHlwZSkgPT4ge1xuICBjb25zdCBvZmZlcklkcyA9IFtdO1xuICBpZiAob2ZmZXJzTWFwLmhhcyh0eXBlKSkge1xuICAgIGNvbnN0IG9mZmVyc0J5SWQgPSBvZmZlcnNNYXAuZ2V0KHR5cGUpO1xuICAgIG9mZmVyc0J5SWQuZm9yRWFjaCgoXywgaWQpID0+IHtcbiAgICAgIG9mZmVySWRzLnB1c2goaWQpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBvZmZlcklkcztcbn07XG5jb25zdCBnZXRSYW5kb21FdmVudCA9IChkYXRlLCBkZXN0aW5hdGlvbnNMaXN0LCBvZmZlcnNNYXApID0+IHtcbiAgY29uc3QgZmlyc3REYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gIGNvbnN0IHNlY29uZERhdGUgPSBuZXcgRGF0ZShmaXJzdERhdGUpO1xuICBjb25zdCBkZXN0aW5hdGlvbnNJZHMgPSBkZXN0aW5hdGlvbnNMaXN0Lm1hcChkZXN0aW5hdGlvbiA9PiBkZXN0aW5hdGlvbi5pZCk7XG4gIHNlY29uZERhdGUuc2V0TWludXRlcyhmaXJzdERhdGUuZ2V0TWludXRlcygpICsgVElNRV9TS0lQKTtcbiAgY29uc3QgcmFuZG9tVHlwZSA9IGdldFJhbmRvbUFycmF5RWxlbWVudChFVkVOVFNfVFlQRVMpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHJhbmRvbUV2ZW50ID0ge1xuICAgICdpZCc6IG5hbm9pZCgpLFxuICAgICdiYXNlX3ByaWNlJzogZ2V0UmFuZG9tTnVtYmVyKDQ5OSwgNDk5OSksXG4gICAgJ2RhdGVfZnJvbSc6IGZpcnN0RGF0ZS50b0lTT1N0cmluZygpLFxuICAgICdkYXRlX3RvJzogc2Vjb25kRGF0ZS50b0lTT1N0cmluZygpLFxuICAgICdkZXN0aW5hdGlvbic6IGdldFJhbmRvbUFycmF5RWxlbWVudChkZXN0aW5hdGlvbnNJZHMpLFxuICAgICdpc19mYXZvcml0ZSc6IGdldFJhbmRvbUJvb2xlYW4oKSxcbiAgICAnb2ZmZXJzJzogZ2V0T2ZmZXJJZHNCeVR5cGUob2ZmZXJzTWFwLCByYW5kb21UeXBlKSxcbiAgICAndHlwZSc6IHJhbmRvbVR5cGVcbiAgfTtcbiAgcmV0dXJuIHJhbmRvbUV2ZW50O1xufTtcbmNvbnN0IGdldFJhbmRvbUV2ZW50cyA9IChjb3VudCwgZGVzdGluYXRpb25zTGlzdCwgb2ZmZXJzTWFwKSA9PiB7XG4gIGNvbnN0IGRhdGUgPSBnZXRSYW5kb21EYXRlKCk7XG4gIGNvbnN0IGV2ZW50cyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBldmVudHMucHVzaChnZXRSYW5kb21FdmVudChkYXRlLCBkZXN0aW5hdGlvbnNMaXN0LCBvZmZlcnNNYXApKTtcbiAgICBkYXRlLnNldE1pbnV0ZXMoZGF0ZS5nZXRNaW51dGVzKCkgKyBUSU1FX1NLSVApO1xuICB9XG4gIHJldHVybiBldmVudHM7XG59O1xuZXhwb3J0IHsgZ2V0UmFuZG9tRXZlbnRzIH07IiwiaW1wb3J0IHsgZ2V0UmFuZG9tTnVtYmVyIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJztcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCc7XG5pbXBvcnQgeyBFVkVOVFNfVFlQRVMgfSBmcm9tICcuLi9jb25zdCc7XG5jb25zdCBPRkZFUlNfQ09VTlQgPSAzO1xuY29uc3QgZ2V0UmFuZG9tT2ZmZXIgPSBpbmRleCA9PiB7XG4gIGNvbnN0IG9mZmVyID0ge1xuICAgICdpZCc6IG5hbm9pZCgpLFxuICAgICd0aXRsZSc6IGBVcGdyYWRlICR7aW5kZXh9YCxcbiAgICAncHJpY2UnOiBnZXRSYW5kb21OdW1iZXIoMTksIDQ5OSlcbiAgfTtcbiAgcmV0dXJuIG9mZmVyO1xufTtcbmNvbnN0IGdldFJhbmRvbU9mZmVyc09mU2FtZVR5cGUgPSB0eXBlID0+IHtcbiAgY29uc3Qgb2ZmZXJzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgT0ZGRVJTX0NPVU5UOyBpKyspIHtcbiAgICBvZmZlcnMucHVzaChnZXRSYW5kb21PZmZlcihpKSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAndHlwZSc6IHR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICAnb2ZmZXJzJzogb2ZmZXJzXG4gIH07XG59O1xuY29uc3QgZ2V0UmFuZG9tT2ZmZXJzID0gKCkgPT4ge1xuICBjb25zdCByYW5kb21PZmZlcnMgPSBFVkVOVFNfVFlQRVMubWFwKHR5cGUgPT4gZ2V0UmFuZG9tT2ZmZXJzT2ZTYW1lVHlwZSh0eXBlKSk7XG4gIHJldHVybiByYW5kb21PZmZlcnM7XG59O1xuZXhwb3J0IHsgZ2V0UmFuZG9tT2ZmZXJzIH07IiwiaW1wb3J0IHsgZ2V0UmFuZG9tQXJyYXlFbGVtZW50LCBnZXRSYW5kb21OdW1iZXIgfSBmcm9tICcuLi91dGlscy9jb21tb24nO1xuaW1wb3J0IHsgU0VOVEVOQ0VTLCBDSVRJRVMgfSBmcm9tICcuLi9jb25zdCc7XG5jb25zdCBnZXRSYW5kb21EZXNjcmlwdGlvbiA9ICgpID0+IHtcbiAgbGV0IHJhbmRvbURlc2NyaXB0aW9uID0gJyc7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZ2V0UmFuZG9tTnVtYmVyKDEsIDUpOyBpKyspIHtcbiAgICByYW5kb21EZXNjcmlwdGlvbiArPSBnZXRSYW5kb21BcnJheUVsZW1lbnQoU0VOVEVOQ0VTKTtcbiAgfVxuICByZXR1cm4gcmFuZG9tRGVzY3JpcHRpb247XG59O1xuY29uc3QgZ2V0UmFuZG9tRGVzdGluYXRpb24gPSBpZCA9PiB7XG4gIGNvbnN0IGRlc3RpbmF0aW9uID0ge1xuICAgICdpZCc6IGAke2lkfWZhNWNiNzUtYTFmZS00Yjc3LWE4M2MtMGU1MjhlOTEwZTA0YCxcbiAgICAnZGVzY3JpcHRpb24nOiBnZXRSYW5kb21EZXNjcmlwdGlvbigpLFxuICAgICduYW1lJzogQ0lUSUVTW2lkXSxcbiAgICAncGljdHVyZXMnOiBbe1xuICAgICAgJ3NyYyc6IGBodHRwczovL2xvcmVtZmxpY2tyLmNvbS8yNDgvMTUyP3JhbmRvbT0ke2dldFJhbmRvbU51bWJlcigxLCAxMDApfWAsXG4gICAgICAnZGVzY3JpcHRpb24nOiBnZXRSYW5kb21EZXNjcmlwdGlvbigpXG4gICAgfV1cbiAgfTtcbiAgcmV0dXJuIGRlc3RpbmF0aW9uO1xufTtcbmNvbnN0IGdldFJhbmRvbURlc3RpbmF0aW9ucyA9ICgpID0+IHtcbiAgY29uc3QgZGVzdGluYXRpb25zID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgQ0lUSUVTLmxlbmd0aDsgaSsrKSB7XG4gICAgZGVzdGluYXRpb25zLnB1c2goZ2V0UmFuZG9tRGVzdGluYXRpb24oaSkpO1xuICB9XG4gIHJldHVybiBkZXN0aW5hdGlvbnM7XG59O1xuZXhwb3J0IHsgZ2V0UmFuZG9tRGVzdGluYXRpb25zIH07IiwiaW1wb3J0IHsgZ2V0UmFuZG9tRXZlbnRzIH0gZnJvbSAnLi4vbW9jay9ldmVudHMnO1xuaW1wb3J0IHsgZ2V0UmFuZG9tT2ZmZXJzIH0gZnJvbSAnLi4vbW9jay9vZmZlcnMnO1xuaW1wb3J0IHsgZ2V0UmFuZG9tRGVzdGluYXRpb25zIH0gZnJvbSAnLi4vbW9jay9kZXN0aW5hdGlvbnMnO1xuaW1wb3J0IHsgY29udmVydEtleXNUb0NhbWVsQ2FzZSB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbic7XG5jb25zdCBFVkVOVFNfQ09VTlQgPSA1O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRzQ29ubmVjdG9yIHtcbiAgI2Rlc3RpbmF0aW9uc0xpc3QgPSBjb252ZXJ0S2V5c1RvQ2FtZWxDYXNlKGdldFJhbmRvbURlc3RpbmF0aW9ucygpKTtcbiAgI29mZmVyc01hcCA9IHRoaXMuI2luaXRpYWxpemVPZmZlcnNNYXAoY29udmVydEtleXNUb0NhbWVsQ2FzZShnZXRSYW5kb21PZmZlcnMoKSkpO1xuICAjY2xvbmVkT2ZmZXJzTWFwID0gc3RydWN0dXJlZENsb25lKHRoaXMuI29mZmVyc01hcCk7XG4gICNldmVudHNMaXN0ID0gY29udmVydEtleXNUb0NhbWVsQ2FzZShnZXRSYW5kb21FdmVudHMoRVZFTlRTX0NPVU5ULCB0aGlzLiNkZXN0aW5hdGlvbnNMaXN0LCB0aGlzLiNjbG9uZWRPZmZlcnNNYXApKTtcbiAgI2luaXRpYWxpemVPZmZlcnNNYXAoZGF0YSkge1xuICAgIHJldHVybiBkYXRhLnJlZHVjZSgob2ZmZXJzTWFwLCB7XG4gICAgICB0eXBlLFxuICAgICAgb2ZmZXJzXG4gICAgfSkgPT4ge1xuICAgICAgY29uc3Qgb2ZmZXJzQnlJZCA9IG5ldyBNYXAob2ZmZXJzLm1hcCgoe1xuICAgICAgICBpZCxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHByaWNlXG4gICAgICB9KSA9PiBbaWQsIHtcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHByaWNlLFxuICAgICAgICBpc0FjdGl2ZTogZmFsc2VcbiAgICAgIH1dKSk7XG4gICAgICBvZmZlcnNNYXAuc2V0KHR5cGUsIG9mZmVyc0J5SWQpO1xuICAgICAgcmV0dXJuIG9mZmVyc01hcDtcbiAgICB9LCBuZXcgTWFwKCkpO1xuICB9XG4gICN1cGRhdGVPZmZlcnNBY3Rpdml0eSgpIHtcbiAgICB0aGlzLiNldmVudHNMaXN0LmZvckVhY2goKHtcbiAgICAgIG9mZmVyczogZXZlbnRPZmZlcnMsXG4gICAgICB0eXBlXG4gICAgfSkgPT4ge1xuICAgICAgY29uc3Qgb2ZmZXJzQnlJZCA9IHRoaXMuI2Nsb25lZE9mZmVyc01hcC5nZXQodHlwZSk7XG4gICAgICBldmVudE9mZmVycy5mb3JFYWNoKG9mZmVySWQgPT4ge1xuICAgICAgICBjb25zdCBvZmZlciA9IG9mZmVyc0J5SWQuZ2V0KG9mZmVySWQpO1xuICAgICAgICBpZiAob2ZmZXIpIHtcbiAgICAgICAgICBvZmZlci5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuI3VwZGF0ZU9mZmVyc0FjdGl2aXR5KCk7XG4gIH1cbiAgI2dldE9mZmVyQnlJZCh0eXBlLCBpZCkge1xuICAgIGNvbnN0IG9mZmVyID0gdGhpcy4jY2xvbmVkT2ZmZXJzTWFwLmdldCh0eXBlKT8uZ2V0KGlkKTtcbiAgICByZXR1cm4gb2ZmZXIgPyB7XG4gICAgICBpZCxcbiAgICAgIC4uLm9mZmVyXG4gICAgfSA6IG51bGw7XG4gIH1cbiAgI2NyZWF0ZVVzZXJFdmVudHMoKSB7XG4gICAgY29uc3QgZGVzdGluYXRpb25zTWFwID0gbmV3IE1hcCh0aGlzLiNkZXN0aW5hdGlvbnNMaXN0Lm1hcCgoe1xuICAgICAgaWQsXG4gICAgICAuLi5yZXN0XG4gICAgfSkgPT4gW2lkLCByZXN0XSkpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuI2V2ZW50c0xpc3QubWFwKGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uRGF0YSA9IGRlc3RpbmF0aW9uc01hcC5nZXQoZXZlbnQuZGVzdGluYXRpb24pO1xuICAgICAgY29uc3Qgb2ZmZXJzTWFwID0gbmV3IE1hcChldmVudC5vZmZlcnMubWFwKG9mZmVySWQgPT4gdGhpcy4jZ2V0T2ZmZXJCeUlkKGV2ZW50LnR5cGUsIG9mZmVySWQpKS5maWx0ZXIoQm9vbGVhbikubWFwKG9mZmVyID0+IFtvZmZlci5pZCwgb2ZmZXJdKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgZGVzdGluYXRpb246IHtcbiAgICAgICAgICBpZDogZGVzdGluYXRpb25EYXRhLmlkLFxuICAgICAgICAgIC4uLmRlc3RpbmF0aW9uRGF0YVxuICAgICAgICB9LFxuICAgICAgICBvZmZlcnM6IG9mZmVyc01hcFxuICAgICAgfTtcbiAgICB9KS5yZWR1Y2UoKGFjYywgZXZlbnQpID0+IHtcbiAgICAgIGFjYy5zZXQoZXZlbnQuaWQsIGV2ZW50KTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3IE1hcCgpKS52YWx1ZXMoKSk7XG4gIH1cbiAgZ2V0IHVzZXJFdmVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NyZWF0ZVVzZXJFdmVudHMoKTtcbiAgfVxuICBnZXQgZGVzdGluYXRpb25zTGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy4jZGVzdGluYXRpb25zTGlzdDtcbiAgfVxuICBnZXQgb2ZmZXJzTWFwKCkge1xuICAgIHJldHVybiB0aGlzLiNvZmZlcnNNYXA7XG4gIH1cbn0iLCJpbXBvcnQgRXZlbnRzQ29ubmVjdG9yIGZyb20gJy4vZXZlbnRzLWNvbm5lY3Rvcic7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudHNNb2RlbCB7XG4gICNFdmVudHNDb25uZWN0b3IgPSBuZXcgRXZlbnRzQ29ubmVjdG9yKCk7XG4gICNldmVudHNMaXN0ID0gdGhpcy4jRXZlbnRzQ29ubmVjdG9yLnVzZXJFdmVudHM7XG4gICNkZXN0aW5hdGlvbnNMaXN0ID0gdGhpcy4jRXZlbnRzQ29ubmVjdG9yLmRlc3RpbmF0aW9uc0xpc3Q7XG4gICNvZmZlcnNNYXAgPSB0aGlzLiNFdmVudHNDb25uZWN0b3Iub2ZmZXJzTWFwO1xuICBnZXQgdXNlckV2ZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzTGlzdDtcbiAgfVxuICBnZXREZXN0aW5hdGlvbnNEYXRhID0gKCkgPT4gdGhpcy4jZGVzdGluYXRpb25zTGlzdDtcbiAgZmluZERlc3RpbmF0aW9uRGF0YSA9IGRlc3RpbmF0aW9uSWQgPT4gdGhpcy4jZGVzdGluYXRpb25zTGlzdC5maW5kKGRlc3RpbmF0aW9uID0+IGRlc3RpbmF0aW9uLmlkID09PSBkZXN0aW5hdGlvbklkKTtcbiAgZ2V0T2ZmZXJzTWFwQnlUeXBlID0gdHlwZSA9PiB0aGlzLiNvZmZlcnNNYXAuZ2V0KHR5cGUpIHx8IG51bGw7XG59IiwiaW1wb3J0IEFic3RyYWN0VmlldyBmcm9tICcuLi9mcmFtZXdvcmsvdmlldy9hYnN0cmFjdC12aWV3JztcbmZ1bmN0aW9uIGNyZWF0ZU5ld1RyaXBJbmZvVGVtcGxhdGUoKSB7XG4gIHJldHVybiBgPHNlY3Rpb24gY2xhc3M9XCJ0cmlwLW1haW5fX3RyaXAtaW5mbyAgdHJpcC1pbmZvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJpcC1pbmZvX19tYWluXCI+XG4gICAgICAgICAgICAgIDxoMSBjbGFzcz1cInRyaXAtaW5mb19fdGl0bGVcIj5BbXN0ZXJkYW0gJm1kYXNoOyBDaGFtb25peCAmbWRhc2g7IEdlbmV2YTwvaDE+XG5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0cmlwLWluZm9fX2RhdGVzXCI+MTgmbmJzcDsmbWRhc2g7Jm5ic3A7MjAgTWFyPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidHJpcC1pbmZvX19jb3N0XCI+XG4gICAgICAgICAgICAgIFRvdGFsOiAmZXVybzsmbmJzcDs8c3BhbiBjbGFzcz1cInRyaXAtaW5mb19fY29zdC12YWx1ZVwiPjEyMzA8L3NwYW4+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9zZWN0aW9uPmA7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXdUcmlwSW5mb1ZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXcge1xuICBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld1RyaXBJbmZvVGVtcGxhdGUoKTtcbiAgfVxufSIsImltcG9ydCBBYnN0cmFjdFZpZXcgZnJvbSAnLi4vZnJhbWV3b3JrL3ZpZXcvYWJzdHJhY3Qtdmlldyc7XG5jb25zdCBjcmVhdGVGaWx0ZXJJdGVtVGVtcGxhdGUgPSAoZmlsdGVyLCBpc0NoZWNrZWQpID0+IHtcbiAgY29uc3Qge1xuICAgIHR5cGUsXG4gICAgY291bnRcbiAgfSA9IGZpbHRlcjtcbiAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwidHJpcC1maWx0ZXJzX19maWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJmaWx0ZXItJHt0eXBlfVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRyaXAtZmlsdGVyc19fZmlsdGVyLWlucHV0IHZpc3VhbGx5LWhpZGRlblwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInRyaXAtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHt0eXBlfVwiXG4gICAgICAgICAgICAgICAgICAke2lzQ2hlY2tlZCA/ICdjaGVja2VkJyA6ICcnfVxuICAgICAgICAgICAgICAgICAgJHtjb3VudCA9PT0gMCA/ICdkaXNhYmxlZCcgOiAnJ30+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0cmlwLWZpbHRlcnNfX2ZpbHRlci1sYWJlbFwiIGZvcj1cImZpbHRlci0ke3R5cGV9XCI+JHt0eXBlfTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbn07XG5jb25zdCBjcmVhdGVOZXdUcmlwRmlsdGVyc1RlbXBsYXRlID0gZmlsdGVySXRlbXMgPT4ge1xuICBjb25zdCBmaWx0ZXJJdGVtc1RlbXBsYXRlID0gZmlsdGVySXRlbXMubWFwKChmaWx0ZXIsIGluZGV4KSA9PiBjcmVhdGVGaWx0ZXJJdGVtVGVtcGxhdGUoZmlsdGVyLCBpbmRleCA9PT0gMCkpLmpvaW4oJycpO1xuICByZXR1cm4gYDxmb3JtIGNsYXNzPVwidHJpcC1maWx0ZXJzXCIgYWN0aW9uPVwiI1wiIG1ldGhvZD1cImdldFwiPlxuICAke2ZpbHRlckl0ZW1zVGVtcGxhdGV9XG4gIDxidXR0b24gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIiB0eXBlPVwic3VibWl0XCI+QWNjZXB0IGZpbHRlcjwvYnV0dG9uPjwvZm9ybT5gO1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ld1RyaXBGaWx0ZXJzVmlldyBleHRlbmRzIEFic3RyYWN0VmlldyB7XG4gICNmaWx0ZXJzID0gbnVsbDtcbiAgY29uc3RydWN0b3IoZmlsdGVycykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jZmlsdGVycyA9IGZpbHRlcnM7XG4gIH1cbiAgZ2V0IHRlbXBsYXRlKCkge1xuICAgIHJldHVybiBjcmVhdGVOZXdUcmlwRmlsdGVyc1RlbXBsYXRlKHRoaXMuI2ZpbHRlcnMuZmlsdGVycyk7XG4gIH1cbn0iLCJpbXBvcnQgQWJzdHJhY3RWaWV3IGZyb20gJy4uL2ZyYW1ld29yay92aWV3L2Fic3RyYWN0LXZpZXcnO1xuaW1wb3J0IHsgU29ydFR5cGUgfSBmcm9tICcuLi9jb25zdCc7XG5mdW5jdGlvbiBjcmVhdGVOZXdUcmlwU29ydFRlbXBsYXRlKCkge1xuICByZXR1cm4gYDxmb3JtIGNsYXNzPVwidHJpcC1ldmVudHNfX3RyaXAtc29ydCAgdHJpcC1zb3J0XCIgYWN0aW9uPVwiI1wiIG1ldGhvZD1cImdldFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyaXAtc29ydF9faXRlbSAgdHJpcC1zb3J0X19pdGVtLS1kYXlcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGlkPVwic29ydC1kYXlcIiBjbGFzcz1cInRyaXAtc29ydF9faW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0cmlwLXNvcnRcIiB2YWx1ZT1cInNvcnQtZGF5XCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidHJpcC1zb3J0X19idG5cIiBmb3I9XCJzb3J0LWRheVwiIGRhdGEtc29ydC10eXBlPVwiJHtTb3J0VHlwZS5ERUZBVUxUfVwiPkRheTwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyaXAtc29ydF9faXRlbSAgdHJpcC1zb3J0X19pdGVtLS1ldmVudFwiPlxuICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJzb3J0LWV2ZW50XCIgY2xhc3M9XCJ0cmlwLXNvcnRfX2lucHV0ICB2aXN1YWxseS1oaWRkZW5cIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwidHJpcC1zb3J0XCIgdmFsdWU9XCJzb3J0LWV2ZW50XCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRyaXAtc29ydF9fYnRuXCIgZm9yPVwic29ydC1ldmVudFwiPkV2ZW50PC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJpcC1zb3J0X19pdGVtICB0cmlwLXNvcnRfX2l0ZW0tLXRpbWVcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGlkPVwic29ydC10aW1lXCIgY2xhc3M9XCJ0cmlwLXNvcnRfX2lucHV0ICB2aXN1YWxseS1oaWRkZW5cIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwidHJpcC1zb3J0XCIgdmFsdWU9XCJzb3J0LXRpbWVcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidHJpcC1zb3J0X19idG5cIiBmb3I9XCJzb3J0LXRpbWVcIiBkYXRhLXNvcnQtdHlwZT1cIiR7U29ydFR5cGUuVElNRX1cIj5UaW1lPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJpcC1zb3J0X19pdGVtICB0cmlwLXNvcnRfX2l0ZW0tLXByaWNlXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cInNvcnQtcHJpY2VcIiBjbGFzcz1cInRyaXAtc29ydF9faW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0cmlwLXNvcnRcIiB2YWx1ZT1cInNvcnQtcHJpY2VcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidHJpcC1zb3J0X19idG5cIiBmb3I9XCJzb3J0LXByaWNlXCIgZGF0YS1zb3J0LXR5cGU9XCIke1NvcnRUeXBlLlBSSUNFfVwiPlByaWNlPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJpcC1zb3J0X19pdGVtICB0cmlwLXNvcnRfX2l0ZW0tLW9mZmVyXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cInNvcnQtb2ZmZXJcIiBjbGFzcz1cInRyaXAtc29ydF9faW5wdXQgIHZpc3VhbGx5LWhpZGRlblwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0cmlwLXNvcnRcIiB2YWx1ZT1cInNvcnQtb2ZmZXJcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidHJpcC1zb3J0X19idG5cIiBmb3I9XCJzb3J0LW9mZmVyXCI+T2ZmZXJzPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9ybT5gO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV3VHJpcFNvcnRWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3IHtcbiAgI2hhbmRsZVNvcnRUeXBlQ2hhbmdlID0gbnVsbDtcbiAgY29uc3RydWN0b3Ioe1xuICAgIG9uU29ydFR5cGVDaGFuZ2VcbiAgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jaGFuZGxlU29ydFR5cGVDaGFuZ2UgPSBvblNvcnRUeXBlQ2hhbmdlO1xuICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuI3NvcnRUeXBlQ2hhbmdlSGFuZGxlcik7XG4gIH1cbiAgZ2V0IHRlbXBsYXRlKCkge1xuICAgIHJldHVybiBjcmVhdGVOZXdUcmlwU29ydFRlbXBsYXRlKCk7XG4gIH1cbiAgI3NvcnRUeXBlQ2hhbmdlSGFuZGxlciA9IGV2dCA9PiB7XG4gICAgaWYgKGV2dC50YXJnZXQudGFnTmFtZSAhPT0gJ0xBQkVMJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLiNoYW5kbGVTb3J0VHlwZUNoYW5nZShldnQudGFyZ2V0LmRhdGFzZXQuc29ydFR5cGUpO1xuICB9O1xufSIsImltcG9ydCBBYnN0cmFjdFZpZXcgZnJvbSAnLi4vZnJhbWV3b3JrL3ZpZXcvYWJzdHJhY3Qtdmlldyc7XG5mdW5jdGlvbiBjcmVhdGVOZXdUcmlwRXZlbnRzTGlzdFRlbXBsYXRlKCkge1xuICByZXR1cm4gJzx1bCBjbGFzcz1cInRyaXAtZXZlbnRzX19saXN0XCI+PC91bD4nO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV3RXZlbnRzTGlzdFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXcge1xuICBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld1RyaXBFdmVudHNMaXN0VGVtcGxhdGUoKTtcbiAgfVxufSIsImltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5jb25zdCBodW1hbml6ZUR1ZURhdGUgPSAoZHVlRGF0ZSwgZGF0ZUZvcm1hdCkgPT4gZHVlRGF0ZSA/IGRheWpzKGR1ZURhdGUpLmZvcm1hdChkYXRlRm9ybWF0KSA6ICcnO1xuY29uc3QgaXNFdmVudEZ1dHVyZSA9IGRhdGVGcm9tID0+IGRhdGVGcm9tICYmIGRheWpzKCkuaXNBZnRlcihkYXRlRnJvbSwgJ0QnKTtcbmNvbnN0IGlzRXZlbnRQcmVzZW50ID0gKGRhdGVGcm9tLCBkYXRlVG8pID0+IHtcbiAgY29uc3Qgbm93ID0gZGF5anMoKTtcbiAgcmV0dXJuIGRhdGVGcm9tICYmIGRhdGVUbyAmJiBub3cuaXNBZnRlcihkYXRlRnJvbSwgJ0QnKSAmJiBub3cuaXNCZWZvcmUoZGF0ZVRvLCAnRCcpIHx8IG5vdy5pc1NhbWUoZGF0ZVRvLCAnRCcpO1xufTtcbmNvbnN0IGlzRXZlbnRQYXN0ID0gZGF0ZVRvID0+IGRhdGVUbyAmJiBkYXlqcygpLmlzQWZ0ZXIoZGF0ZVRvLCAnRCcpO1xuY29uc3Qgc29ydEV2ZW50c1ByaWNlID0gKGV2ZW50QSwgZXZlbnRCKSA9PiBldmVudEIuYmFzZVByaWNlIC0gZXZlbnRBLmJhc2VQcmljZTtcbmNvbnN0IHNvcnRFdmVudHNUaW1lID0gKGV2ZW50QSwgZXZlbnRCKSA9PiB7XG4gIGNvbnN0IGRhdGVGcm9tQSA9IGRheWpzKGV2ZW50QS5kYXRlRnJvbSk7XG4gIGNvbnN0IGRhdGVUb0EgPSBkYXlqcyhldmVudEEuZGF0ZVRvKTtcbiAgY29uc3QgZGF0ZUZyb21CID0gZGF5anMoZXZlbnRCLmRhdGVGcm9tKTtcbiAgY29uc3QgZGF0ZVRvQiA9IGRheWpzKGV2ZW50Qi5kYXRlVG8pO1xuICBjb25zdCBkdXJhdGlvbkEgPSBkYXRlVG9BLmRpZmYoZGF0ZUZyb21BKTtcbiAgY29uc3QgZHVyYXRpb25CID0gZGF0ZVRvQi5kaWZmKGRhdGVGcm9tQik7XG4gIHJldHVybiBkdXJhdGlvbkIgLSBkdXJhdGlvbkE7XG59O1xuZXhwb3J0IHsgaHVtYW5pemVEdWVEYXRlLCBpc0V2ZW50RnV0dXJlLCBpc0V2ZW50UHJlc2VudCwgaXNFdmVudFBhc3QsIHNvcnRFdmVudHNQcmljZSwgc29ydEV2ZW50c1RpbWUgfTsiLCJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IEFic3RyYWN0VmlldyBmcm9tICcuLi9mcmFtZXdvcmsvdmlldy9hYnN0cmFjdC12aWV3JztcbmltcG9ydCB7IGh1bWFuaXplRHVlRGF0ZSB9IGZyb20gJy4uL3V0aWxzL2V2ZW50JztcbmNvbnN0IFRJTUVfUEFUVEVSTiA9ICdISDptbSc7XG5jb25zdCBIVU1BTklaRURfRVZFTlRfREFURV9QQVRURVJOID0gJ01NTSBERCc7XG5jb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICh0aW1lU3RhcnQsIHRpbWVFbmQpID0+IHtcbiAgY29uc3Qgc3RhcnQgPSBkYXlqcyh0aW1lU3RhcnQpO1xuICBjb25zdCBlbmQgPSBkYXlqcyh0aW1lRW5kKTtcbiAgY29uc3QgZGlmZmVyZW5jZUluRGF5cyA9IGVuZC5kaWZmKHN0YXJ0LCAnZGF5Jyk7XG4gIGNvbnN0IGRpZmZlcmVuY2VJbkhvdXJzID0gZW5kLmRpZmYoc3RhcnQsICdob3VyJykgJSAyNDtcbiAgY29uc3QgZGlmZmVyZW5jZUluTWludXRlcyA9IGVuZC5kaWZmKHN0YXJ0LCAnbWludXRlJykgJSA2MDtcbiAgaWYgKGRpZmZlcmVuY2VJbkRheXMgPiAwKSB7XG4gICAgcmV0dXJuIGAke1N0cmluZyhkaWZmZXJlbmNlSW5EYXlzKS5wYWRTdGFydCgyLCAnMCcpfUQgJHtTdHJpbmcoZGlmZmVyZW5jZUluSG91cnMpLnBhZFN0YXJ0KDIsICcwJyl9SCAke1N0cmluZyhkaWZmZXJlbmNlSW5NaW51dGVzKS5wYWRTdGFydCgyLCAnMCcpfU1gO1xuICB9IGVsc2UgaWYgKGRpZmZlcmVuY2VJbkhvdXJzID4gMCkge1xuICAgIHJldHVybiBgJHtTdHJpbmcoZGlmZmVyZW5jZUluSG91cnMpLnBhZFN0YXJ0KDIsICcwJyl9SCAke1N0cmluZyhkaWZmZXJlbmNlSW5NaW51dGVzKS5wYWRTdGFydCgyLCAnMCcpfU1gO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBgJHtTdHJpbmcoZGlmZmVyZW5jZUluTWludXRlcykucGFkU3RhcnQoMiwgJzAnKX1NYDtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU5ld09mZmVyID0gb2ZmZXIgPT4ge1xuICBjb25zdCB7XG4gICAgdGl0bGUsXG4gICAgcHJpY2VcbiAgfSA9IG9mZmVyO1xuICByZXR1cm4gYDxsaSBjbGFzcz1cImV2ZW50X19vZmZlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV2ZW50X19vZmZlci10aXRsZVwiPiR7dGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAmcGx1czsmZXVybzsmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldmVudF9fb2ZmZXItcHJpY2VcIj4ke3ByaWNlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGk+YDtcbn07XG5jb25zdCBjcmVhdGVPZmZlcnMgPSBvZmZlcnMgPT4ge1xuICBsZXQgb2ZmZXJzSFRNTCA9ICcnO1xuICBvZmZlcnMuZm9yRWFjaChvZmZlciA9PiB7XG4gICAgb2ZmZXJzSFRNTCArPSBjcmVhdGVOZXdPZmZlcihvZmZlcik7XG4gIH0pO1xuICByZXR1cm4gb2ZmZXJzSFRNTDtcbn07XG5jb25zdCBjcmVhdGVOZXdUcmlwRXZlbnRzSXRlbVRlbXBsYXRlID0gZXZlbnREYXRhID0+IHtcbiAgY29uc3Qge1xuICAgIGJhc2VQcmljZSxcbiAgICBkYXRlRnJvbSxcbiAgICBkYXRlVG8sXG4gICAgaXNGYXZvcml0ZSxcbiAgICB0eXBlLFxuICAgIG9mZmVycyxcbiAgICBkZXN0aW5hdGlvblxuICB9ID0gZXZlbnREYXRhO1xuICBjb25zdCBmYXZvcml0ZUJ1dHRvbkNsYXNzTmFtZSA9IGlzRmF2b3JpdGUgPyAnZXZlbnRfX2Zhdm9yaXRlLWJ0bi0tYWN0aXZlJyA6ICcnO1xuICBjb25zdCBodW1hbml6ZWRFdmVudERhdGUgPSBodW1hbml6ZUR1ZURhdGUoZGF0ZUZyb20sIEhVTUFOSVpFRF9FVkVOVF9EQVRFX1BBVFRFUk4pO1xuICBjb25zdCBodW1hbml6ZWRTdGFydFRpbWUgPSBodW1hbml6ZUR1ZURhdGUoZGF0ZUZyb20sIFRJTUVfUEFUVEVSTik7XG4gIGNvbnN0IGh1bWFuaXplZEVuZFRpbWUgPSBodW1hbml6ZUR1ZURhdGUoZGF0ZVRvLCBUSU1FX1BBVFRFUk4pO1xuICByZXR1cm4gYDxsaSBjbGFzcz1cInRyaXAtZXZlbnRzX19pdGVtXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudFwiPlxuICAgICAgICAgICAgICAgIDx0aW1lIGNsYXNzPVwiZXZlbnRfX2RhdGVcIiBkYXRldGltZT1cIiR7ZGF0ZUZyb219XCI+JHtodW1hbml6ZWRFdmVudERhdGV9PC90aW1lPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fdHlwZVwiPlxuICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImV2ZW50X190eXBlLWljb25cIiB3aWR0aD1cIjQyXCIgaGVpZ2h0PVwiNDJcIiBzcmM9XCJpbWcvaWNvbnMvJHt0eXBlfS5wbmdcIiBhbHQ9XCJFdmVudCB0eXBlIGljb25cIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJldmVudF9fdGl0bGVcIj4ke3R5cGV9ICR7ZGVzdGluYXRpb24ubmFtZX08L2gzPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fc2NoZWR1bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZXZlbnRfX3RpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRpbWUgY2xhc3M9XCJldmVudF9fc3RhcnQtdGltZVwiIGRhdGV0aW1lPVwiJHtkYXRlRnJvbX1cIj4ke2h1bWFuaXplZFN0YXJ0VGltZX08L3RpbWU+XG4gICAgICAgICAgICAgICAgICAgICZtZGFzaDtcbiAgICAgICAgICAgICAgICAgICAgPHRpbWUgY2xhc3M9XCJldmVudF9fZW5kLXRpbWVcIiBkYXRldGltZT1cIiR7ZGF0ZVRvfVwiPiR7aHVtYW5pemVkRW5kVGltZX08L3RpbWU+XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImV2ZW50X19kdXJhdGlvblwiPiR7Z2V0VGltZURpZmZlcmVuY2UoZGF0ZUZyb20sIGRhdGVUbyl9PC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZXZlbnRfX3ByaWNlXCI+XG4gICAgICAgICAgICAgICAgICAmZXVybzsmbmJzcDs8c3BhbiBjbGFzcz1cImV2ZW50X19wcmljZS12YWx1ZVwiPiR7YmFzZVByaWNlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+T2ZmZXJzOjwvaDQ+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZXZlbnRfX3NlbGVjdGVkLW9mZmVyc1wiPlxuICAgICAgICAgICAgICAgICR7Y3JlYXRlT2ZmZXJzKG9mZmVycyl9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZXZlbnRfX2Zhdm9yaXRlLWJ0biAke2Zhdm9yaXRlQnV0dG9uQ2xhc3NOYW1lfVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+QWRkIHRvIGZhdm9yaXRlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImV2ZW50X19mYXZvcml0ZS1pY29uXCIgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjI4XCIgdmlld0JveD1cIjAgMCAyOCAyOFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDIxbC04LjIyODk5IDQuMzI2MiAxLjU3MTU5LTkuMTYzMUwuNjg1MjA5IDkuNjczNzYgOS44ODU1IDguMzM2ODggMTQgMGw0LjExNDUgOC4zMzY4OCA5LjIwMDMgMS4zMzY4OC02LjY1NzQgNi40ODkzNCAxLjU3MTYgOS4xNjMxTDE0IDIxelwiLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImV2ZW50X19yb2xsdXAtYnRuXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5PcGVuIGV2ZW50PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5gO1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ld0V2ZW50c0l0ZW1WaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3IHtcbiAgI2V2ZW50RGF0YSA9IG51bGw7XG4gICNoYW5kbGVDbGljayA9IG51bGw7XG4gICNyb2xsdXBCdXR0b24gPSBudWxsO1xuICAjaGFuZGxlRmF2b3JpdGVDbGljayA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICB1c2VyRXZlbnQsXG4gICAgb25DbGljayxcbiAgICBvbkZhdm9yaXRlQ2xpY2tcbiAgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jZXZlbnREYXRhID0gdXNlckV2ZW50O1xuICAgIHRoaXMuI2hhbmRsZUNsaWNrID0gb25DbGljaztcbiAgICB0aGlzLiNoYW5kbGVGYXZvcml0ZUNsaWNrID0gb25GYXZvcml0ZUNsaWNrO1xuICAgIHRoaXMuI3JvbGx1cEJ1dHRvbiA9IHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZXZlbnRfX3JvbGx1cC1idG4nKTtcbiAgICB0aGlzLiNyb2xsdXBCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLiNjbGlja0hhbmRsZXIpO1xuICAgIHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZXZlbnRfX2Zhdm9yaXRlLWljb24nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuI2Zhdm9yaXRlQ2xpY2tIYW5kbGVyKTtcbiAgfVxuICBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld1RyaXBFdmVudHNJdGVtVGVtcGxhdGUodGhpcy4jZXZlbnREYXRhKTtcbiAgfVxuICAjY2xpY2tIYW5kbGVyID0gZXZ0ID0+IHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLiNoYW5kbGVDbGljaygpO1xuICB9O1xuICByZW1vdmVFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLiNyb2xsdXBCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLiNjbGlja0hhbmRsZXIpO1xuICB9XG4gICNmYXZvcml0ZUNsaWNrSGFuZGxlciA9IGV2dCA9PiB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy4jaGFuZGxlRmF2b3JpdGVDbGljaygpO1xuICB9O1xufSIsImltcG9ydCBBYnN0cmFjdFZpZXcgZnJvbSAnLi9hYnN0cmFjdC12aWV3LmpzJztcblxuLyoqXG4gKiDQkNCx0YHRgtGA0LDQutGC0L3Ri9C5INC60LvQsNGB0YEg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0YEg0YHQvtGB0YLQvtGP0L3QuNC10LxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWJzdHJhY3RTdGF0ZWZ1bFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXcge1xuICAvKiogQHR5cGUge09iamVjdH0g0J7QsdGK0LXQutGCINGB0L7RgdGC0L7Rj9C90LjRjyAqL1xuICBfc3RhdGUgPSB7fTtcblxuICAvKipcbiAgICog0JzQtdGC0L7QtCDQtNC70Y8g0L7QsdC90L7QstC70LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPINC4INC/0LXRgNC10YDQuNGB0L7QstC60Lgg0Y3Qu9C10LzQtdC90YLQsFxuICAgKiBAcGFyYW0ge09iamVjdH0gdXBkYXRlINCe0LHRitC10LrRgiDRgSDQvtCx0L3QvtCy0LvRkdC90L3QvtC5INGH0LDRgdGC0YzRjiDRgdC+0YHRgtC+0Y/QvdC40Y9cbiAgICovXG4gIHVwZGF0ZUVsZW1lbnQodXBkYXRlKSB7XG4gICAgaWYgKCF1cGRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc2V0U3RhdGUodXBkYXRlKTtcbiAgICB0aGlzLiNyZXJlbmRlckVsZW1lbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDQnNC10YLQvtC0INC00LvRjyDQstC+0YHRgdGC0LDQvdC+0LLQu9C10L3QuNGPINC+0LHRgNCw0LHQvtGC0YfQuNC60L7QsiDQv9C+0YHQu9C1INC/0LXRgNC10YDQuNGB0L7QstC60Lgg0Y3Qu9C10LzQtdC90YLQsFxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIF9yZXN0b3JlSGFuZGxlcnMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBYnN0cmFjdCBtZXRob2Qgbm90IGltcGxlbWVudGVkOiByZXN0b3JlSGFuZGxlcnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDQnNC10YLQvtC0INC00LvRjyDQvtCx0L3QvtCy0LvQtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40Y9cbiAgICogQHBhcmFtIHtPYmplY3R9IHVwZGF0ZSDQntCx0YrQtdC60YIg0YEg0L7QsdC90L7QstC70ZHQvdC90L7QuSDRh9Cw0YHRgtGM0Y4g0YHQvtGB0YLQvtGP0L3QuNGPXG4gICAqL1xuICBfc2V0U3RhdGUodXBkYXRlKSB7XG4gICAgdGhpcy5fc3RhdGUgPSBzdHJ1Y3R1cmVkQ2xvbmUoe1xuICAgICAgLi4udGhpcy5fc3RhdGUsXG4gICAgICAuLi51cGRhdGVcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiDQnNC10YLQvtC0INC00LvRjyDQv9C10YDQtdGA0LjRgdC+0LLQutC4INGN0LvQtdC80LXQvdGC0LAgKi9cbiAgI3JlcmVuZGVyRWxlbWVudCgpIHtcbiAgICBjb25zdCBwcmV2RWxlbWVudCA9IHRoaXMuZWxlbWVudDtcbiAgICBjb25zdCBwYXJlbnQgPSBwcmV2RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgIHRoaXMucmVtb3ZlRWxlbWVudCgpO1xuICAgIGNvbnN0IG5ld0VsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG4gICAgcGFyZW50LnJlcGxhY2VDaGlsZChuZXdFbGVtZW50LCBwcmV2RWxlbWVudCk7XG4gICAgdGhpcy5fcmVzdG9yZUhhbmRsZXJzKCk7XG4gIH1cbn0iLCJleHBvcnQgdmFyIEhPT0tTID0gW1xuICAgIFwib25DaGFuZ2VcIixcbiAgICBcIm9uQ2xvc2VcIixcbiAgICBcIm9uRGF5Q3JlYXRlXCIsXG4gICAgXCJvbkRlc3Ryb3lcIixcbiAgICBcIm9uS2V5RG93blwiLFxuICAgIFwib25Nb250aENoYW5nZVwiLFxuICAgIFwib25PcGVuXCIsXG4gICAgXCJvblBhcnNlQ29uZmlnXCIsXG4gICAgXCJvblJlYWR5XCIsXG4gICAgXCJvblZhbHVlVXBkYXRlXCIsXG4gICAgXCJvblllYXJDaGFuZ2VcIixcbiAgICBcIm9uUHJlQ2FsZW5kYXJQb3NpdGlvblwiLFxuXTtcbmV4cG9ydCB2YXIgZGVmYXVsdHMgPSB7XG4gICAgX2Rpc2FibGU6IFtdLFxuICAgIGFsbG93SW5wdXQ6IGZhbHNlLFxuICAgIGFsbG93SW52YWxpZFByZWxvYWQ6IGZhbHNlLFxuICAgIGFsdEZvcm1hdDogXCJGIGosIFlcIixcbiAgICBhbHRJbnB1dDogZmFsc2UsXG4gICAgYWx0SW5wdXRDbGFzczogXCJmb3JtLWNvbnRyb2wgaW5wdXRcIixcbiAgICBhbmltYXRlOiB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJNU0lFXCIpID09PSAtMSxcbiAgICBhcmlhRGF0ZUZvcm1hdDogXCJGIGosIFlcIixcbiAgICBhdXRvRmlsbERlZmF1bHRUaW1lOiB0cnVlLFxuICAgIGNsaWNrT3BlbnM6IHRydWUsXG4gICAgY2xvc2VPblNlbGVjdDogdHJ1ZSxcbiAgICBjb25qdW5jdGlvbjogXCIsIFwiLFxuICAgIGRhdGVGb3JtYXQ6IFwiWS1tLWRcIixcbiAgICBkZWZhdWx0SG91cjogMTIsXG4gICAgZGVmYXVsdE1pbnV0ZTogMCxcbiAgICBkZWZhdWx0U2Vjb25kczogMCxcbiAgICBkaXNhYmxlOiBbXSxcbiAgICBkaXNhYmxlTW9iaWxlOiBmYWxzZSxcbiAgICBlbmFibGVTZWNvbmRzOiBmYWxzZSxcbiAgICBlbmFibGVUaW1lOiBmYWxzZSxcbiAgICBlcnJvckhhbmRsZXI6IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihlcnIpO1xuICAgIH0sXG4gICAgZ2V0V2VlazogZnVuY3Rpb24gKGdpdmVuRGF0ZSkge1xuICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGdpdmVuRGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzIC0gKChkYXRlLmdldERheSgpICsgNikgJSA3KSk7XG4gICAgICAgIHZhciB3ZWVrMSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgNCk7XG4gICAgICAgIHJldHVybiAoMSArXG4gICAgICAgICAgICBNYXRoLnJvdW5kKCgoZGF0ZS5nZXRUaW1lKCkgLSB3ZWVrMS5nZXRUaW1lKCkpIC8gODY0MDAwMDAgLVxuICAgICAgICAgICAgICAgIDMgK1xuICAgICAgICAgICAgICAgICgod2VlazEuZ2V0RGF5KCkgKyA2KSAlIDcpKSAvXG4gICAgICAgICAgICAgICAgNykpO1xuICAgIH0sXG4gICAgaG91ckluY3JlbWVudDogMSxcbiAgICBpZ25vcmVkRm9jdXNFbGVtZW50czogW10sXG4gICAgaW5saW5lOiBmYWxzZSxcbiAgICBsb2NhbGU6IFwiZGVmYXVsdFwiLFxuICAgIG1pbnV0ZUluY3JlbWVudDogNSxcbiAgICBtb2RlOiBcInNpbmdsZVwiLFxuICAgIG1vbnRoU2VsZWN0b3JUeXBlOiBcImRyb3Bkb3duXCIsXG4gICAgbmV4dEFycm93OiBcIjxzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB2aWV3Qm94PScwIDAgMTcgMTcnPjxnPjwvZz48cGF0aCBkPSdNMTMuMjA3IDguNDcybC03Ljg1NCA3Ljg1NC0wLjcwNy0wLjcwNyA3LjE0Ni03LjE0Ni03LjE0Ni03LjE0OCAwLjcwNy0wLjcwNyA3Ljg1NCA3Ljg1NHonIC8+PC9zdmc+XCIsXG4gICAgbm9DYWxlbmRhcjogZmFsc2UsXG4gICAgbm93OiBuZXcgRGF0ZSgpLFxuICAgIG9uQ2hhbmdlOiBbXSxcbiAgICBvbkNsb3NlOiBbXSxcbiAgICBvbkRheUNyZWF0ZTogW10sXG4gICAgb25EZXN0cm95OiBbXSxcbiAgICBvbktleURvd246IFtdLFxuICAgIG9uTW9udGhDaGFuZ2U6IFtdLFxuICAgIG9uT3BlbjogW10sXG4gICAgb25QYXJzZUNvbmZpZzogW10sXG4gICAgb25SZWFkeTogW10sXG4gICAgb25WYWx1ZVVwZGF0ZTogW10sXG4gICAgb25ZZWFyQ2hhbmdlOiBbXSxcbiAgICBvblByZUNhbGVuZGFyUG9zaXRpb246IFtdLFxuICAgIHBsdWdpbnM6IFtdLFxuICAgIHBvc2l0aW9uOiBcImF1dG9cIixcbiAgICBwb3NpdGlvbkVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgICBwcmV2QXJyb3c6IFwiPHN2ZyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHZpZXdCb3g9JzAgMCAxNyAxNyc+PGc+PC9nPjxwYXRoIGQ9J001LjIwNyA4LjQ3MWw3LjE0NiA3LjE0Ny0wLjcwNyAwLjcwNy03Ljg1My03Ljg1NCA3Ljg1NC03Ljg1MyAwLjcwNyAwLjcwNy03LjE0NyA3LjE0NnonIC8+PC9zdmc+XCIsXG4gICAgc2hvcnRoYW5kQ3VycmVudE1vbnRoOiBmYWxzZSxcbiAgICBzaG93TW9udGhzOiAxLFxuICAgIHN0YXRpYzogZmFsc2UsXG4gICAgdGltZV8yNGhyOiBmYWxzZSxcbiAgICB3ZWVrTnVtYmVyczogZmFsc2UsXG4gICAgd3JhcDogZmFsc2UsXG59O1xuIiwiZXhwb3J0IHZhciBlbmdsaXNoID0ge1xuICAgIHdlZWtkYXlzOiB7XG4gICAgICAgIHNob3J0aGFuZDogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICAgICAgICBsb25naGFuZDogW1xuICAgICAgICAgICAgXCJTdW5kYXlcIixcbiAgICAgICAgICAgIFwiTW9uZGF5XCIsXG4gICAgICAgICAgICBcIlR1ZXNkYXlcIixcbiAgICAgICAgICAgIFwiV2VkbmVzZGF5XCIsXG4gICAgICAgICAgICBcIlRodXJzZGF5XCIsXG4gICAgICAgICAgICBcIkZyaWRheVwiLFxuICAgICAgICAgICAgXCJTYXR1cmRheVwiLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgbW9udGhzOiB7XG4gICAgICAgIHNob3J0aGFuZDogW1xuICAgICAgICAgICAgXCJKYW5cIixcbiAgICAgICAgICAgIFwiRmViXCIsXG4gICAgICAgICAgICBcIk1hclwiLFxuICAgICAgICAgICAgXCJBcHJcIixcbiAgICAgICAgICAgIFwiTWF5XCIsXG4gICAgICAgICAgICBcIkp1blwiLFxuICAgICAgICAgICAgXCJKdWxcIixcbiAgICAgICAgICAgIFwiQXVnXCIsXG4gICAgICAgICAgICBcIlNlcFwiLFxuICAgICAgICAgICAgXCJPY3RcIixcbiAgICAgICAgICAgIFwiTm92XCIsXG4gICAgICAgICAgICBcIkRlY1wiLFxuICAgICAgICBdLFxuICAgICAgICBsb25naGFuZDogW1xuICAgICAgICAgICAgXCJKYW51YXJ5XCIsXG4gICAgICAgICAgICBcIkZlYnJ1YXJ5XCIsXG4gICAgICAgICAgICBcIk1hcmNoXCIsXG4gICAgICAgICAgICBcIkFwcmlsXCIsXG4gICAgICAgICAgICBcIk1heVwiLFxuICAgICAgICAgICAgXCJKdW5lXCIsXG4gICAgICAgICAgICBcIkp1bHlcIixcbiAgICAgICAgICAgIFwiQXVndXN0XCIsXG4gICAgICAgICAgICBcIlNlcHRlbWJlclwiLFxuICAgICAgICAgICAgXCJPY3RvYmVyXCIsXG4gICAgICAgICAgICBcIk5vdmVtYmVyXCIsXG4gICAgICAgICAgICBcIkRlY2VtYmVyXCIsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICBkYXlzSW5Nb250aDogWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLFxuICAgIGZpcnN0RGF5T2ZXZWVrOiAwLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudGgpIHtcbiAgICAgICAgdmFyIHMgPSBudGggJSAxMDA7XG4gICAgICAgIGlmIChzID4gMyAmJiBzIDwgMjEpXG4gICAgICAgICAgICByZXR1cm4gXCJ0aFwiO1xuICAgICAgICBzd2l0Y2ggKHMgJSAxMCkge1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInN0XCI7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibmRcIjtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJyZFwiO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ0aFwiO1xuICAgICAgICB9XG4gICAgfSxcbiAgICByYW5nZVNlcGFyYXRvcjogXCIgdG8gXCIsXG4gICAgd2Vla0FiYnJldmlhdGlvbjogXCJXa1wiLFxuICAgIHNjcm9sbFRpdGxlOiBcIlNjcm9sbCB0byBpbmNyZW1lbnRcIixcbiAgICB0b2dnbGVUaXRsZTogXCJDbGljayB0byB0b2dnbGVcIixcbiAgICBhbVBNOiBbXCJBTVwiLCBcIlBNXCJdLFxuICAgIHllYXJBcmlhTGFiZWw6IFwiWWVhclwiLFxuICAgIG1vbnRoQXJpYUxhYmVsOiBcIk1vbnRoXCIsXG4gICAgaG91ckFyaWFMYWJlbDogXCJIb3VyXCIsXG4gICAgbWludXRlQXJpYUxhYmVsOiBcIk1pbnV0ZVwiLFxuICAgIHRpbWVfMjRocjogZmFsc2UsXG59O1xuZXhwb3J0IGRlZmF1bHQgZW5nbGlzaDtcbiIsImV4cG9ydCB2YXIgcGFkID0gZnVuY3Rpb24gKG51bWJlciwgbGVuZ3RoKSB7XG4gICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7IGxlbmd0aCA9IDI7IH1cbiAgICByZXR1cm4gKFwiMDAwXCIgKyBudW1iZXIpLnNsaWNlKGxlbmd0aCAqIC0xKTtcbn07XG5leHBvcnQgdmFyIGludCA9IGZ1bmN0aW9uIChib29sKSB7IHJldHVybiAoYm9vbCA9PT0gdHJ1ZSA/IDEgOiAwKTsgfTtcbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZShmbiwgd2FpdCkge1xuICAgIHZhciB0O1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBjbGVhclRpbWVvdXQodCk7XG4gICAgICAgIHQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZuLmFwcGx5KF90aGlzLCBhcmdzKTsgfSwgd2FpdCk7XG4gICAgfTtcbn1cbmV4cG9ydCB2YXIgYXJyYXlpZnkgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEFycmF5ID8gb2JqIDogW29ial07XG59O1xuIiwiZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGVsZW0sIGNsYXNzTmFtZSwgYm9vbCkge1xuICAgIGlmIChib29sID09PSB0cnVlKVxuICAgICAgICByZXR1cm4gZWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWcsIGNsYXNzTmFtZSwgY29udGVudCkge1xuICAgIHZhciBlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICBjb250ZW50ID0gY29udGVudCB8fCBcIlwiO1xuICAgIGUuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgIGlmIChjb250ZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGUudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICAgIHJldHVybiBlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyTm9kZShub2RlKSB7XG4gICAgd2hpbGUgKG5vZGUuZmlyc3RDaGlsZClcbiAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChub2RlLmZpcnN0Q2hpbGQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQYXJlbnQobm9kZSwgY29uZGl0aW9uKSB7XG4gICAgaWYgKGNvbmRpdGlvbihub2RlKSlcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgZWxzZSBpZiAobm9kZS5wYXJlbnROb2RlKVxuICAgICAgICByZXR1cm4gZmluZFBhcmVudChub2RlLnBhcmVudE5vZGUsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOdW1iZXJJbnB1dChpbnB1dENsYXNzTmFtZSwgb3B0cykge1xuICAgIHZhciB3cmFwcGVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcIm51bUlucHV0V3JhcHBlclwiKSwgbnVtSW5wdXQgPSBjcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgXCJudW1JbnB1dCBcIiArIGlucHV0Q2xhc3NOYW1lKSwgYXJyb3dVcCA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiYXJyb3dVcFwiKSwgYXJyb3dEb3duID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJhcnJvd0Rvd25cIik7XG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIk1TSUUgOS4wXCIpID09PSAtMSkge1xuICAgICAgICBudW1JbnB1dC50eXBlID0gXCJudW1iZXJcIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG51bUlucHV0LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgbnVtSW5wdXQucGF0dGVybiA9IFwiXFxcXGQqXCI7XG4gICAgfVxuICAgIGlmIChvcHRzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRzKVxuICAgICAgICAgICAgbnVtSW5wdXQuc2V0QXR0cmlidXRlKGtleSwgb3B0c1trZXldKTtcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKG51bUlucHV0KTtcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGFycm93VXApO1xuICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoYXJyb3dEb3duKTtcbiAgICByZXR1cm4gd3JhcHBlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRFdmVudFRhcmdldChldmVudCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQuY29tcG9zZWRQYXRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhciBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgICAgICAgICByZXR1cm4gcGF0aFswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQudGFyZ2V0O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LnRhcmdldDtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpbnQsIHBhZCB9IGZyb20gXCIuLi91dGlsc1wiO1xudmFyIGRvTm90aGluZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfTtcbmV4cG9ydCB2YXIgbW9udGhUb1N0ciA9IGZ1bmN0aW9uIChtb250aE51bWJlciwgc2hvcnRoYW5kLCBsb2NhbGUpIHsgcmV0dXJuIGxvY2FsZS5tb250aHNbc2hvcnRoYW5kID8gXCJzaG9ydGhhbmRcIiA6IFwibG9uZ2hhbmRcIl1bbW9udGhOdW1iZXJdOyB9O1xuZXhwb3J0IHZhciByZXZGb3JtYXQgPSB7XG4gICAgRDogZG9Ob3RoaW5nLFxuICAgIEY6IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aE5hbWUsIGxvY2FsZSkge1xuICAgICAgICBkYXRlT2JqLnNldE1vbnRoKGxvY2FsZS5tb250aHMubG9uZ2hhbmQuaW5kZXhPZihtb250aE5hbWUpKTtcbiAgICB9LFxuICAgIEc6IGZ1bmN0aW9uIChkYXRlT2JqLCBob3VyKSB7XG4gICAgICAgIGRhdGVPYmouc2V0SG91cnMoKGRhdGVPYmouZ2V0SG91cnMoKSA+PSAxMiA/IDEyIDogMCkgKyBwYXJzZUZsb2F0KGhvdXIpKTtcbiAgICB9LFxuICAgIEg6IGZ1bmN0aW9uIChkYXRlT2JqLCBob3VyKSB7XG4gICAgICAgIGRhdGVPYmouc2V0SG91cnMocGFyc2VGbG9hdChob3VyKSk7XG4gICAgfSxcbiAgICBKOiBmdW5jdGlvbiAoZGF0ZU9iaiwgZGF5KSB7XG4gICAgICAgIGRhdGVPYmouc2V0RGF0ZShwYXJzZUZsb2F0KGRheSkpO1xuICAgIH0sXG4gICAgSzogZnVuY3Rpb24gKGRhdGVPYmosIGFtUE0sIGxvY2FsZSkge1xuICAgICAgICBkYXRlT2JqLnNldEhvdXJzKChkYXRlT2JqLmdldEhvdXJzKCkgJSAxMikgK1xuICAgICAgICAgICAgMTIgKiBpbnQobmV3IFJlZ0V4cChsb2NhbGUuYW1QTVsxXSwgXCJpXCIpLnRlc3QoYW1QTSkpKTtcbiAgICB9LFxuICAgIE06IGZ1bmN0aW9uIChkYXRlT2JqLCBzaG9ydE1vbnRoLCBsb2NhbGUpIHtcbiAgICAgICAgZGF0ZU9iai5zZXRNb250aChsb2NhbGUubW9udGhzLnNob3J0aGFuZC5pbmRleE9mKHNob3J0TW9udGgpKTtcbiAgICB9LFxuICAgIFM6IGZ1bmN0aW9uIChkYXRlT2JqLCBzZWNvbmRzKSB7XG4gICAgICAgIGRhdGVPYmouc2V0U2Vjb25kcyhwYXJzZUZsb2F0KHNlY29uZHMpKTtcbiAgICB9LFxuICAgIFU6IGZ1bmN0aW9uIChfLCB1bml4U2Vjb25kcykgeyByZXR1cm4gbmV3IERhdGUocGFyc2VGbG9hdCh1bml4U2Vjb25kcykgKiAxMDAwKTsgfSxcbiAgICBXOiBmdW5jdGlvbiAoZGF0ZU9iaiwgd2Vla051bSwgbG9jYWxlKSB7XG4gICAgICAgIHZhciB3ZWVrTnVtYmVyID0gcGFyc2VJbnQod2Vla051bSk7XG4gICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoZGF0ZU9iai5nZXRGdWxsWWVhcigpLCAwLCAyICsgKHdlZWtOdW1iZXIgLSAxKSAqIDcsIDAsIDAsIDAsIDApO1xuICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpICsgbG9jYWxlLmZpcnN0RGF5T2ZXZWVrKTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSxcbiAgICBZOiBmdW5jdGlvbiAoZGF0ZU9iaiwgeWVhcikge1xuICAgICAgICBkYXRlT2JqLnNldEZ1bGxZZWFyKHBhcnNlRmxvYXQoeWVhcikpO1xuICAgIH0sXG4gICAgWjogZnVuY3Rpb24gKF8sIElTT0RhdGUpIHsgcmV0dXJuIG5ldyBEYXRlKElTT0RhdGUpOyB9LFxuICAgIGQ6IGZ1bmN0aW9uIChkYXRlT2JqLCBkYXkpIHtcbiAgICAgICAgZGF0ZU9iai5zZXREYXRlKHBhcnNlRmxvYXQoZGF5KSk7XG4gICAgfSxcbiAgICBoOiBmdW5jdGlvbiAoZGF0ZU9iaiwgaG91cikge1xuICAgICAgICBkYXRlT2JqLnNldEhvdXJzKChkYXRlT2JqLmdldEhvdXJzKCkgPj0gMTIgPyAxMiA6IDApICsgcGFyc2VGbG9hdChob3VyKSk7XG4gICAgfSxcbiAgICBpOiBmdW5jdGlvbiAoZGF0ZU9iaiwgbWludXRlcykge1xuICAgICAgICBkYXRlT2JqLnNldE1pbnV0ZXMocGFyc2VGbG9hdChtaW51dGVzKSk7XG4gICAgfSxcbiAgICBqOiBmdW5jdGlvbiAoZGF0ZU9iaiwgZGF5KSB7XG4gICAgICAgIGRhdGVPYmouc2V0RGF0ZShwYXJzZUZsb2F0KGRheSkpO1xuICAgIH0sXG4gICAgbDogZG9Ob3RoaW5nLFxuICAgIG06IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aCkge1xuICAgICAgICBkYXRlT2JqLnNldE1vbnRoKHBhcnNlRmxvYXQobW9udGgpIC0gMSk7XG4gICAgfSxcbiAgICBuOiBmdW5jdGlvbiAoZGF0ZU9iaiwgbW9udGgpIHtcbiAgICAgICAgZGF0ZU9iai5zZXRNb250aChwYXJzZUZsb2F0KG1vbnRoKSAtIDEpO1xuICAgIH0sXG4gICAgczogZnVuY3Rpb24gKGRhdGVPYmosIHNlY29uZHMpIHtcbiAgICAgICAgZGF0ZU9iai5zZXRTZWNvbmRzKHBhcnNlRmxvYXQoc2Vjb25kcykpO1xuICAgIH0sXG4gICAgdTogZnVuY3Rpb24gKF8sIHVuaXhNaWxsU2Vjb25kcykge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUocGFyc2VGbG9hdCh1bml4TWlsbFNlY29uZHMpKTtcbiAgICB9LFxuICAgIHc6IGRvTm90aGluZyxcbiAgICB5OiBmdW5jdGlvbiAoZGF0ZU9iaiwgeWVhcikge1xuICAgICAgICBkYXRlT2JqLnNldEZ1bGxZZWFyKDIwMDAgKyBwYXJzZUZsb2F0KHllYXIpKTtcbiAgICB9LFxufTtcbmV4cG9ydCB2YXIgdG9rZW5SZWdleCA9IHtcbiAgICBEOiBcIlwiLFxuICAgIEY6IFwiXCIsXG4gICAgRzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICBIOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgIEo6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXFxcXHcrXCIsXG4gICAgSzogXCJcIixcbiAgICBNOiBcIlwiLFxuICAgIFM6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgVTogXCIoLispXCIsXG4gICAgVzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICBZOiBcIihcXFxcZHs0fSlcIixcbiAgICBaOiBcIiguKylcIixcbiAgICBkOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgIGg6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgaTogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICBqOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgIGw6IFwiXCIsXG4gICAgbTogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICBuOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgIHM6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgdTogXCIoLispXCIsXG4gICAgdzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICB5OiBcIihcXFxcZHsyfSlcIixcbn07XG5leHBvcnQgdmFyIGZvcm1hdHMgPSB7XG4gICAgWjogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsgfSxcbiAgICBEOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXMuc2hvcnRoYW5kW2Zvcm1hdHMudyhkYXRlLCBsb2NhbGUsIG9wdGlvbnMpXTtcbiAgICB9LFxuICAgIEY6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG1vbnRoVG9TdHIoZm9ybWF0cy5uKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykgLSAxLCBmYWxzZSwgbG9jYWxlKTtcbiAgICB9LFxuICAgIEc6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHBhZChmb3JtYXRzLmgoZGF0ZSwgbG9jYWxlLCBvcHRpb25zKSk7XG4gICAgfSxcbiAgICBIOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0SG91cnMoKSk7IH0sXG4gICAgSjogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm9yZGluYWwgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBkYXRlLmdldERhdGUoKSArIGxvY2FsZS5vcmRpbmFsKGRhdGUuZ2V0RGF0ZSgpKVxuICAgICAgICAgICAgOiBkYXRlLmdldERhdGUoKTtcbiAgICB9LFxuICAgIEs6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUpIHsgcmV0dXJuIGxvY2FsZS5hbVBNW2ludChkYXRlLmdldEhvdXJzKCkgPiAxMSldOyB9LFxuICAgIE06IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIG1vbnRoVG9TdHIoZGF0ZS5nZXRNb250aCgpLCB0cnVlLCBsb2NhbGUpO1xuICAgIH0sXG4gICAgUzogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldFNlY29uZHMoKSk7IH0sXG4gICAgVTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC8gMTAwMDsgfSxcbiAgICBXOiBmdW5jdGlvbiAoZGF0ZSwgXywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5nZXRXZWVrKGRhdGUpO1xuICAgIH0sXG4gICAgWTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldEZ1bGxZZWFyKCksIDQpOyB9LFxuICAgIGQ6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBwYWQoZGF0ZS5nZXREYXRlKCkpOyB9LFxuICAgIGg6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiAoZGF0ZS5nZXRIb3VycygpICUgMTIgPyBkYXRlLmdldEhvdXJzKCkgJSAxMiA6IDEyKTsgfSxcbiAgICBpOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0TWludXRlcygpKTsgfSxcbiAgICBqOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXREYXRlKCk7IH0sXG4gICAgbDogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzLmxvbmdoYW5kW2RhdGUuZ2V0RGF5KCldO1xuICAgIH0sXG4gICAgbTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldE1vbnRoKCkgKyAxKTsgfSxcbiAgICBuOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRNb250aCgpICsgMTsgfSxcbiAgICBzOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRTZWNvbmRzKCk7IH0sXG4gICAgdTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0VGltZSgpOyB9LFxuICAgIHc6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldERheSgpOyB9LFxuICAgIHk6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBTdHJpbmcoZGF0ZS5nZXRGdWxsWWVhcigpKS5zdWJzdHJpbmcoMik7IH0sXG59O1xuIiwiaW1wb3J0IHsgdG9rZW5SZWdleCwgcmV2Rm9ybWF0LCBmb3JtYXRzLCB9IGZyb20gXCIuL2Zvcm1hdHRpbmdcIjtcbmltcG9ydCB7IGRlZmF1bHRzIH0gZnJvbSBcIi4uL3R5cGVzL29wdGlvbnNcIjtcbmltcG9ydCB7IGVuZ2xpc2ggfSBmcm9tIFwiLi4vbDEwbi9kZWZhdWx0XCI7XG5leHBvcnQgdmFyIGNyZWF0ZURhdGVGb3JtYXR0ZXIgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgX2IgPSBfYS5jb25maWcsIGNvbmZpZyA9IF9iID09PSB2b2lkIDAgPyBkZWZhdWx0cyA6IF9iLCBfYyA9IF9hLmwxMG4sIGwxMG4gPSBfYyA9PT0gdm9pZCAwID8gZW5nbGlzaCA6IF9jLCBfZCA9IF9hLmlzTW9iaWxlLCBpc01vYmlsZSA9IF9kID09PSB2b2lkIDAgPyBmYWxzZSA6IF9kO1xuICAgIHJldHVybiBmdW5jdGlvbiAoZGF0ZU9iaiwgZnJtdCwgb3ZlcnJpZGVMb2NhbGUpIHtcbiAgICAgICAgdmFyIGxvY2FsZSA9IG92ZXJyaWRlTG9jYWxlIHx8IGwxMG47XG4gICAgICAgIGlmIChjb25maWcuZm9ybWF0RGF0ZSAhPT0gdW5kZWZpbmVkICYmICFpc01vYmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5mb3JtYXREYXRlKGRhdGVPYmosIGZybXQsIGxvY2FsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZybXRcbiAgICAgICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoYywgaSwgYXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0c1tjXSAmJiBhcnJbaSAtIDFdICE9PSBcIlxcXFxcIlxuICAgICAgICAgICAgICAgID8gZm9ybWF0c1tjXShkYXRlT2JqLCBsb2NhbGUsIGNvbmZpZylcbiAgICAgICAgICAgICAgICA6IGMgIT09IFwiXFxcXFwiXG4gICAgICAgICAgICAgICAgICAgID8gY1xuICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIlwiKTtcbiAgICB9O1xufTtcbmV4cG9ydCB2YXIgY3JlYXRlRGF0ZVBhcnNlciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBfYiA9IF9hLmNvbmZpZywgY29uZmlnID0gX2IgPT09IHZvaWQgMCA/IGRlZmF1bHRzIDogX2IsIF9jID0gX2EubDEwbiwgbDEwbiA9IF9jID09PSB2b2lkIDAgPyBlbmdsaXNoIDogX2M7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlLCBnaXZlbkZvcm1hdCwgdGltZWxlc3MsIGN1c3RvbUxvY2FsZSkge1xuICAgICAgICBpZiAoZGF0ZSAhPT0gMCAmJiAhZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBsb2NhbGUgPSBjdXN0b21Mb2NhbGUgfHwgbDEwbjtcbiAgICAgICAgdmFyIHBhcnNlZERhdGU7XG4gICAgICAgIHZhciBkYXRlT3JpZyA9IGRhdGU7XG4gICAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSlcbiAgICAgICAgICAgIHBhcnNlZERhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBkYXRlICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBkYXRlLnRvRml4ZWQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHBhcnNlZERhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGRhdGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHZhciBmb3JtYXQgPSBnaXZlbkZvcm1hdCB8fCAoY29uZmlnIHx8IGRlZmF1bHRzKS5kYXRlRm9ybWF0O1xuICAgICAgICAgICAgdmFyIGRhdGVzdHIgPSBTdHJpbmcoZGF0ZSkudHJpbSgpO1xuICAgICAgICAgICAgaWYgKGRhdGVzdHIgPT09IFwidG9kYXlcIikge1xuICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRpbWVsZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZyAmJiBjb25maWcucGFyc2VEYXRlKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IGNvbmZpZy5wYXJzZURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKC9aJC8udGVzdChkYXRlc3RyKSB8fFxuICAgICAgICAgICAgICAgIC9HTVQkLy50ZXN0KGRhdGVzdHIpKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoZWQgPSB2b2lkIDAsIG9wcyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBtYXRjaEluZGV4ID0gMCwgcmVnZXhTdHIgPSBcIlwiOyBpIDwgZm9ybWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IGZvcm1hdFtpXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzQmFja1NsYXNoID0gdG9rZW4gPT09IFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZXNjYXBlZCA9IGZvcm1hdFtpIC0gMV0gPT09IFwiXFxcXFwiIHx8IGlzQmFja1NsYXNoO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5SZWdleFt0b2tlbl0gJiYgIWVzY2FwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4U3RyICs9IHRva2VuUmVnZXhbdG9rZW5dO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbmV3IFJlZ0V4cChyZWdleFN0cikuZXhlYyhkYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiAobWF0Y2hlZCA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BzW3Rva2VuICE9PSBcIllcIiA/IFwicHVzaFwiIDogXCJ1bnNoaWZ0XCJdKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IHJldkZvcm1hdFt0b2tlbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbDogbWF0Y2hbKyttYXRjaEluZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNCYWNrU2xhc2gpXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdleFN0ciArPSBcIi5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9XG4gICAgICAgICAgICAgICAgICAgICFjb25maWcgfHwgIWNvbmZpZy5ub0NhbGVuZGFyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSwgMCwgMSwgMCwgMCwgMCwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IERhdGUobmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLCAwKSk7XG4gICAgICAgICAgICAgICAgb3BzLmZvckVhY2goZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IF9hLmZuLCB2YWwgPSBfYS52YWw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAocGFyc2VkRGF0ZSA9IGZuKHBhcnNlZERhdGUsIHZhbCwgbG9jYWxlKSB8fCBwYXJzZWREYXRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbWF0Y2hlZCA/IHBhcnNlZERhdGUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEocGFyc2VkRGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHBhcnNlZERhdGUuZ2V0VGltZSgpKSkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5lcnJvckhhbmRsZXIobmV3IEVycm9yKFwiSW52YWxpZCBkYXRlIHByb3ZpZGVkOiBcIiArIGRhdGVPcmlnKSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lbGVzcyA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHBhcnNlZERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgIHJldHVybiBwYXJzZWREYXRlO1xuICAgIH07XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVEYXRlcyhkYXRlMSwgZGF0ZTIsIHRpbWVsZXNzKSB7XG4gICAgaWYgKHRpbWVsZXNzID09PSB2b2lkIDApIHsgdGltZWxlc3MgPSB0cnVlOyB9XG4gICAgaWYgKHRpbWVsZXNzICE9PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gKG5ldyBEYXRlKGRhdGUxLmdldFRpbWUoKSkuc2V0SG91cnMoMCwgMCwgMCwgMCkgLVxuICAgICAgICAgICAgbmV3IERhdGUoZGF0ZTIuZ2V0VGltZSgpKS5zZXRIb3VycygwLCAwLCAwLCAwKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlMS5nZXRUaW1lKCkgLSBkYXRlMi5nZXRUaW1lKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVRpbWVzKGRhdGUxLCBkYXRlMikge1xuICAgIHJldHVybiAoMzYwMCAqIChkYXRlMS5nZXRIb3VycygpIC0gZGF0ZTIuZ2V0SG91cnMoKSkgK1xuICAgICAgICA2MCAqIChkYXRlMS5nZXRNaW51dGVzKCkgLSBkYXRlMi5nZXRNaW51dGVzKCkpICtcbiAgICAgICAgZGF0ZTEuZ2V0U2Vjb25kcygpIC1cbiAgICAgICAgZGF0ZTIuZ2V0U2Vjb25kcygpKTtcbn1cbmV4cG9ydCB2YXIgaXNCZXR3ZWVuID0gZnVuY3Rpb24gKHRzLCB0czEsIHRzMikge1xuICAgIHJldHVybiB0cyA+IE1hdGgubWluKHRzMSwgdHMyKSAmJiB0cyA8IE1hdGgubWF4KHRzMSwgdHMyKTtcbn07XG5leHBvcnQgdmFyIGNhbGN1bGF0ZVNlY29uZHNTaW5jZU1pZG5pZ2h0ID0gZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gICAgcmV0dXJuIGhvdXJzICogMzYwMCArIG1pbnV0ZXMgKiA2MCArIHNlY29uZHM7XG59O1xuZXhwb3J0IHZhciBwYXJzZVNlY29uZHMgPSBmdW5jdGlvbiAoc2Vjb25kc1NpbmNlTWlkbmlnaHQpIHtcbiAgICB2YXIgaG91cnMgPSBNYXRoLmZsb29yKHNlY29uZHNTaW5jZU1pZG5pZ2h0IC8gMzYwMCksIG1pbnV0ZXMgPSAoc2Vjb25kc1NpbmNlTWlkbmlnaHQgLSBob3VycyAqIDM2MDApIC8gNjA7XG4gICAgcmV0dXJuIFtob3VycywgbWludXRlcywgc2Vjb25kc1NpbmNlTWlkbmlnaHQgLSBob3VycyAqIDM2MDAgLSBtaW51dGVzICogNjBdO1xufTtcbmV4cG9ydCB2YXIgZHVyYXRpb24gPSB7XG4gICAgREFZOiA4NjQwMDAwMCxcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdEhvdXJzKGNvbmZpZykge1xuICAgIHZhciBob3VycyA9IGNvbmZpZy5kZWZhdWx0SG91cjtcbiAgICB2YXIgbWludXRlcyA9IGNvbmZpZy5kZWZhdWx0TWludXRlO1xuICAgIHZhciBzZWNvbmRzID0gY29uZmlnLmRlZmF1bHRTZWNvbmRzO1xuICAgIGlmIChjb25maWcubWluRGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBtaW5Ib3VyID0gY29uZmlnLm1pbkRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgdmFyIG1pbk1pbnV0ZXMgPSBjb25maWcubWluRGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIHZhciBtaW5TZWNvbmRzID0gY29uZmlnLm1pbkRhdGUuZ2V0U2Vjb25kcygpO1xuICAgICAgICBpZiAoaG91cnMgPCBtaW5Ib3VyKSB7XG4gICAgICAgICAgICBob3VycyA9IG1pbkhvdXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXJzID09PSBtaW5Ib3VyICYmIG1pbnV0ZXMgPCBtaW5NaW51dGVzKSB7XG4gICAgICAgICAgICBtaW51dGVzID0gbWluTWludXRlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91cnMgPT09IG1pbkhvdXIgJiYgbWludXRlcyA9PT0gbWluTWludXRlcyAmJiBzZWNvbmRzIDwgbWluU2Vjb25kcylcbiAgICAgICAgICAgIHNlY29uZHMgPSBjb25maWcubWluRGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgfVxuICAgIGlmIChjb25maWcubWF4RGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBtYXhIciA9IGNvbmZpZy5tYXhEYXRlLmdldEhvdXJzKCk7XG4gICAgICAgIHZhciBtYXhNaW51dGVzID0gY29uZmlnLm1heERhdGUuZ2V0TWludXRlcygpO1xuICAgICAgICBob3VycyA9IE1hdGgubWluKGhvdXJzLCBtYXhIcik7XG4gICAgICAgIGlmIChob3VycyA9PT0gbWF4SHIpXG4gICAgICAgICAgICBtaW51dGVzID0gTWF0aC5taW4obWF4TWludXRlcywgbWludXRlcyk7XG4gICAgICAgIGlmIChob3VycyA9PT0gbWF4SHIgJiYgbWludXRlcyA9PT0gbWF4TWludXRlcylcbiAgICAgICAgICAgIHNlY29uZHMgPSBjb25maWcubWF4RGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgfVxuICAgIHJldHVybiB7IGhvdXJzOiBob3VycywgbWludXRlczogbWludXRlcywgc2Vjb25kczogc2Vjb25kcyB9O1xufVxuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3NwcmVhZEFycmF5cyA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheXMpIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgICAgICAgcltrXSA9IGFbal07XG4gICAgcmV0dXJuIHI7XG59O1xuaW1wb3J0IHsgZGVmYXVsdHMgYXMgZGVmYXVsdE9wdGlvbnMsIEhPT0tTLCB9IGZyb20gXCIuL3R5cGVzL29wdGlvbnNcIjtcbmltcG9ydCBFbmdsaXNoIGZyb20gXCIuL2wxMG4vZGVmYXVsdFwiO1xuaW1wb3J0IHsgYXJyYXlpZnksIGRlYm91bmNlLCBpbnQsIHBhZCB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBjbGVhck5vZGUsIGNyZWF0ZUVsZW1lbnQsIGNyZWF0ZU51bWJlcklucHV0LCBmaW5kUGFyZW50LCB0b2dnbGVDbGFzcywgZ2V0RXZlbnRUYXJnZXQsIH0gZnJvbSBcIi4vdXRpbHMvZG9tXCI7XG5pbXBvcnQgeyBjb21wYXJlRGF0ZXMsIGNyZWF0ZURhdGVQYXJzZXIsIGNyZWF0ZURhdGVGb3JtYXR0ZXIsIGR1cmF0aW9uLCBpc0JldHdlZW4sIGdldERlZmF1bHRIb3VycywgY2FsY3VsYXRlU2Vjb25kc1NpbmNlTWlkbmlnaHQsIHBhcnNlU2Vjb25kcywgfSBmcm9tIFwiLi91dGlscy9kYXRlc1wiO1xuaW1wb3J0IHsgdG9rZW5SZWdleCwgbW9udGhUb1N0ciB9IGZyb20gXCIuL3V0aWxzL2Zvcm1hdHRpbmdcIjtcbmltcG9ydCBcIi4vdXRpbHMvcG9seWZpbGxzXCI7XG52YXIgREVCT1VOQ0VEX0NIQU5HRV9NUyA9IDMwMDtcbmZ1bmN0aW9uIEZsYXRwaWNrckluc3RhbmNlKGVsZW1lbnQsIGluc3RhbmNlQ29uZmlnKSB7XG4gICAgdmFyIHNlbGYgPSB7XG4gICAgICAgIGNvbmZpZzogX19hc3NpZ24oX19hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zKSwgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcpLFxuICAgICAgICBsMTBuOiBFbmdsaXNoLFxuICAgIH07XG4gICAgc2VsZi5wYXJzZURhdGUgPSBjcmVhdGVEYXRlUGFyc2VyKHsgY29uZmlnOiBzZWxmLmNvbmZpZywgbDEwbjogc2VsZi5sMTBuIH0pO1xuICAgIHNlbGYuX2hhbmRsZXJzID0gW107XG4gICAgc2VsZi5wbHVnaW5FbGVtZW50cyA9IFtdO1xuICAgIHNlbGYubG9hZGVkUGx1Z2lucyA9IFtdO1xuICAgIHNlbGYuX2JpbmQgPSBiaW5kO1xuICAgIHNlbGYuX3NldEhvdXJzRnJvbURhdGUgPSBzZXRIb3Vyc0Zyb21EYXRlO1xuICAgIHNlbGYuX3Bvc2l0aW9uQ2FsZW5kYXIgPSBwb3NpdGlvbkNhbGVuZGFyO1xuICAgIHNlbGYuY2hhbmdlTW9udGggPSBjaGFuZ2VNb250aDtcbiAgICBzZWxmLmNoYW5nZVllYXIgPSBjaGFuZ2VZZWFyO1xuICAgIHNlbGYuY2xlYXIgPSBjbGVhcjtcbiAgICBzZWxmLmNsb3NlID0gY2xvc2U7XG4gICAgc2VsZi5vbk1vdXNlT3ZlciA9IG9uTW91c2VPdmVyO1xuICAgIHNlbGYuX2NyZWF0ZUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50O1xuICAgIHNlbGYuY3JlYXRlRGF5ID0gY3JlYXRlRGF5O1xuICAgIHNlbGYuZGVzdHJveSA9IGRlc3Ryb3k7XG4gICAgc2VsZi5pc0VuYWJsZWQgPSBpc0VuYWJsZWQ7XG4gICAgc2VsZi5qdW1wVG9EYXRlID0ganVtcFRvRGF0ZTtcbiAgICBzZWxmLnVwZGF0ZVZhbHVlID0gdXBkYXRlVmFsdWU7XG4gICAgc2VsZi5vcGVuID0gb3BlbjtcbiAgICBzZWxmLnJlZHJhdyA9IHJlZHJhdztcbiAgICBzZWxmLnNldCA9IHNldDtcbiAgICBzZWxmLnNldERhdGUgPSBzZXREYXRlO1xuICAgIHNlbGYudG9nZ2xlID0gdG9nZ2xlO1xuICAgIGZ1bmN0aW9uIHNldHVwSGVscGVyRnVuY3Rpb25zKCkge1xuICAgICAgICBzZWxmLnV0aWxzID0ge1xuICAgICAgICAgICAgZ2V0RGF5c0luTW9udGg6IGZ1bmN0aW9uIChtb250aCwgeXIpIHtcbiAgICAgICAgICAgICAgICBpZiAobW9udGggPT09IHZvaWQgMCkgeyBtb250aCA9IHNlbGYuY3VycmVudE1vbnRoOyB9XG4gICAgICAgICAgICAgICAgaWYgKHlyID09PSB2b2lkIDApIHsgeXIgPSBzZWxmLmN1cnJlbnRZZWFyOyB9XG4gICAgICAgICAgICAgICAgaWYgKG1vbnRoID09PSAxICYmICgoeXIgJSA0ID09PSAwICYmIHlyICUgMTAwICE9PSAwKSB8fCB5ciAlIDQwMCA9PT0gMCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAyOTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5sMTBuLmRheXNJbk1vbnRoW21vbnRoXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHNlbGYuZWxlbWVudCA9IHNlbGYuaW5wdXQgPSBlbGVtZW50O1xuICAgICAgICBzZWxmLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICBwYXJzZUNvbmZpZygpO1xuICAgICAgICBzZXR1cExvY2FsZSgpO1xuICAgICAgICBzZXR1cElucHV0cygpO1xuICAgICAgICBzZXR1cERhdGVzKCk7XG4gICAgICAgIHNldHVwSGVscGVyRnVuY3Rpb25zKCk7XG4gICAgICAgIGlmICghc2VsZi5pc01vYmlsZSlcbiAgICAgICAgICAgIGJ1aWxkKCk7XG4gICAgICAgIGJpbmRFdmVudHMoKTtcbiAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggfHwgc2VsZi5jb25maWcubm9DYWxlbmRhcikge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUpIHtcbiAgICAgICAgICAgICAgICBzZXRIb3Vyc0Zyb21EYXRlKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgPyBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q2FsZW5kYXJXaWR0aCgpO1xuICAgICAgICB2YXIgaXNTYWZhcmkgPSAvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgICBpZiAoIXNlbGYuaXNNb2JpbGUgJiYgaXNTYWZhcmkpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uQ2FsZW5kYXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblJlYWR5XCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDbG9zZXN0QWN0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKCgoX2EgPSBzZWxmLmNhbGVuZGFyQ29udGFpbmVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0Um9vdE5vZGUoKSlcbiAgICAgICAgICAgIC5hY3RpdmVFbGVtZW50IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBiaW5kVG9JbnN0YW5jZShmbikge1xuICAgICAgICByZXR1cm4gZm4uYmluZChzZWxmKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0Q2FsZW5kYXJXaWR0aCgpIHtcbiAgICAgICAgdmFyIGNvbmZpZyA9IHNlbGYuY29uZmlnO1xuICAgICAgICBpZiAoY29uZmlnLndlZWtOdW1iZXJzID09PSBmYWxzZSAmJiBjb25maWcuc2hvd01vbnRocyA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZy5ub0NhbGVuZGFyICE9PSB0cnVlKSB7XG4gICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jYWxlbmRhckNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXlzV2lkdGggPSAoc2VsZi5kYXlzLm9mZnNldFdpZHRoICsgMSkgKiBjb25maWcuc2hvd01vbnRocztcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLnN0eWxlLndpZHRoID0gZGF5c1dpZHRoICsgXCJweFwiO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLndpZHRoID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRheXNXaWR0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYud2Vla1dyYXBwZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYud2Vla1dyYXBwZXIub2Zmc2V0V2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJweFwiO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcImRpc3BsYXlcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlVGltZShlKSB7XG4gICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdERhdGUgPSBzZWxmLmNvbmZpZy5taW5EYXRlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMobmV3IERhdGUoKSwgc2VsZi5jb25maWcubWluRGF0ZSkgPj0gMFxuICAgICAgICAgICAgICAgID8gbmV3IERhdGUoKVxuICAgICAgICAgICAgICAgIDogbmV3IERhdGUoc2VsZi5jb25maWcubWluRGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgdmFyIGRlZmF1bHRzID0gZ2V0RGVmYXVsdEhvdXJzKHNlbGYuY29uZmlnKTtcbiAgICAgICAgICAgIGRlZmF1bHREYXRlLnNldEhvdXJzKGRlZmF1bHRzLmhvdXJzLCBkZWZhdWx0cy5taW51dGVzLCBkZWZhdWx0cy5zZWNvbmRzLCBkZWZhdWx0RGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMgPSBbZGVmYXVsdERhdGVdO1xuICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBkZWZhdWx0RGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZSAhPT0gdW5kZWZpbmVkICYmIGUudHlwZSAhPT0gXCJibHVyXCIpIHtcbiAgICAgICAgICAgIHRpbWVXcmFwcGVyKGUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2VmFsdWUgPSBzZWxmLl9pbnB1dC52YWx1ZTtcbiAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgIHVwZGF0ZVZhbHVlKCk7XG4gICAgICAgIGlmIChzZWxmLl9pbnB1dC52YWx1ZSAhPT0gcHJldlZhbHVlKSB7XG4gICAgICAgICAgICBzZWxmLl9kZWJvdW5jZWRDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhbXBtMm1pbGl0YXJ5KGhvdXIsIGFtUE0pIHtcbiAgICAgICAgcmV0dXJuIChob3VyICUgMTIpICsgMTIgKiBpbnQoYW1QTSA9PT0gc2VsZi5sMTBuLmFtUE1bMV0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtaWxpdGFyeTJhbXBtKGhvdXIpIHtcbiAgICAgICAgc3dpdGNoIChob3VyICUgMjQpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciAlIDEyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldEhvdXJzRnJvbUlucHV0cygpIHtcbiAgICAgICAgaWYgKHNlbGYuaG91ckVsZW1lbnQgPT09IHVuZGVmaW5lZCB8fCBzZWxmLm1pbnV0ZUVsZW1lbnQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGhvdXJzID0gKHBhcnNlSW50KHNlbGYuaG91ckVsZW1lbnQudmFsdWUuc2xpY2UoLTIpLCAxMCkgfHwgMCkgJSAyNCwgbWludXRlcyA9IChwYXJzZUludChzZWxmLm1pbnV0ZUVsZW1lbnQudmFsdWUsIDEwKSB8fCAwKSAlIDYwLCBzZWNvbmRzID0gc2VsZi5zZWNvbmRFbGVtZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gKHBhcnNlSW50KHNlbGYuc2Vjb25kRWxlbWVudC52YWx1ZSwgMTApIHx8IDApICUgNjBcbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgaWYgKHNlbGYuYW1QTSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBob3VycyA9IGFtcG0ybWlsaXRhcnkoaG91cnMsIHNlbGYuYW1QTS50ZXh0Q29udGVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxpbWl0TWluSG91cnMgPSBzZWxmLmNvbmZpZy5taW5UaW1lICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgc2VsZi5taW5EYXRlSGFzVGltZSAmJlxuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqICYmXG4gICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLCBzZWxmLmNvbmZpZy5taW5EYXRlLCB0cnVlKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgMCk7XG4gICAgICAgIHZhciBsaW1pdE1heEhvdXJzID0gc2VsZi5jb25maWcubWF4VGltZSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAoc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgIHNlbGYubWF4RGF0ZUhhc1RpbWUgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiAmJlxuICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiwgc2VsZi5jb25maWcubWF4RGF0ZSwgdHJ1ZSkgPT09XG4gICAgICAgICAgICAgICAgICAgIDApO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4VGltZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5UaW1lICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pblRpbWUgPiBzZWxmLmNvbmZpZy5tYXhUaW1lKSB7XG4gICAgICAgICAgICB2YXIgbWluQm91bmQgPSBjYWxjdWxhdGVTZWNvbmRzU2luY2VNaWRuaWdodChzZWxmLmNvbmZpZy5taW5UaW1lLmdldEhvdXJzKCksIHNlbGYuY29uZmlnLm1pblRpbWUuZ2V0TWludXRlcygpLCBzZWxmLmNvbmZpZy5taW5UaW1lLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICB2YXIgbWF4Qm91bmQgPSBjYWxjdWxhdGVTZWNvbmRzU2luY2VNaWRuaWdodChzZWxmLmNvbmZpZy5tYXhUaW1lLmdldEhvdXJzKCksIHNlbGYuY29uZmlnLm1heFRpbWUuZ2V0TWludXRlcygpLCBzZWxmLmNvbmZpZy5tYXhUaW1lLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBjYWxjdWxhdGVTZWNvbmRzU2luY2VNaWRuaWdodChob3VycywgbWludXRlcywgc2Vjb25kcyk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFRpbWUgPiBtYXhCb3VuZCAmJiBjdXJyZW50VGltZSA8IG1pbkJvdW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHBhcnNlU2Vjb25kcyhtaW5Cb3VuZCk7XG4gICAgICAgICAgICAgICAgaG91cnMgPSByZXN1bHRbMF07XG4gICAgICAgICAgICAgICAgbWludXRlcyA9IHJlc3VsdFsxXTtcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gcmVzdWx0WzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGxpbWl0TWF4SG91cnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF4VGltZSA9IHNlbGYuY29uZmlnLm1heFRpbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1heFRpbWVcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5tYXhEYXRlO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gTWF0aC5taW4oaG91cnMsIG1heFRpbWUuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtYXhUaW1lLmdldEhvdXJzKCkpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1pbihtaW51dGVzLCBtYXhUaW1lLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG1pbnV0ZXMgPT09IG1heFRpbWUuZ2V0TWludXRlcygpKVxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5taW4oc2Vjb25kcywgbWF4VGltZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxpbWl0TWluSG91cnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWluVGltZSA9IHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1pblRpbWVcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5taW5EYXRlO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gTWF0aC5tYXgoaG91cnMsIG1pblRpbWUuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtaW5UaW1lLmdldEhvdXJzKCkgJiYgbWludXRlcyA8IG1pblRpbWUuZ2V0TWludXRlcygpKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gbWluVGltZS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICAgICAgaWYgKG1pbnV0ZXMgPT09IG1pblRpbWUuZ2V0TWludXRlcygpKVxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5tYXgoc2Vjb25kcywgbWluVGltZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0SG91cnNGcm9tRGF0ZShkYXRlT2JqKSB7XG4gICAgICAgIHZhciBkYXRlID0gZGF0ZU9iaiB8fCBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iajtcbiAgICAgICAgaWYgKGRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRIb3Vycyhob3VycywgbWludXRlcywgc2Vjb25kcykge1xuICAgICAgICBpZiAoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouc2V0SG91cnMoaG91cnMgJSAyNCwgbWludXRlcywgc2Vjb25kcyB8fCAwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlbGYuaG91ckVsZW1lbnQgfHwgIXNlbGYubWludXRlRWxlbWVudCB8fCBzZWxmLmlzTW9iaWxlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnZhbHVlID0gcGFkKCFzZWxmLmNvbmZpZy50aW1lXzI0aHJcbiAgICAgICAgICAgID8gKCgxMiArIGhvdXJzKSAlIDEyKSArIDEyICogaW50KGhvdXJzICUgMTIgPT09IDApXG4gICAgICAgICAgICA6IGhvdXJzKTtcbiAgICAgICAgc2VsZi5taW51dGVFbGVtZW50LnZhbHVlID0gcGFkKG1pbnV0ZXMpO1xuICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPSBzZWxmLmwxMG4uYW1QTVtpbnQoaG91cnMgPj0gMTIpXTtcbiAgICAgICAgaWYgKHNlbGYuc2Vjb25kRWxlbWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnZhbHVlID0gcGFkKHNlY29uZHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvblllYXJJbnB1dChldmVudCkge1xuICAgICAgICB2YXIgZXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChldmVudCk7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoZXZlbnRUYXJnZXQudmFsdWUpICsgKGV2ZW50LmRlbHRhIHx8IDApO1xuICAgICAgICBpZiAoeWVhciAvIDEwMDAgPiAxIHx8XG4gICAgICAgICAgICAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgJiYgIS9bXlxcZF0vLnRlc3QoeWVhci50b1N0cmluZygpKSkpIHtcbiAgICAgICAgICAgIGNoYW5nZVllYXIoeWVhcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZChlbGVtZW50LCBldmVudCwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBldmVudC5mb3JFYWNoKGZ1bmN0aW9uIChldikgeyByZXR1cm4gYmluZChlbGVtZW50LCBldiwgaGFuZGxlciwgb3B0aW9ucyk7IH0pO1xuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGJpbmQoZWwsIGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTsgfSk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgIHNlbGYuX2hhbmRsZXJzLnB1c2goe1xuICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpOyB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJpZ2dlckNoYW5nZSgpIHtcbiAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmRFdmVudHMoKSB7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy53cmFwKSB7XG4gICAgICAgICAgICBbXCJvcGVuXCIsIFwiY2xvc2VcIiwgXCJ0b2dnbGVcIiwgXCJjbGVhclwiXS5mb3JFYWNoKGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNlbGYuZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtXCIgKyBldnQgKyBcIl1cIiksIGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmluZChlbCwgXCJjbGlja1wiLCBzZWxmW2V2dF0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgIHNldHVwTW9iaWxlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlYm91bmNlZFJlc2l6ZSA9IGRlYm91bmNlKG9uUmVzaXplLCA1MCk7XG4gICAgICAgIHNlbGYuX2RlYm91bmNlZENoYW5nZSA9IGRlYm91bmNlKHRyaWdnZXJDaGFuZ2UsIERFQk9VTkNFRF9DSEFOR0VfTVMpO1xuICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICYmICEvaVBob25lfGlQYWR8aVBvZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpXG4gICAgICAgICAgICBiaW5kKHNlbGYuZGF5c0NvbnRhaW5lciwgXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKVxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlT3ZlcihnZXRFdmVudFRhcmdldChlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgYmluZChzZWxmLl9pbnB1dCwgXCJrZXlkb3duXCIsIG9uS2V5RG93bik7XG4gICAgICAgIGlmIChzZWxmLmNhbGVuZGFyQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJpbmQoc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJrZXlkb3duXCIsIG9uS2V5RG93bik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5pbmxpbmUgJiYgIXNlbGYuY29uZmlnLnN0YXRpYylcbiAgICAgICAgICAgIGJpbmQod2luZG93LCBcInJlc2l6ZVwiLCBkZWJvdW5jZWRSZXNpemUpO1xuICAgICAgICBpZiAod2luZG93Lm9udG91Y2hzdGFydCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgYmluZCh3aW5kb3cuZG9jdW1lbnQsIFwidG91Y2hzdGFydFwiLCBkb2N1bWVudENsaWNrKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgYmluZCh3aW5kb3cuZG9jdW1lbnQsIFwibW91c2Vkb3duXCIsIGRvY3VtZW50Q2xpY2spO1xuICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudCwgXCJmb2N1c1wiLCBkb2N1bWVudENsaWNrLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5jbGlja09wZW5zID09PSB0cnVlKSB7XG4gICAgICAgICAgICBiaW5kKHNlbGYuX2lucHV0LCBcImZvY3VzXCIsIHNlbGYub3Blbik7XG4gICAgICAgICAgICBiaW5kKHNlbGYuX2lucHV0LCBcImNsaWNrXCIsIHNlbGYub3Blbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBiaW5kKHNlbGYubW9udGhOYXYsIFwiY2xpY2tcIiwgb25Nb250aE5hdkNsaWNrKTtcbiAgICAgICAgICAgIGJpbmQoc2VsZi5tb250aE5hdiwgW1wia2V5dXBcIiwgXCJpbmNyZW1lbnRcIl0sIG9uWWVhcklucHV0KTtcbiAgICAgICAgICAgIGJpbmQoc2VsZi5kYXlzQ29udGFpbmVyLCBcImNsaWNrXCIsIHNlbGVjdERhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLnRpbWVDb250YWluZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFyIHNlbFRleHQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRFdmVudFRhcmdldChlKS5zZWxlY3QoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBiaW5kKHNlbGYudGltZUNvbnRhaW5lciwgW1wiaW5jcmVtZW50XCJdLCB1cGRhdGVUaW1lKTtcbiAgICAgICAgICAgIGJpbmQoc2VsZi50aW1lQ29udGFpbmVyLCBcImJsdXJcIiwgdXBkYXRlVGltZSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgICAgICAgYmluZChzZWxmLnRpbWVDb250YWluZXIsIFwiY2xpY2tcIiwgdGltZUluY3JlbWVudCk7XG4gICAgICAgICAgICBiaW5kKFtzZWxmLmhvdXJFbGVtZW50LCBzZWxmLm1pbnV0ZUVsZW1lbnRdLCBbXCJmb2N1c1wiLCBcImNsaWNrXCJdLCBzZWxUZXh0KTtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlY29uZEVsZW1lbnQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYuc2Vjb25kRWxlbWVudCwgXCJmb2N1c1wiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLnNlY29uZEVsZW1lbnQgJiYgc2VsZi5zZWNvbmRFbGVtZW50LnNlbGVjdCgpOyB9KTtcbiAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5hbVBNLCBcImNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLmFsbG93SW5wdXQpIHtcbiAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwiYmx1clwiLCBvbkJsdXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGp1bXBUb0RhdGUoanVtcERhdGUsIHRyaWdnZXJDaGFuZ2UpIHtcbiAgICAgICAgdmFyIGp1bXBUbyA9IGp1bXBEYXRlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gc2VsZi5wYXJzZURhdGUoanVtcERhdGUpXG4gICAgICAgICAgICA6IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqIHx8XG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUgJiYgc2VsZi5jb25maWcubWluRGF0ZSA+IHNlbGYubm93XG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWluRGF0ZVxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1heERhdGUgJiYgc2VsZi5jb25maWcubWF4RGF0ZSA8IHNlbGYubm93XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1heERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5ub3cpO1xuICAgICAgICB2YXIgb2xkWWVhciA9IHNlbGYuY3VycmVudFllYXI7XG4gICAgICAgIHZhciBvbGRNb250aCA9IHNlbGYuY3VycmVudE1vbnRoO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGp1bXBUbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IGp1bXBUby5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0ganVtcFRvLmdldE1vbnRoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGUubWVzc2FnZSA9IFwiSW52YWxpZCBkYXRlIHN1cHBsaWVkOiBcIiArIGp1bXBUbztcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSAmJiBzZWxmLmN1cnJlbnRZZWFyICE9PSBvbGRZZWFyKSB7XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblllYXJDaGFuZ2VcIik7XG4gICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UgJiZcbiAgICAgICAgICAgIChzZWxmLmN1cnJlbnRZZWFyICE9PSBvbGRZZWFyIHx8IHNlbGYuY3VycmVudE1vbnRoICE9PSBvbGRNb250aCkpIHtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGltZUluY3JlbWVudChlKSB7XG4gICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICBpZiAofmV2ZW50VGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKFwiYXJyb3dcIikpXG4gICAgICAgICAgICBpbmNyZW1lbnROdW1JbnB1dChlLCBldmVudFRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJhcnJvd1VwXCIpID8gMSA6IC0xKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5jcmVtZW50TnVtSW5wdXQoZSwgZGVsdGEsIGlucHV0RWxlbSkge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gZSAmJiBnZXRFdmVudFRhcmdldChlKTtcbiAgICAgICAgdmFyIGlucHV0ID0gaW5wdXRFbGVtIHx8XG4gICAgICAgICAgICAodGFyZ2V0ICYmIHRhcmdldC5wYXJlbnROb2RlICYmIHRhcmdldC5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgICB2YXIgZXZlbnQgPSBjcmVhdGVFdmVudChcImluY3JlbWVudFwiKTtcbiAgICAgICAgZXZlbnQuZGVsdGEgPSBkZWx0YTtcbiAgICAgICAgaW5wdXQgJiYgaW5wdXQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkKCkge1xuICAgICAgICB2YXIgZnJhZ21lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1jYWxlbmRhclwiKTtcbiAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICBpZiAoIXNlbGYuY29uZmlnLm5vQ2FsZW5kYXIpIHtcbiAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGJ1aWxkTW9udGhOYXYoKSk7XG4gICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1pbm5lckNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy53ZWVrTnVtYmVycykge1xuICAgICAgICAgICAgICAgIHZhciBfYSA9IGJ1aWxkV2Vla3MoKSwgd2Vla1dyYXBwZXIgPSBfYS53ZWVrV3JhcHBlciwgd2Vla051bWJlcnMgPSBfYS53ZWVrTnVtYmVycztcbiAgICAgICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyLmFwcGVuZENoaWxkKHdlZWtXcmFwcGVyKTtcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtOdW1iZXJzID0gd2Vla051bWJlcnM7XG4gICAgICAgICAgICAgICAgc2VsZi53ZWVrV3JhcHBlciA9IHdlZWtXcmFwcGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5yQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1yQ29udGFpbmVyXCIpO1xuICAgICAgICAgICAgc2VsZi5yQ29udGFpbmVyLmFwcGVuZENoaWxkKGJ1aWxkV2Vla2RheXMoKSk7XG4gICAgICAgICAgICBpZiAoIXNlbGYuZGF5c0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItZGF5c1wiKTtcbiAgICAgICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1aWxkRGF5cygpO1xuICAgICAgICAgICAgc2VsZi5yQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuZGF5c0NvbnRhaW5lcik7XG4gICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuckNvbnRhaW5lcik7XG4gICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChzZWxmLmlubmVyQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoYnVpbGRUaW1lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwicmFuZ2VNb2RlXCIsIHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIik7XG4gICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYW5pbWF0ZVwiLCBzZWxmLmNvbmZpZy5hbmltYXRlID09PSB0cnVlKTtcbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJtdWx0aU1vbnRoXCIsIHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxKTtcbiAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgICAgIHZhciBjdXN0b21BcHBlbmQgPSBzZWxmLmNvbmZpZy5hcHBlbmRUbyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5hcHBlbmRUby5ub2RlVHlwZSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcuaW5saW5lIHx8IHNlbGYuY29uZmlnLnN0YXRpYykge1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHNlbGYuY29uZmlnLmlubGluZSA/IFwiaW5saW5lXCIgOiBcInN0YXRpY1wiKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5pbmxpbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbUFwcGVuZCAmJiBzZWxmLmVsZW1lbnQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIHNlbGYuX2lucHV0Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5hcHBlbmRUbyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5hcHBlbmRUby5hcHBlbmRDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zdGF0aWMpIHtcbiAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd3JhcHBlclwiKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5lbGVtZW50LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLCBzZWxmLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dClcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChzZWxmLmFsdElucHV0KTtcbiAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghc2VsZi5jb25maWcuc3RhdGljICYmICFzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICAoc2VsZi5jb25maWcuYXBwZW5kVG8gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcuYXBwZW5kVG9cbiAgICAgICAgICAgICAgICA6IHdpbmRvdy5kb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRGF5KGNsYXNzTmFtZSwgZGF0ZSwgX2RheU51bWJlciwgaSkge1xuICAgICAgICB2YXIgZGF0ZUlzRW5hYmxlZCA9IGlzRW5hYmxlZChkYXRlLCB0cnVlKSwgZGF5RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIGNsYXNzTmFtZSwgZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKSk7XG4gICAgICAgIGRheUVsZW1lbnQuZGF0ZU9iaiA9IGRhdGU7XG4gICAgICAgIGRheUVsZW1lbnQuJGkgPSBpO1xuICAgICAgICBkYXlFbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgc2VsZi5mb3JtYXREYXRlKGRhdGUsIHNlbGYuY29uZmlnLmFyaWFEYXRlRm9ybWF0KSk7XG4gICAgICAgIGlmIChjbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLm5vdykgPT09IDApIHtcbiAgICAgICAgICAgIHNlbGYudG9kYXlEYXRlRWxlbSA9IGRheUVsZW1lbnQ7XG4gICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJ0b2RheVwiKTtcbiAgICAgICAgICAgIGRheUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1jdXJyZW50XCIsIFwiZGF0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0ZUlzRW5hYmxlZCkge1xuICAgICAgICAgICAgZGF5RWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgaWYgKGlzRGF0ZVNlbGVjdGVkKGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic2VsZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVFbGVtID0gZGF5RWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGRheUVsZW1lbnQsIFwic3RhcnRSYW5nZVwiLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHRydWUpID09PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoZGF5RWxlbWVudCwgXCJlbmRSYW5nZVwiLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMV0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMV0sIHRydWUpID09PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gXCJuZXh0TW9udGhEYXlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImluUmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZmxhdHBpY2tyLWRpc2FibGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgIGlmIChpc0RhdGVJblJhbmdlKGRhdGUpICYmICFpc0RhdGVTZWxlY3RlZChkYXRlKSlcbiAgICAgICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJpblJhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLndlZWtOdW1iZXJzICYmXG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5zaG93TW9udGhzID09PSAxICYmXG4gICAgICAgICAgICBjbGFzc05hbWUgIT09IFwicHJldk1vbnRoRGF5XCIgJiZcbiAgICAgICAgICAgIGkgJSA3ID09PSA2KSB7XG4gICAgICAgICAgICBzZWxmLndlZWtOdW1iZXJzLmluc2VydEFkamFjZW50SFRNTChcImJlZm9yZWVuZFwiLCBcIjxzcGFuIGNsYXNzPSdmbGF0cGlja3ItZGF5Jz5cIiArIHNlbGYuY29uZmlnLmdldFdlZWsoZGF0ZSkgKyBcIjwvc3Bhbj5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdHJpZ2dlckV2ZW50KFwib25EYXlDcmVhdGVcIiwgZGF5RWxlbWVudCk7XG4gICAgICAgIHJldHVybiBkYXlFbGVtZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBmb2N1c09uRGF5RWxlbSh0YXJnZXROb2RlKSB7XG4gICAgICAgIHRhcmdldE5vZGUuZm9jdXMoKTtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIilcbiAgICAgICAgICAgIG9uTW91c2VPdmVyKHRhcmdldE5vZGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRGaXJzdEF2YWlsYWJsZURheShkZWx0YSkge1xuICAgICAgICB2YXIgc3RhcnRNb250aCA9IGRlbHRhID4gMCA/IDAgOiBzZWxmLmNvbmZpZy5zaG93TW9udGhzIC0gMTtcbiAgICAgICAgdmFyIGVuZE1vbnRoID0gZGVsdGEgPiAwID8gc2VsZi5jb25maWcuc2hvd01vbnRocyA6IC0xO1xuICAgICAgICBmb3IgKHZhciBtID0gc3RhcnRNb250aDsgbSAhPSBlbmRNb250aDsgbSArPSBkZWx0YSkge1xuICAgICAgICAgICAgdmFyIG1vbnRoID0gc2VsZi5kYXlzQ29udGFpbmVyLmNoaWxkcmVuW21dO1xuICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSBkZWx0YSA+IDAgPyAwIDogbW9udGguY2hpbGRyZW4ubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHZhciBlbmRJbmRleCA9IGRlbHRhID4gMCA/IG1vbnRoLmNoaWxkcmVuLmxlbmd0aCA6IC0xO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgIT0gZW5kSW5kZXg7IGkgKz0gZGVsdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IG1vbnRoLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgIGlmIChjLmNsYXNzTmFtZS5pbmRleE9mKFwiaGlkZGVuXCIpID09PSAtMSAmJiBpc0VuYWJsZWQoYy5kYXRlT2JqKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TmV4dEF2YWlsYWJsZURheShjdXJyZW50LCBkZWx0YSkge1xuICAgICAgICB2YXIgZ2l2ZW5Nb250aCA9IGN1cnJlbnQuY2xhc3NOYW1lLmluZGV4T2YoXCJNb250aFwiKSA9PT0gLTFcbiAgICAgICAgICAgID8gY3VycmVudC5kYXRlT2JqLmdldE1vbnRoKClcbiAgICAgICAgICAgIDogc2VsZi5jdXJyZW50TW9udGg7XG4gICAgICAgIHZhciBlbmRNb250aCA9IGRlbHRhID4gMCA/IHNlbGYuY29uZmlnLnNob3dNb250aHMgOiAtMTtcbiAgICAgICAgdmFyIGxvb3BEZWx0YSA9IGRlbHRhID4gMCA/IDEgOiAtMTtcbiAgICAgICAgZm9yICh2YXIgbSA9IGdpdmVuTW9udGggLSBzZWxmLmN1cnJlbnRNb250aDsgbSAhPSBlbmRNb250aDsgbSArPSBsb29wRGVsdGEpIHtcbiAgICAgICAgICAgIHZhciBtb250aCA9IHNlbGYuZGF5c0NvbnRhaW5lci5jaGlsZHJlblttXTtcbiAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gZ2l2ZW5Nb250aCAtIHNlbGYuY3VycmVudE1vbnRoID09PSBtXG4gICAgICAgICAgICAgICAgPyBjdXJyZW50LiRpICsgZGVsdGFcbiAgICAgICAgICAgICAgICA6IGRlbHRhIDwgMFxuICAgICAgICAgICAgICAgICAgICA/IG1vbnRoLmNoaWxkcmVuLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgICAgdmFyIG51bU1vbnRoRGF5cyA9IG1vbnRoLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpID49IDAgJiYgaSA8IG51bU1vbnRoRGF5cyAmJiBpICE9IChkZWx0YSA+IDAgPyBudW1Nb250aERheXMgOiAtMSk7IGkgKz0gbG9vcERlbHRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIGMgPSBtb250aC5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICBpZiAoYy5jbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNFbmFibGVkKGMuZGF0ZU9iaikgJiZcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5hYnMoY3VycmVudC4kaSAtIGkpID49IE1hdGguYWJzKGRlbHRhKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvY3VzT25EYXlFbGVtKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbGYuY2hhbmdlTW9udGgobG9vcERlbHRhKTtcbiAgICAgICAgZm9jdXNPbkRheShnZXRGaXJzdEF2YWlsYWJsZURheShsb29wRGVsdGEpLCAwKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZm9jdXNPbkRheShjdXJyZW50LCBvZmZzZXQpIHtcbiAgICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBnZXRDbG9zZXN0QWN0aXZlRWxlbWVudCgpO1xuICAgICAgICB2YXIgZGF5Rm9jdXNlZCA9IGlzSW5WaWV3KGFjdGl2ZUVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSk7XG4gICAgICAgIHZhciBzdGFydEVsZW0gPSBjdXJyZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gY3VycmVudFxuICAgICAgICAgICAgOiBkYXlGb2N1c2VkXG4gICAgICAgICAgICAgICAgPyBhY3RpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgOiBzZWxmLnNlbGVjdGVkRGF0ZUVsZW0gIT09IHVuZGVmaW5lZCAmJiBpc0luVmlldyhzZWxmLnNlbGVjdGVkRGF0ZUVsZW0pXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5zZWxlY3RlZERhdGVFbGVtXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi50b2RheURhdGVFbGVtICE9PSB1bmRlZmluZWQgJiYgaXNJblZpZXcoc2VsZi50b2RheURhdGVFbGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLnRvZGF5RGF0ZUVsZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0Rmlyc3RBdmFpbGFibGVEYXkob2Zmc2V0ID4gMCA/IDEgOiAtMSk7XG4gICAgICAgIGlmIChzdGFydEVsZW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2VsZi5faW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghZGF5Rm9jdXNlZCkge1xuICAgICAgICAgICAgZm9jdXNPbkRheUVsZW0oc3RhcnRFbGVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdldE5leHRBdmFpbGFibGVEYXkoc3RhcnRFbGVtLCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhEYXlzKHllYXIsIG1vbnRoKSB7XG4gICAgICAgIHZhciBmaXJzdE9mTW9udGggPSAobmV3IERhdGUoeWVhciwgbW9udGgsIDEpLmdldERheSgpIC0gc2VsZi5sMTBuLmZpcnN0RGF5T2ZXZWVrICsgNykgJSA3O1xuICAgICAgICB2YXIgcHJldk1vbnRoRGF5cyA9IHNlbGYudXRpbHMuZ2V0RGF5c0luTW9udGgoKG1vbnRoIC0gMSArIDEyKSAlIDEyLCB5ZWFyKTtcbiAgICAgICAgdmFyIGRheXNJbk1vbnRoID0gc2VsZi51dGlscy5nZXREYXlzSW5Nb250aChtb250aCwgeWVhciksIGRheXMgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBpc011bHRpTW9udGggPSBzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSwgcHJldk1vbnRoRGF5Q2xhc3MgPSBpc011bHRpTW9udGggPyBcInByZXZNb250aERheSBoaWRkZW5cIiA6IFwicHJldk1vbnRoRGF5XCIsIG5leHRNb250aERheUNsYXNzID0gaXNNdWx0aU1vbnRoID8gXCJuZXh0TW9udGhEYXkgaGlkZGVuXCIgOiBcIm5leHRNb250aERheVwiO1xuICAgICAgICB2YXIgZGF5TnVtYmVyID0gcHJldk1vbnRoRGF5cyArIDEgLSBmaXJzdE9mTW9udGgsIGRheUluZGV4ID0gMDtcbiAgICAgICAgZm9yICg7IGRheU51bWJlciA8PSBwcmV2TW9udGhEYXlzOyBkYXlOdW1iZXIrKywgZGF5SW5kZXgrKykge1xuICAgICAgICAgICAgZGF5cy5hcHBlbmRDaGlsZChjcmVhdGVEYXkoXCJmbGF0cGlja3ItZGF5IFwiICsgcHJldk1vbnRoRGF5Q2xhc3MsIG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5TnVtYmVyKSwgZGF5TnVtYmVyLCBkYXlJbmRleCkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoZGF5TnVtYmVyID0gMTsgZGF5TnVtYmVyIDw9IGRheXNJbk1vbnRoOyBkYXlOdW1iZXIrKywgZGF5SW5kZXgrKykge1xuICAgICAgICAgICAgZGF5cy5hcHBlbmRDaGlsZChjcmVhdGVEYXkoXCJmbGF0cGlja3ItZGF5XCIsIG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXlOdW1iZXIpLCBkYXlOdW1iZXIsIGRheUluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgZGF5TnVtID0gZGF5c0luTW9udGggKyAxOyBkYXlOdW0gPD0gNDIgLSBmaXJzdE9mTW9udGggJiZcbiAgICAgICAgICAgIChzZWxmLmNvbmZpZy5zaG93TW9udGhzID09PSAxIHx8IGRheUluZGV4ICUgNyAhPT0gMCk7IGRheU51bSsrLCBkYXlJbmRleCsrKSB7XG4gICAgICAgICAgICBkYXlzLmFwcGVuZENoaWxkKGNyZWF0ZURheShcImZsYXRwaWNrci1kYXkgXCIgKyBuZXh0TW9udGhEYXlDbGFzcywgbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCBkYXlOdW0gJSBkYXlzSW5Nb250aCksIGRheU51bSwgZGF5SW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF5Q29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImRheUNvbnRhaW5lclwiKTtcbiAgICAgICAgZGF5Q29udGFpbmVyLmFwcGVuZENoaWxkKGRheXMpO1xuICAgICAgICByZXR1cm4gZGF5Q29udGFpbmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZERheXMoKSB7XG4gICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyTm9kZShzZWxmLmRheXNDb250YWluZXIpO1xuICAgICAgICBpZiAoc2VsZi53ZWVrTnVtYmVycylcbiAgICAgICAgICAgIGNsZWFyTm9kZShzZWxmLndlZWtOdW1iZXJzKTtcbiAgICAgICAgdmFyIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5jb25maWcuc2hvd01vbnRoczsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKHNlbGYuY3VycmVudFllYXIsIHNlbGYuY3VycmVudE1vbnRoLCAxKTtcbiAgICAgICAgICAgIGQuc2V0TW9udGgoc2VsZi5jdXJyZW50TW9udGggKyBpKTtcbiAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoYnVpbGRNb250aERheXMoZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmRheXNDb250YWluZXIuYXBwZW5kQ2hpbGQoZnJhZyk7XG4gICAgICAgIHNlbGYuZGF5cyA9IHNlbGYuZGF5c0NvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiICYmIHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG9uTW91c2VPdmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGRNb250aFN3aXRjaCgpIHtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxIHx8XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5tb250aFNlbGVjdG9yVHlwZSAhPT0gXCJkcm9wZG93blwiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgc2hvdWxkQnVpbGRNb250aCA9IGZ1bmN0aW9uIChtb250aCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSAmJlxuICAgICAgICAgICAgICAgIG1vbnRoIDwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRNb250aCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICEoc2VsZi5jb25maWcubWF4RGF0ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpICYmXG4gICAgICAgICAgICAgICAgbW9udGggPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1vbnRoKCkpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXNob3VsZEJ1aWxkTW9udGgoaSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB2YXIgbW9udGggPSBjcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIFwiZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhcIik7XG4gICAgICAgICAgICBtb250aC52YWx1ZSA9IG5ldyBEYXRlKHNlbGYuY3VycmVudFllYXIsIGkpLmdldE1vbnRoKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIG1vbnRoLnRleHRDb250ZW50ID0gbW9udGhUb1N0cihpLCBzZWxmLmNvbmZpZy5zaG9ydGhhbmRDdXJyZW50TW9udGgsIHNlbGYubDEwbik7XG4gICAgICAgICAgICBtb250aC50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgaWYgKHNlbGYuY3VycmVudE1vbnRoID09PSBpKSB7XG4gICAgICAgICAgICAgICAgbW9udGguc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci5hcHBlbmRDaGlsZChtb250aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGRNb250aCgpIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItbW9udGhcIik7XG4gICAgICAgIHZhciBtb250aE5hdkZyYWdtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgdmFyIG1vbnRoRWxlbWVudDtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxIHx8XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5tb250aFNlbGVjdG9yVHlwZSA9PT0gXCJzdGF0aWNcIikge1xuICAgICAgICAgICAgbW9udGhFbGVtZW50ID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJjdXItbW9udGhcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCBcImZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoc1wiKTtcbiAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBzZWxmLmwxMG4ubW9udGhBcmlhTGFiZWwpO1xuICAgICAgICAgICAgYmluZChzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLCBcImNoYW5nZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBnZXRFdmVudFRhcmdldChlKTtcbiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRNb250aCA9IHBhcnNlSW50KHRhcmdldC52YWx1ZSwgMTApO1xuICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlTW9udGgoc2VsZWN0ZWRNb250aCAtIHNlbGYuY3VycmVudE1vbnRoKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk1vbnRoQ2hhbmdlXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICBtb250aEVsZW1lbnQgPSBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIHZhciB5ZWFySW5wdXQgPSBjcmVhdGVOdW1iZXJJbnB1dChcImN1ci15ZWFyXCIsIHsgdGFiaW5kZXg6IFwiLTFcIiB9KTtcbiAgICAgICAgdmFyIHllYXJFbGVtZW50ID0geWVhcklucHV0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIilbMF07XG4gICAgICAgIHllYXJFbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgc2VsZi5sMTBuLnllYXJBcmlhTGFiZWwpO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcubWluRGF0ZSkge1xuICAgICAgICAgICAgeWVhckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSkge1xuICAgICAgICAgICAgeWVhckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4XCIsIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHllYXJFbGVtZW50LmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAhIXNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGN1cnJlbnRNb250aCA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItY3VycmVudC1tb250aFwiKTtcbiAgICAgICAgY3VycmVudE1vbnRoLmFwcGVuZENoaWxkKG1vbnRoRWxlbWVudCk7XG4gICAgICAgIGN1cnJlbnRNb250aC5hcHBlbmRDaGlsZCh5ZWFySW5wdXQpO1xuICAgICAgICBtb250aE5hdkZyYWdtZW50LmFwcGVuZENoaWxkKGN1cnJlbnRNb250aCk7XG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChtb250aE5hdkZyYWdtZW50KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgICAgICAgICAgeWVhckVsZW1lbnQ6IHllYXJFbGVtZW50LFxuICAgICAgICAgICAgbW9udGhFbGVtZW50OiBtb250aEVsZW1lbnQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhzKCkge1xuICAgICAgICBjbGVhck5vZGUoc2VsZi5tb250aE5hdik7XG4gICAgICAgIHNlbGYubW9udGhOYXYuYXBwZW5kQ2hpbGQoc2VsZi5wcmV2TW9udGhOYXYpO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocykge1xuICAgICAgICAgICAgc2VsZi55ZWFyRWxlbWVudHMgPSBbXTtcbiAgICAgICAgICAgIHNlbGYubW9udGhFbGVtZW50cyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIG0gPSBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBtLS07KSB7XG4gICAgICAgICAgICB2YXIgbW9udGggPSBidWlsZE1vbnRoKCk7XG4gICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cy5wdXNoKG1vbnRoLnllYXJFbGVtZW50KTtcbiAgICAgICAgICAgIHNlbGYubW9udGhFbGVtZW50cy5wdXNoKG1vbnRoLm1vbnRoRWxlbWVudCk7XG4gICAgICAgICAgICBzZWxmLm1vbnRoTmF2LmFwcGVuZENoaWxkKG1vbnRoLmNvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5tb250aE5hdi5hcHBlbmRDaGlsZChzZWxmLm5leHRNb250aE5hdik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhOYXYoKSB7XG4gICAgICAgIHNlbGYubW9udGhOYXYgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLW1vbnRoc1wiKTtcbiAgICAgICAgc2VsZi55ZWFyRWxlbWVudHMgPSBbXTtcbiAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzID0gW107XG4gICAgICAgIHNlbGYucHJldk1vbnRoTmF2ID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItcHJldi1tb250aFwiKTtcbiAgICAgICAgc2VsZi5wcmV2TW9udGhOYXYuaW5uZXJIVE1MID0gc2VsZi5jb25maWcucHJldkFycm93O1xuICAgICAgICBzZWxmLm5leHRNb250aE5hdiA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLW5leHQtbW9udGhcIik7XG4gICAgICAgIHNlbGYubmV4dE1vbnRoTmF2LmlubmVySFRNTCA9IHNlbGYuY29uZmlnLm5leHRBcnJvdztcbiAgICAgICAgYnVpbGRNb250aHMoKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIFwiX2hpZGVQcmV2TW9udGhBcnJvd1wiLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3c7IH0sXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChib29sKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3cgIT09IGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5wcmV2TW9udGhOYXYsIFwiZmxhdHBpY2tyLWRpc2FibGVkXCIsIGJvb2wpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9faGlkZVByZXZNb250aEFycm93ID0gYm9vbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIFwiX2hpZGVOZXh0TW9udGhBcnJvd1wiLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3c7IH0sXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChib29sKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3cgIT09IGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5uZXh0TW9udGhOYXYsIFwiZmxhdHBpY2tyLWRpc2FibGVkXCIsIGJvb2wpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9faGlkZU5leHRNb250aEFycm93ID0gYm9vbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgc2VsZi5jdXJyZW50WWVhckVsZW1lbnQgPSBzZWxmLnllYXJFbGVtZW50c1swXTtcbiAgICAgICAgdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICByZXR1cm4gc2VsZi5tb250aE5hdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGRUaW1lKCkge1xuICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJoYXNUaW1lXCIpO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcubm9DYWxlbmRhcilcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcIm5vQ2FsZW5kYXJcIik7XG4gICAgICAgIHZhciBkZWZhdWx0cyA9IGdldERlZmF1bHRIb3VycyhzZWxmLmNvbmZpZyk7XG4gICAgICAgIHNlbGYudGltZUNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItdGltZVwiKTtcbiAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIHZhciBzZXBhcmF0b3IgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImZsYXRwaWNrci10aW1lLXNlcGFyYXRvclwiLCBcIjpcIik7XG4gICAgICAgIHZhciBob3VySW5wdXQgPSBjcmVhdGVOdW1iZXJJbnB1dChcImZsYXRwaWNrci1ob3VyXCIsIHtcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBzZWxmLmwxMG4uaG91ckFyaWFMYWJlbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHNlbGYuaG91ckVsZW1lbnQgPSBob3VySW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgdmFyIG1pbnV0ZUlucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJmbGF0cGlja3ItbWludXRlXCIsIHtcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBzZWxmLmwxMG4ubWludXRlQXJpYUxhYmVsLFxuICAgICAgICB9KTtcbiAgICAgICAgc2VsZi5taW51dGVFbGVtZW50ID0gbWludXRlSW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgc2VsZi5ob3VyRWxlbWVudC50YWJJbmRleCA9IHNlbGYubWludXRlRWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnZhbHVlID0gcGFkKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqXG4gICAgICAgICAgICA/IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLmdldEhvdXJzKClcbiAgICAgICAgICAgIDogc2VsZi5jb25maWcudGltZV8yNGhyXG4gICAgICAgICAgICAgICAgPyBkZWZhdWx0cy5ob3Vyc1xuICAgICAgICAgICAgICAgIDogbWlsaXRhcnkyYW1wbShkZWZhdWx0cy5ob3VycykpO1xuICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQudmFsdWUgPSBwYWQoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouZ2V0TWludXRlcygpXG4gICAgICAgICAgICA6IGRlZmF1bHRzLm1pbnV0ZXMpO1xuICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnNldEF0dHJpYnV0ZShcInN0ZXBcIiwgc2VsZi5jb25maWcuaG91ckluY3JlbWVudC50b1N0cmluZygpKTtcbiAgICAgICAgc2VsZi5taW51dGVFbGVtZW50LnNldEF0dHJpYnV0ZShcInN0ZXBcIiwgc2VsZi5jb25maWcubWludXRlSW5jcmVtZW50LnRvU3RyaW5nKCkpO1xuICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1pblwiLCBzZWxmLmNvbmZpZy50aW1lXzI0aHIgPyBcIjBcIiA6IFwiMVwiKTtcbiAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgc2VsZi5jb25maWcudGltZV8yNGhyID8gXCIyM1wiIDogXCIxMlwiKTtcbiAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhsZW5ndGhcIiwgXCIyXCIpO1xuICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIFwiMFwiKTtcbiAgICAgICAgc2VsZi5taW51dGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1heFwiLCBcIjU5XCIpO1xuICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4bGVuZ3RoXCIsIFwiMlwiKTtcbiAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKGhvdXJJbnB1dCk7XG4gICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChzZXBhcmF0b3IpO1xuICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQobWludXRlSW5wdXQpO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcudGltZV8yNGhyKVxuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ0aW1lMjRoclwiKTtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVNlY29uZHMpIHtcbiAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGFzU2Vjb25kc1wiKTtcbiAgICAgICAgICAgIHZhciBzZWNvbmRJbnB1dCA9IGNyZWF0ZU51bWJlcklucHV0KFwiZmxhdHBpY2tyLXNlY29uZFwiKTtcbiAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudCA9IHNlY29uZElucHV0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIilbMF07XG4gICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQudmFsdWUgPSBwYWQoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICA/IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLmdldFNlY29uZHMoKVxuICAgICAgICAgICAgICAgIDogZGVmYXVsdHMuc2Vjb25kcyk7XG4gICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3RlcFwiLCBzZWxmLm1pbnV0ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKFwic3RlcFwiKSk7XG4gICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIFwiMFwiKTtcbiAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgXCI1OVwiKTtcbiAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhsZW5ndGhcIiwgXCIyXCIpO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXRpbWUtc2VwYXJhdG9yXCIsIFwiOlwiKSk7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoc2Vjb25kSW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2VsZi5jb25maWcudGltZV8yNGhyKSB7XG4gICAgICAgICAgICBzZWxmLmFtUE0gPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImZsYXRwaWNrci1hbS1wbVwiLCBzZWxmLmwxMG4uYW1QTVtpbnQoKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqXG4gICAgICAgICAgICAgICAgPyBzZWxmLmhvdXJFbGVtZW50LnZhbHVlXG4gICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5kZWZhdWx0SG91cikgPiAxMSldKTtcbiAgICAgICAgICAgIHNlbGYuYW1QTS50aXRsZSA9IHNlbGYubDEwbi50b2dnbGVUaXRsZTtcbiAgICAgICAgICAgIHNlbGYuYW1QTS50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuYW1QTSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGYudGltZUNvbnRhaW5lcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGRXZWVrZGF5cygpIHtcbiAgICAgICAgaWYgKCFzZWxmLndlZWtkYXlDb250YWluZXIpXG4gICAgICAgICAgICBzZWxmLndlZWtkYXlDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXdlZWtkYXlzXCIpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjbGVhck5vZGUoc2VsZi53ZWVrZGF5Q29udGFpbmVyKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHNlbGYuY29uZmlnLnNob3dNb250aHM7IGktLTspIHtcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXdlZWtkYXljb250YWluZXJcIik7XG4gICAgICAgICAgICBzZWxmLndlZWtkYXlDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVXZWVrZGF5cygpO1xuICAgICAgICByZXR1cm4gc2VsZi53ZWVrZGF5Q29udGFpbmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVXZWVrZGF5cygpIHtcbiAgICAgICAgaWYgKCFzZWxmLndlZWtkYXlDb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZmlyc3REYXlPZldlZWsgPSBzZWxmLmwxMG4uZmlyc3REYXlPZldlZWs7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IF9fc3ByZWFkQXJyYXlzKHNlbGYubDEwbi53ZWVrZGF5cy5zaG9ydGhhbmQpO1xuICAgICAgICBpZiAoZmlyc3REYXlPZldlZWsgPiAwICYmIGZpcnN0RGF5T2ZXZWVrIDwgd2Vla2RheXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB3ZWVrZGF5cyA9IF9fc3ByZWFkQXJyYXlzKHdlZWtkYXlzLnNwbGljZShmaXJzdERheU9mV2Vlaywgd2Vla2RheXMubGVuZ3RoKSwgd2Vla2RheXMuc3BsaWNlKDAsIGZpcnN0RGF5T2ZXZWVrKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IHNlbGYuY29uZmlnLnNob3dNb250aHM7IGktLTspIHtcbiAgICAgICAgICAgIHNlbGYud2Vla2RheUNvbnRhaW5lci5jaGlsZHJlbltpXS5pbm5lckhUTUwgPSBcIlxcbiAgICAgIDxzcGFuIGNsYXNzPSdmbGF0cGlja3Itd2Vla2RheSc+XFxuICAgICAgICBcIiArIHdlZWtkYXlzLmpvaW4oXCI8L3NwYW4+PHNwYW4gY2xhc3M9J2ZsYXRwaWNrci13ZWVrZGF5Jz5cIikgKyBcIlxcbiAgICAgIDwvc3Bhbj5cXG4gICAgICBcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZFdlZWtzKCkge1xuICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJoYXNXZWVrc1wiKTtcbiAgICAgICAgdmFyIHdlZWtXcmFwcGVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13ZWVrd3JhcHBlclwiKTtcbiAgICAgICAgd2Vla1dyYXBwZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3Itd2Vla2RheVwiLCBzZWxmLmwxMG4ud2Vla0FiYnJldmlhdGlvbikpO1xuICAgICAgICB2YXIgd2Vla051bWJlcnMgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXdlZWtzXCIpO1xuICAgICAgICB3ZWVrV3JhcHBlci5hcHBlbmRDaGlsZCh3ZWVrTnVtYmVycyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrV3JhcHBlcjogd2Vla1dyYXBwZXIsXG4gICAgICAgICAgICB3ZWVrTnVtYmVyczogd2Vla051bWJlcnMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoYW5nZU1vbnRoKHZhbHVlLCBpc09mZnNldCkge1xuICAgICAgICBpZiAoaXNPZmZzZXQgPT09IHZvaWQgMCkgeyBpc09mZnNldCA9IHRydWU7IH1cbiAgICAgICAgdmFyIGRlbHRhID0gaXNPZmZzZXQgPyB2YWx1ZSA6IHZhbHVlIC0gc2VsZi5jdXJyZW50TW9udGg7XG4gICAgICAgIGlmICgoZGVsdGEgPCAwICYmIHNlbGYuX2hpZGVQcmV2TW9udGhBcnJvdyA9PT0gdHJ1ZSkgfHxcbiAgICAgICAgICAgIChkZWx0YSA+IDAgJiYgc2VsZi5faGlkZU5leHRNb250aEFycm93ID09PSB0cnVlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc2VsZi5jdXJyZW50TW9udGggKz0gZGVsdGE7XG4gICAgICAgIGlmIChzZWxmLmN1cnJlbnRNb250aCA8IDAgfHwgc2VsZi5jdXJyZW50TW9udGggPiAxMSkge1xuICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciArPSBzZWxmLmN1cnJlbnRNb250aCA+IDExID8gMSA6IC0xO1xuICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSAoc2VsZi5jdXJyZW50TW9udGggKyAxMikgJSAxMjtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgfVxuICAgICAgICBidWlsZERheXMoKTtcbiAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbGVhcih0cmlnZ2VyQ2hhbmdlRXZlbnQsIHRvSW5pdGlhbCkge1xuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50ID09PSB2b2lkIDApIHsgdHJpZ2dlckNoYW5nZUV2ZW50ID0gdHJ1ZTsgfVxuICAgICAgICBpZiAodG9Jbml0aWFsID09PSB2b2lkIDApIHsgdG9Jbml0aWFsID0gdHJ1ZTsgfVxuICAgICAgICBzZWxmLmlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtdO1xuICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRvSW5pdGlhbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IHNlbGYuX2luaXRpYWxEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IHNlbGYuX2luaXRpYWxEYXRlLmdldE1vbnRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IGdldERlZmF1bHRIb3VycyhzZWxmLmNvbmZpZyksIGhvdXJzID0gX2EuaG91cnMsIG1pbnV0ZXMgPSBfYS5taW51dGVzLCBzZWNvbmRzID0gX2Euc2Vjb25kcztcbiAgICAgICAgICAgIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICBzZWxmLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICBpZiAoIXNlbGYuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNhbGVuZGFyQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJvcGVuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuX2lucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2xvc2VcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25EZXN0cm95XCIpO1xuICAgICAgICBmb3IgKHZhciBpID0gc2VsZi5faGFuZGxlcnMubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICBzZWxmLl9oYW5kbGVyc1tpXS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLl9oYW5kbGVycyA9IFtdO1xuICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dCkge1xuICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2VsZi5tb2JpbGVJbnB1dCk7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgJiYgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc3RhdGljICYmIHNlbGYuY2FsZW5kYXJDb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gc2VsZi5jYWxlbmRhckNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgIHdyYXBwZXIubGFzdENoaWxkICYmIHdyYXBwZXIucmVtb3ZlQ2hpbGQod3JhcHBlci5sYXN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgIGlmICh3cmFwcGVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHdyYXBwZXIuZmlyc3RDaGlsZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcHBlci5maXJzdENoaWxkLCB3cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHdyYXBwZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2VsZi5jYWxlbmRhckNvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQpIHtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2VsZi5hbHRJbnB1dCk7XG4gICAgICAgICAgICBkZWxldGUgc2VsZi5hbHRJbnB1dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5pbnB1dCkge1xuICAgICAgICAgICAgc2VsZi5pbnB1dC50eXBlID0gc2VsZi5pbnB1dC5fdHlwZTtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQuY2xhc3NMaXN0LnJlbW92ZShcImZsYXRwaWNrci1pbnB1dFwiKTtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQucmVtb3ZlQXR0cmlidXRlKFwicmVhZG9ubHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgW1xuICAgICAgICAgICAgXCJfc2hvd1RpbWVJbnB1dFwiLFxuICAgICAgICAgICAgXCJsYXRlc3RTZWxlY3RlZERhdGVPYmpcIixcbiAgICAgICAgICAgIFwiX2hpZGVOZXh0TW9udGhBcnJvd1wiLFxuICAgICAgICAgICAgXCJfaGlkZVByZXZNb250aEFycm93XCIsXG4gICAgICAgICAgICBcIl9faGlkZU5leHRNb250aEFycm93XCIsXG4gICAgICAgICAgICBcIl9faGlkZVByZXZNb250aEFycm93XCIsXG4gICAgICAgICAgICBcImlzTW9iaWxlXCIsXG4gICAgICAgICAgICBcImlzT3BlblwiLFxuICAgICAgICAgICAgXCJzZWxlY3RlZERhdGVFbGVtXCIsXG4gICAgICAgICAgICBcIm1pbkRhdGVIYXNUaW1lXCIsXG4gICAgICAgICAgICBcIm1heERhdGVIYXNUaW1lXCIsXG4gICAgICAgICAgICBcImRheXNcIixcbiAgICAgICAgICAgIFwiZGF5c0NvbnRhaW5lclwiLFxuICAgICAgICAgICAgXCJfaW5wdXRcIixcbiAgICAgICAgICAgIFwiX3Bvc2l0aW9uRWxlbWVudFwiLFxuICAgICAgICAgICAgXCJpbm5lckNvbnRhaW5lclwiLFxuICAgICAgICAgICAgXCJyQ29udGFpbmVyXCIsXG4gICAgICAgICAgICBcIm1vbnRoTmF2XCIsXG4gICAgICAgICAgICBcInRvZGF5RGF0ZUVsZW1cIixcbiAgICAgICAgICAgIFwiY2FsZW5kYXJDb250YWluZXJcIixcbiAgICAgICAgICAgIFwid2Vla2RheUNvbnRhaW5lclwiLFxuICAgICAgICAgICAgXCJwcmV2TW9udGhOYXZcIixcbiAgICAgICAgICAgIFwibmV4dE1vbnRoTmF2XCIsXG4gICAgICAgICAgICBcIm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyXCIsXG4gICAgICAgICAgICBcImN1cnJlbnRNb250aEVsZW1lbnRcIixcbiAgICAgICAgICAgIFwiY3VycmVudFllYXJFbGVtZW50XCIsXG4gICAgICAgICAgICBcIm5hdmlnYXRpb25DdXJyZW50TW9udGhcIixcbiAgICAgICAgICAgIFwic2VsZWN0ZWREYXRlRWxlbVwiLFxuICAgICAgICAgICAgXCJjb25maWdcIixcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmW2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF8pIHsgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNDYWxlbmRhckVsZW0oZWxlbSkge1xuICAgICAgICByZXR1cm4gc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jb250YWlucyhlbGVtKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9jdW1lbnRDbGljayhlKSB7XG4gICAgICAgIGlmIChzZWxmLmlzT3BlbiAmJiAhc2VsZi5jb25maWcuaW5saW5lKSB7XG4gICAgICAgICAgICB2YXIgZXZlbnRUYXJnZXRfMSA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgdmFyIGlzQ2FsZW5kYXJFbGVtZW50ID0gaXNDYWxlbmRhckVsZW0oZXZlbnRUYXJnZXRfMSk7XG4gICAgICAgICAgICB2YXIgaXNJbnB1dCA9IGV2ZW50VGFyZ2V0XzEgPT09IHNlbGYuaW5wdXQgfHxcbiAgICAgICAgICAgICAgICBldmVudFRhcmdldF8xID09PSBzZWxmLmFsdElucHV0IHx8XG4gICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LmNvbnRhaW5zKGV2ZW50VGFyZ2V0XzEpIHx8XG4gICAgICAgICAgICAgICAgKGUucGF0aCAmJlxuICAgICAgICAgICAgICAgICAgICBlLnBhdGguaW5kZXhPZiAmJlxuICAgICAgICAgICAgICAgICAgICAofmUucGF0aC5pbmRleE9mKHNlbGYuaW5wdXQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB+ZS5wYXRoLmluZGV4T2Yoc2VsZi5hbHRJbnB1dCkpKTtcbiAgICAgICAgICAgIHZhciBsb3N0Rm9jdXMgPSAhaXNJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFpc0NhbGVuZGFyRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICFpc0NhbGVuZGFyRWxlbShlLnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICAgICAgdmFyIGlzSWdub3JlZCA9ICFzZWxmLmNvbmZpZy5pZ25vcmVkRm9jdXNFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uY29udGFpbnMoZXZlbnRUYXJnZXRfMSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChsb3N0Rm9jdXMgJiYgaXNJZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmFsbG93SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKHNlbGYuX2lucHV0LnZhbHVlLCBmYWxzZSwgc2VsZi5jb25maWcuYWx0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcuYWx0Rm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi50aW1lQ29udGFpbmVyICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQudmFsdWUgIT09IFwiXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGVhcihmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2hhbmdlWWVhcihuZXdZZWFyKSB7XG4gICAgICAgIGlmICghbmV3WWVhciB8fFxuICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUgJiYgbmV3WWVhciA8IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSkgfHxcbiAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmIG5ld1llYXIgPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgbmV3WWVhck51bSA9IG5ld1llYXIsIGlzTmV3WWVhciA9IHNlbGYuY3VycmVudFllYXIgIT09IG5ld1llYXJOdW07XG4gICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBuZXdZZWFyTnVtIHx8IHNlbGYuY3VycmVudFllYXI7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gTWF0aC5taW4oc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNb250aCgpLCBzZWxmLmN1cnJlbnRNb250aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IE1hdGgubWF4KHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TW9udGgoKSwgc2VsZi5jdXJyZW50TW9udGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05ld1llYXIpIHtcbiAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblllYXJDaGFuZ2VcIik7XG4gICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNFbmFibGVkKGRhdGUsIHRpbWVsZXNzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRpbWVsZXNzID09PSB2b2lkIDApIHsgdGltZWxlc3MgPSB0cnVlOyB9XG4gICAgICAgIHZhciBkYXRlVG9DaGVjayA9IHNlbGYucGFyc2VEYXRlKGRhdGUsIHVuZGVmaW5lZCwgdGltZWxlc3MpO1xuICAgICAgICBpZiAoKHNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgIGRhdGVUb0NoZWNrICYmXG4gICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZVRvQ2hlY2ssIHNlbGYuY29uZmlnLm1pbkRhdGUsIHRpbWVsZXNzICE9PSB1bmRlZmluZWQgPyB0aW1lbGVzcyA6ICFzZWxmLm1pbkRhdGVIYXNUaW1lKSA8IDApIHx8XG4gICAgICAgICAgICAoc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrICYmXG4gICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGVUb0NoZWNrLCBzZWxmLmNvbmZpZy5tYXhEYXRlLCB0aW1lbGVzcyAhPT0gdW5kZWZpbmVkID8gdGltZWxlc3MgOiAhc2VsZi5tYXhEYXRlSGFzVGltZSkgPiAwKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5lbmFibGUgJiYgc2VsZi5jb25maWcuZGlzYWJsZS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGRhdGVUb0NoZWNrID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBib29sID0gISFzZWxmLmNvbmZpZy5lbmFibGUsIGFycmF5ID0gKF9hID0gc2VsZi5jb25maWcuZW5hYmxlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBzZWxmLmNvbmZpZy5kaXNhYmxlO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgZCA9IHZvaWQgMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkID0gYXJyYXlbaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgICAgIGQoZGF0ZVRvQ2hlY2spKVxuICAgICAgICAgICAgICAgIHJldHVybiBib29sO1xuICAgICAgICAgICAgZWxzZSBpZiAoZCBpbnN0YW5jZW9mIERhdGUgJiZcbiAgICAgICAgICAgICAgICBkYXRlVG9DaGVjayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgZC5nZXRUaW1lKCkgPT09IGRhdGVUb0NoZWNrLmdldFRpbWUoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gYm9vbDtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlZCA9IHNlbGYucGFyc2VEYXRlKGQsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZCAmJiBwYXJzZWQuZ2V0VGltZSgpID09PSBkYXRlVG9DaGVjay5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgPyBib29sXG4gICAgICAgICAgICAgICAgICAgIDogIWJvb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBkLmZyb20gJiZcbiAgICAgICAgICAgICAgICBkLnRvICYmXG4gICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2suZ2V0VGltZSgpID49IGQuZnJvbS5nZXRUaW1lKCkgJiZcbiAgICAgICAgICAgICAgICBkYXRlVG9DaGVjay5nZXRUaW1lKCkgPD0gZC50by5nZXRUaW1lKCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJvb2w7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFib29sO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0luVmlldyhlbGVtKSB7XG4gICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiAoZWxlbS5jbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZS5pbmRleE9mKFwiZmxhdHBpY2tyLWRpc2FibGVkXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5jb250YWlucyhlbGVtKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25CbHVyKGUpIHtcbiAgICAgICAgdmFyIGlzSW5wdXQgPSBlLnRhcmdldCA9PT0gc2VsZi5faW5wdXQ7XG4gICAgICAgIHZhciB2YWx1ZUNoYW5nZWQgPSBzZWxmLl9pbnB1dC52YWx1ZS50cmltRW5kKCkgIT09IGdldERhdGVTdHIoKTtcbiAgICAgICAgaWYgKGlzSW5wdXQgJiZcbiAgICAgICAgICAgIHZhbHVlQ2hhbmdlZCAmJlxuICAgICAgICAgICAgIShlLnJlbGF0ZWRUYXJnZXQgJiYgaXNDYWxlbmRhckVsZW0oZS5yZWxhdGVkVGFyZ2V0KSkpIHtcbiAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShzZWxmLl9pbnB1dC52YWx1ZSwgdHJ1ZSwgZS50YXJnZXQgPT09IHNlbGYuYWx0SW5wdXRcbiAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmFsdEZvcm1hdFxuICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gb25LZXlEb3duKGUpIHtcbiAgICAgICAgdmFyIGV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgIHZhciBpc0lucHV0ID0gc2VsZi5jb25maWcud3JhcFxuICAgICAgICAgICAgPyBlbGVtZW50LmNvbnRhaW5zKGV2ZW50VGFyZ2V0KVxuICAgICAgICAgICAgOiBldmVudFRhcmdldCA9PT0gc2VsZi5faW5wdXQ7XG4gICAgICAgIHZhciBhbGxvd0lucHV0ID0gc2VsZi5jb25maWcuYWxsb3dJbnB1dDtcbiAgICAgICAgdmFyIGFsbG93S2V5ZG93biA9IHNlbGYuaXNPcGVuICYmICghYWxsb3dJbnB1dCB8fCAhaXNJbnB1dCk7XG4gICAgICAgIHZhciBhbGxvd0lubGluZUtleWRvd24gPSBzZWxmLmNvbmZpZy5pbmxpbmUgJiYgaXNJbnB1dCAmJiAhYWxsb3dJbnB1dDtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMgJiYgaXNJbnB1dCkge1xuICAgICAgICAgICAgaWYgKGFsbG93SW5wdXQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUoc2VsZi5faW5wdXQudmFsdWUsIHRydWUsIGV2ZW50VGFyZ2V0ID09PSBzZWxmLmFsdElucHV0XG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcuYWx0Rm9ybWF0XG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBldmVudFRhcmdldC5ibHVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLm9wZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0NhbGVuZGFyRWxlbShldmVudFRhcmdldCkgfHxcbiAgICAgICAgICAgIGFsbG93S2V5ZG93biB8fFxuICAgICAgICAgICAgYWxsb3dJbmxpbmVLZXlkb3duKSB7XG4gICAgICAgICAgICB2YXIgaXNUaW1lT2JqID0gISFzZWxmLnRpbWVDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuY29udGFpbnMoZXZlbnRUYXJnZXQpO1xuICAgICAgICAgICAgc3dpdGNoIChlLmtleUNvZGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaW1lT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb2N1c0FuZENsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RGF0ZShlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBmb2N1c0FuZENsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnB1dCAmJiAhc2VsZi5jb25maWcuYWxsb3dJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RpbWVPYmogJiYgIWlzSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZ2V0Q2xvc2VzdEFjdGl2ZUVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvd0lucHV0ID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWN0aXZlRWxlbWVudCAmJiBpc0luVmlldyhhY3RpdmVFbGVtZW50KSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhXzEgPSBlLmtleUNvZGUgPT09IDM5ID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KHVuZGVmaW5lZCwgZGVsdGFfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZU1vbnRoKGRlbHRhXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KGdldEZpcnN0QXZhaWxhYmxlRGF5KDEpLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5ob3VyRWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IGUua2V5Q29kZSA9PT0gNDAgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoc2VsZi5kYXlzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldC4kaSAhPT0gdW5kZWZpbmVkKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQgPT09IHNlbGYuaW5wdXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0ID09PSBzZWxmLmFsdElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jdHJsS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgLSBkZWx0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNPbkRheShnZXRGaXJzdEF2YWlsYWJsZURheSgxKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNUaW1lT2JqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkodW5kZWZpbmVkLCBkZWx0YSAqIDcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0ID09PSBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlWWVhcihzZWxmLmN1cnJlbnRZZWFyIC0gZGVsdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNUaW1lT2JqICYmIHNlbGYuaG91ckVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlYm91bmNlZENoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGltZU9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0sXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChzZWxmLnBsdWdpbkVsZW1lbnRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHg7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBlbGVtcy5pbmRleE9mKGV2ZW50VGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlbGVtc1tpICsgKGUuc2hpZnRLZXkgPyAtMSA6IDEpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldCB8fCBzZWxmLl9pbnB1dCkuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghc2VsZi5jb25maWcubm9DYWxlbmRhciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIuY29udGFpbnMoZXZlbnRUYXJnZXQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZCAmJiBldmVudFRhcmdldCA9PT0gc2VsZi5hbVBNKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGUua2V5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBzZWxmLmwxMG4uYW1QTVswXS5jaGFyQXQoMCk6XG4gICAgICAgICAgICAgICAgY2FzZSBzZWxmLmwxMG4uYW1QTVswXS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTpcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRleHRDb250ZW50ID0gc2VsZi5sMTBuLmFtUE1bMF07XG4gICAgICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbUlucHV0cygpO1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzFdLmNoYXJBdCgwKTpcbiAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzFdLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpOlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPSBzZWxmLmwxMG4uYW1QTVsxXTtcbiAgICAgICAgICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0lucHV0IHx8IGlzQ2FsZW5kYXJFbGVtKGV2ZW50VGFyZ2V0KSkge1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25LZXlEb3duXCIsIGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uTW91c2VPdmVyKGVsZW0sIGNlbGxDbGFzcykge1xuICAgICAgICBpZiAoY2VsbENsYXNzID09PSB2b2lkIDApIHsgY2VsbENsYXNzID0gXCJmbGF0cGlja3ItZGF5XCI7IH1cbiAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggIT09IDEgfHxcbiAgICAgICAgICAgIChlbGVtICYmXG4gICAgICAgICAgICAgICAgKCFlbGVtLmNsYXNzTGlzdC5jb250YWlucyhjZWxsQ2xhc3MpIHx8XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRpc2FibGVkXCIpKSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBob3ZlckRhdGUgPSBlbGVtXG4gICAgICAgICAgICA/IGVsZW0uZGF0ZU9iai5nZXRUaW1lKClcbiAgICAgICAgICAgIDogc2VsZi5kYXlzLmZpcnN0RWxlbWVudENoaWxkLmRhdGVPYmouZ2V0VGltZSgpLCBpbml0aWFsRGF0ZSA9IHNlbGYucGFyc2VEYXRlKHNlbGYuc2VsZWN0ZWREYXRlc1swXSwgdW5kZWZpbmVkLCB0cnVlKS5nZXRUaW1lKCksIHJhbmdlU3RhcnREYXRlID0gTWF0aC5taW4oaG92ZXJEYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0VGltZSgpKSwgcmFuZ2VFbmREYXRlID0gTWF0aC5tYXgoaG92ZXJEYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0VGltZSgpKTtcbiAgICAgICAgdmFyIGNvbnRhaW5zRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIG1pblJhbmdlID0gMCwgbWF4UmFuZ2UgPSAwO1xuICAgICAgICBmb3IgKHZhciB0ID0gcmFuZ2VTdGFydERhdGU7IHQgPCByYW5nZUVuZERhdGU7IHQgKz0gZHVyYXRpb24uREFZKSB7XG4gICAgICAgICAgICBpZiAoIWlzRW5hYmxlZChuZXcgRGF0ZSh0KSwgdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb250YWluc0Rpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnNEaXNhYmxlZCB8fCAodCA+IHJhbmdlU3RhcnREYXRlICYmIHQgPCByYW5nZUVuZERhdGUpO1xuICAgICAgICAgICAgICAgIGlmICh0IDwgaW5pdGlhbERhdGUgJiYgKCFtaW5SYW5nZSB8fCB0ID4gbWluUmFuZ2UpKVxuICAgICAgICAgICAgICAgICAgICBtaW5SYW5nZSA9IHQ7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodCA+IGluaXRpYWxEYXRlICYmICghbWF4UmFuZ2UgfHwgdCA8IG1heFJhbmdlKSlcbiAgICAgICAgICAgICAgICAgICAgbWF4UmFuZ2UgPSB0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBob3ZlcmFibGVDZWxscyA9IEFycmF5LmZyb20oc2VsZi5yQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqOm50aC1jaGlsZCgtbitcIiArIHNlbGYuY29uZmlnLnNob3dNb250aHMgKyBcIikgPiAuXCIgKyBjZWxsQ2xhc3MpKTtcbiAgICAgICAgaG92ZXJhYmxlQ2VsbHMuZm9yRWFjaChmdW5jdGlvbiAoZGF5RWxlbSkge1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBkYXlFbGVtLmRhdGVPYmo7XG4gICAgICAgICAgICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICB2YXIgb3V0T2ZSYW5nZSA9IChtaW5SYW5nZSA+IDAgJiYgdGltZXN0YW1wIDwgbWluUmFuZ2UpIHx8XG4gICAgICAgICAgICAgICAgKG1heFJhbmdlID4gMCAmJiB0aW1lc3RhbXAgPiBtYXhSYW5nZSk7XG4gICAgICAgICAgICBpZiAob3V0T2ZSYW5nZSkge1xuICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LmFkZChcIm5vdEFsbG93ZWRcIik7XG4gICAgICAgICAgICAgICAgW1wiaW5SYW5nZVwiLCBcInN0YXJ0UmFuZ2VcIiwgXCJlbmRSYW5nZVwiXS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LnJlbW92ZShjKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb250YWluc0Rpc2FibGVkICYmICFvdXRPZlJhbmdlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIFtcInN0YXJ0UmFuZ2VcIiwgXCJpblJhbmdlXCIsIFwiZW5kUmFuZ2VcIiwgXCJub3RBbGxvd2VkXCJdLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgICAgICBkYXlFbGVtLmNsYXNzTGlzdC5yZW1vdmUoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChlbGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoaG92ZXJEYXRlIDw9IHNlbGYuc2VsZWN0ZWREYXRlc1swXS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgPyBcInN0YXJ0UmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiZW5kUmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgaWYgKGluaXRpYWxEYXRlIDwgaG92ZXJEYXRlICYmIHRpbWVzdGFtcCA9PT0gaW5pdGlhbERhdGUpXG4gICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LmFkZChcInN0YXJ0UmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5pdGlhbERhdGUgPiBob3ZlckRhdGUgJiYgdGltZXN0YW1wID09PSBpbml0aWFsRGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwiZW5kUmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVzdGFtcCA+PSBtaW5SYW5nZSAmJlxuICAgICAgICAgICAgICAgICAgICAobWF4UmFuZ2UgPT09IDAgfHwgdGltZXN0YW1wIDw9IG1heFJhbmdlKSAmJlxuICAgICAgICAgICAgICAgICAgICBpc0JldHdlZW4odGltZXN0YW1wLCBpbml0aWFsRGF0ZSwgaG92ZXJEYXRlKSlcbiAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwiaW5SYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uUmVzaXplKCkge1xuICAgICAgICBpZiAoc2VsZi5pc09wZW4gJiYgIXNlbGYuY29uZmlnLnN0YXRpYyAmJiAhc2VsZi5jb25maWcuaW5saW5lKVxuICAgICAgICAgICAgcG9zaXRpb25DYWxlbmRhcigpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvcGVuKGUsIHBvc2l0aW9uRWxlbWVudCkge1xuICAgICAgICBpZiAocG9zaXRpb25FbGVtZW50ID09PSB2b2lkIDApIHsgcG9zaXRpb25FbGVtZW50ID0gc2VsZi5fcG9zaXRpb25FbGVtZW50OyB9XG4gICAgICAgIGlmIChzZWxmLmlzTW9iaWxlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChlKTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQuYmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5jbGljaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25PcGVuXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlbGYuX2lucHV0LmRpc2FibGVkIHx8IHNlbGYuY29uZmlnLmlubGluZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciB3YXNPcGVuID0gc2VsZi5pc09wZW47XG4gICAgICAgIHNlbGYuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF3YXNPcGVuKSB7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJvcGVuXCIpO1xuICAgICAgICAgICAgc2VsZi5faW5wdXQuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uT3BlblwiKTtcbiAgICAgICAgICAgIHBvc2l0aW9uQ2FsZW5kYXIocG9zaXRpb25FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSAmJiBzZWxmLmNvbmZpZy5ub0NhbGVuZGFyID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuYWxsb3dJbnB1dCA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgICAoZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgICFzZWxmLnRpbWVDb250YWluZXIuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KSkpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuaG91ckVsZW1lbnQuc2VsZWN0KCk7IH0sIDUwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtaW5NYXhEYXRlU2V0dGVyKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgICAgICB2YXIgZGF0ZU9iaiA9IChzZWxmLmNvbmZpZ1tcIl9cIiArIHR5cGUgKyBcIkRhdGVcIl0gPSBzZWxmLnBhcnNlRGF0ZShkYXRlLCBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KSk7XG4gICAgICAgICAgICB2YXIgaW52ZXJzZURhdGVPYmogPSBzZWxmLmNvbmZpZ1tcIl9cIiArICh0eXBlID09PSBcIm1pblwiID8gXCJtYXhcIiA6IFwibWluXCIpICsgXCJEYXRlXCJdO1xuICAgICAgICAgICAgaWYgKGRhdGVPYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGZbdHlwZSA9PT0gXCJtaW5cIiA/IFwibWluRGF0ZUhhc1RpbWVcIiA6IFwibWF4RGF0ZUhhc1RpbWVcIl0gPVxuICAgICAgICAgICAgICAgICAgICBkYXRlT2JqLmdldEhvdXJzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlT2JqLmdldE1pbnV0ZXMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmouZ2V0U2Vjb25kcygpID4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMgPSBzZWxmLnNlbGVjdGVkRGF0ZXMuZmlsdGVyKGZ1bmN0aW9uIChkKSB7IHJldHVybiBpc0VuYWJsZWQoZCk7IH0pO1xuICAgICAgICAgICAgICAgIGlmICghc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCAmJiB0eXBlID09PSBcIm1pblwiKVxuICAgICAgICAgICAgICAgICAgICBzZXRIb3Vyc0Zyb21EYXRlKGRhdGVPYmopO1xuICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgcmVkcmF3KCk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGVPYmogIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhckVsZW1lbnRbdHlwZV0gPSBkYXRlT2JqLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0eXBlKTtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudC5kaXNhYmxlZCA9XG4gICAgICAgICAgICAgICAgICAgICEhaW52ZXJzZURhdGVPYmogJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmogIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaW52ZXJzZURhdGVPYmouZ2V0RnVsbFllYXIoKSA9PT0gZGF0ZU9iai5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUNvbmZpZygpIHtcbiAgICAgICAgdmFyIGJvb2xPcHRzID0gW1xuICAgICAgICAgICAgXCJ3cmFwXCIsXG4gICAgICAgICAgICBcIndlZWtOdW1iZXJzXCIsXG4gICAgICAgICAgICBcImFsbG93SW5wdXRcIixcbiAgICAgICAgICAgIFwiYWxsb3dJbnZhbGlkUHJlbG9hZFwiLFxuICAgICAgICAgICAgXCJjbGlja09wZW5zXCIsXG4gICAgICAgICAgICBcInRpbWVfMjRoclwiLFxuICAgICAgICAgICAgXCJlbmFibGVUaW1lXCIsXG4gICAgICAgICAgICBcIm5vQ2FsZW5kYXJcIixcbiAgICAgICAgICAgIFwiYWx0SW5wdXRcIixcbiAgICAgICAgICAgIFwic2hvcnRoYW5kQ3VycmVudE1vbnRoXCIsXG4gICAgICAgICAgICBcImlubGluZVwiLFxuICAgICAgICAgICAgXCJzdGF0aWNcIixcbiAgICAgICAgICAgIFwiZW5hYmxlU2Vjb25kc1wiLFxuICAgICAgICAgICAgXCJkaXNhYmxlTW9iaWxlXCIsXG4gICAgICAgIF07XG4gICAgICAgIHZhciB1c2VyQ29uZmlnID0gX19hc3NpZ24oX19hc3NpZ24oe30sIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZWxlbWVudC5kYXRhc2V0IHx8IHt9KSkpLCBpbnN0YW5jZUNvbmZpZyk7XG4gICAgICAgIHZhciBmb3JtYXRzID0ge307XG4gICAgICAgIHNlbGYuY29uZmlnLnBhcnNlRGF0ZSA9IHVzZXJDb25maWcucGFyc2VEYXRlO1xuICAgICAgICBzZWxmLmNvbmZpZy5mb3JtYXREYXRlID0gdXNlckNvbmZpZy5mb3JtYXREYXRlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwiZW5hYmxlXCIsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX2VuYWJsZTsgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGRhdGVzKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuX2VuYWJsZSA9IHBhcnNlRGF0ZVJ1bGVzKGRhdGVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwiZGlzYWJsZVwiLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9kaXNhYmxlOyB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5fZGlzYWJsZSA9IHBhcnNlRGF0ZVJ1bGVzKGRhdGVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgdGltZU1vZGUgPSB1c2VyQ29uZmlnLm1vZGUgPT09IFwidGltZVwiO1xuICAgICAgICBpZiAoIXVzZXJDb25maWcuZGF0ZUZvcm1hdCAmJiAodXNlckNvbmZpZy5lbmFibGVUaW1lIHx8IHRpbWVNb2RlKSkge1xuICAgICAgICAgICAgdmFyIGRlZmF1bHREYXRlRm9ybWF0ID0gZmxhdHBpY2tyLmRlZmF1bHRDb25maWcuZGF0ZUZvcm1hdCB8fCBkZWZhdWx0T3B0aW9ucy5kYXRlRm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0cy5kYXRlRm9ybWF0ID1cbiAgICAgICAgICAgICAgICB1c2VyQ29uZmlnLm5vQ2FsZW5kYXIgfHwgdGltZU1vZGVcbiAgICAgICAgICAgICAgICAgICAgPyBcIkg6aVwiICsgKHVzZXJDb25maWcuZW5hYmxlU2Vjb25kcyA/IFwiOlNcIiA6IFwiXCIpXG4gICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdERhdGVGb3JtYXQgKyBcIiBIOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTXCIgOiBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlckNvbmZpZy5hbHRJbnB1dCAmJlxuICAgICAgICAgICAgKHVzZXJDb25maWcuZW5hYmxlVGltZSB8fCB0aW1lTW9kZSkgJiZcbiAgICAgICAgICAgICF1c2VyQ29uZmlnLmFsdEZvcm1hdCkge1xuICAgICAgICAgICAgdmFyIGRlZmF1bHRBbHRGb3JtYXQgPSBmbGF0cGlja3IuZGVmYXVsdENvbmZpZy5hbHRGb3JtYXQgfHwgZGVmYXVsdE9wdGlvbnMuYWx0Rm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0cy5hbHRGb3JtYXQgPVxuICAgICAgICAgICAgICAgIHVzZXJDb25maWcubm9DYWxlbmRhciB8fCB0aW1lTW9kZVxuICAgICAgICAgICAgICAgICAgICA/IFwiaDppXCIgKyAodXNlckNvbmZpZy5lbmFibGVTZWNvbmRzID8gXCI6UyBLXCIgOiBcIiBLXCIpXG4gICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdEFsdEZvcm1hdCArIChcIiBoOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTXCIgOiBcIlwiKSArIFwiIEtcIik7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1pbkRhdGVcIiwge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fbWluRGF0ZTsgfSxcbiAgICAgICAgICAgIHNldDogbWluTWF4RGF0ZVNldHRlcihcIm1pblwiKSxcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJtYXhEYXRlXCIsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX21heERhdGU7IH0sXG4gICAgICAgICAgICBzZXQ6IG1pbk1heERhdGVTZXR0ZXIoXCJtYXhcIiksXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgbWluTWF4VGltZVNldHRlciA9IGZ1bmN0aW9uICh0eXBlKSB7IHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBzZWxmLmNvbmZpZ1t0eXBlID09PSBcIm1pblwiID8gXCJfbWluVGltZVwiIDogXCJfbWF4VGltZVwiXSA9IHNlbGYucGFyc2VEYXRlKHZhbCwgXCJIOmk6U1wiKTtcbiAgICAgICAgfTsgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1pblRpbWVcIiwge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fbWluVGltZTsgfSxcbiAgICAgICAgICAgIHNldDogbWluTWF4VGltZVNldHRlcihcIm1pblwiKSxcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJtYXhUaW1lXCIsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX21heFRpbWU7IH0sXG4gICAgICAgICAgICBzZXQ6IG1pbk1heFRpbWVTZXR0ZXIoXCJtYXhcIiksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodXNlckNvbmZpZy5tb2RlID09PSBcInRpbWVcIikge1xuICAgICAgICAgICAgc2VsZi5jb25maWcubm9DYWxlbmRhciA9IHRydWU7XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5lbmFibGVUaW1lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHNlbGYuY29uZmlnLCBmb3JtYXRzLCB1c2VyQ29uZmlnKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29sT3B0cy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHNlbGYuY29uZmlnW2Jvb2xPcHRzW2ldXSA9XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWdbYm9vbE9wdHNbaV1dID09PSB0cnVlIHx8XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2Jvb2xPcHRzW2ldXSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgIEhPT0tTLmZpbHRlcihmdW5jdGlvbiAoaG9vaykgeyByZXR1cm4gc2VsZi5jb25maWdbaG9va10gIT09IHVuZGVmaW5lZDsgfSkuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICAgICAgICAgICAgc2VsZi5jb25maWdbaG9va10gPSBhcnJheWlmeShzZWxmLmNvbmZpZ1tob29rXSB8fCBbXSkubWFwKGJpbmRUb0luc3RhbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNlbGYuaXNNb2JpbGUgPVxuICAgICAgICAgICAgIXNlbGYuY29uZmlnLmRpc2FibGVNb2JpbGUgJiZcbiAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcuaW5saW5lICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSA9PT0gXCJzaW5nbGVcIiAmJlxuICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5kaXNhYmxlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5lbmFibGUgJiZcbiAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcud2Vla051bWJlcnMgJiZcbiAgICAgICAgICAgICAgICAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5jb25maWcucGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHBsdWdpbkNvbmYgPSBzZWxmLmNvbmZpZy5wbHVnaW5zW2ldKHNlbGYpIHx8IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHBsdWdpbkNvbmYpIHtcbiAgICAgICAgICAgICAgICBpZiAoSE9PS1MuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdba2V5XSA9IGFycmF5aWZ5KHBsdWdpbkNvbmZba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoYmluZFRvSW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KHNlbGYuY29uZmlnW2tleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdXNlckNvbmZpZ1trZXldID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1trZXldID0gcGx1Z2luQ29uZltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdXNlckNvbmZpZy5hbHRJbnB1dENsYXNzKSB7XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5hbHRJbnB1dENsYXNzID1cbiAgICAgICAgICAgICAgICBnZXRJbnB1dEVsZW0oKS5jbGFzc05hbWUgKyBcIiBcIiArIHNlbGYuY29uZmlnLmFsdElucHV0Q2xhc3M7XG4gICAgICAgIH1cbiAgICAgICAgdHJpZ2dlckV2ZW50KFwib25QYXJzZUNvbmZpZ1wiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SW5wdXRFbGVtKCkge1xuICAgICAgICByZXR1cm4gc2VsZi5jb25maWcud3JhcFxuICAgICAgICAgICAgPyBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1pbnB1dF1cIilcbiAgICAgICAgICAgIDogZWxlbWVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0dXBMb2NhbGUoKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZi5jb25maWcubG9jYWxlICE9PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICB0eXBlb2YgZmxhdHBpY2tyLmwxMG5zW3NlbGYuY29uZmlnLmxvY2FsZV0gPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5lcnJvckhhbmRsZXIobmV3IEVycm9yKFwiZmxhdHBpY2tyOiBpbnZhbGlkIGxvY2FsZSBcIiArIHNlbGYuY29uZmlnLmxvY2FsZSkpO1xuICAgICAgICBzZWxmLmwxMG4gPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZmxhdHBpY2tyLmwxMG5zLmRlZmF1bHQpLCAodHlwZW9mIHNlbGYuY29uZmlnLmxvY2FsZSA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5sb2NhbGVcbiAgICAgICAgICAgIDogc2VsZi5jb25maWcubG9jYWxlICE9PSBcImRlZmF1bHRcIlxuICAgICAgICAgICAgICAgID8gZmxhdHBpY2tyLmwxMG5zW3NlbGYuY29uZmlnLmxvY2FsZV1cbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCkpO1xuICAgICAgICB0b2tlblJlZ2V4LkQgPSBcIihcIiArIHNlbGYubDEwbi53ZWVrZGF5cy5zaG9ydGhhbmQuam9pbihcInxcIikgKyBcIilcIjtcbiAgICAgICAgdG9rZW5SZWdleC5sID0gXCIoXCIgKyBzZWxmLmwxMG4ud2Vla2RheXMubG9uZ2hhbmQuam9pbihcInxcIikgKyBcIilcIjtcbiAgICAgICAgdG9rZW5SZWdleC5NID0gXCIoXCIgKyBzZWxmLmwxMG4ubW9udGhzLnNob3J0aGFuZC5qb2luKFwifFwiKSArIFwiKVwiO1xuICAgICAgICB0b2tlblJlZ2V4LkYgPSBcIihcIiArIHNlbGYubDEwbi5tb250aHMubG9uZ2hhbmQuam9pbihcInxcIikgKyBcIilcIjtcbiAgICAgICAgdG9rZW5SZWdleC5LID0gXCIoXCIgKyBzZWxmLmwxMG4uYW1QTVswXSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMV0gKyBcInxcIiArIHNlbGYubDEwbi5hbVBNWzBdLnRvTG93ZXJDYXNlKCkgKyBcInxcIiArIHNlbGYubDEwbi5hbVBNWzFdLnRvTG93ZXJDYXNlKCkgKyBcIilcIjtcbiAgICAgICAgdmFyIHVzZXJDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaW5zdGFuY2VDb25maWcpLCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGVsZW1lbnQuZGF0YXNldCB8fCB7fSkpKTtcbiAgICAgICAgaWYgKHVzZXJDb25maWcudGltZV8yNGhyID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnLnRpbWVfMjRociA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy50aW1lXzI0aHIgPSBzZWxmLmwxMG4udGltZV8yNGhyO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuZm9ybWF0RGF0ZSA9IGNyZWF0ZURhdGVGb3JtYXR0ZXIoc2VsZik7XG4gICAgICAgIHNlbGYucGFyc2VEYXRlID0gY3JlYXRlRGF0ZVBhcnNlcih7IGNvbmZpZzogc2VsZi5jb25maWcsIGwxMG46IHNlbGYubDEwbiB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9zaXRpb25DYWxlbmRhcihjdXN0b21Qb3NpdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxmLmNvbmZpZy5wb3NpdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdm9pZCBzZWxmLmNvbmZpZy5wb3NpdGlvbihzZWxmLCBjdXN0b21Qb3NpdGlvbkVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmNhbGVuZGFyQ29udGFpbmVyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRyaWdnZXJFdmVudChcIm9uUHJlQ2FsZW5kYXJQb3NpdGlvblwiKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uRWxlbWVudCA9IGN1c3RvbVBvc2l0aW9uRWxlbWVudCB8fCBzZWxmLl9wb3NpdGlvbkVsZW1lbnQ7XG4gICAgICAgIHZhciBjYWxlbmRhckhlaWdodCA9IEFycmF5LnByb3RvdHlwZS5yZWR1Y2UuY2FsbChzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNoaWxkcmVuLCAoZnVuY3Rpb24gKGFjYywgY2hpbGQpIHsgcmV0dXJuIGFjYyArIGNoaWxkLm9mZnNldEhlaWdodDsgfSksIDApLCBjYWxlbmRhcldpZHRoID0gc2VsZi5jYWxlbmRhckNvbnRhaW5lci5vZmZzZXRXaWR0aCwgY29uZmlnUG9zID0gc2VsZi5jb25maWcucG9zaXRpb24uc3BsaXQoXCIgXCIpLCBjb25maWdQb3NWZXJ0aWNhbCA9IGNvbmZpZ1Bvc1swXSwgY29uZmlnUG9zSG9yaXpvbnRhbCA9IGNvbmZpZ1Bvcy5sZW5ndGggPiAxID8gY29uZmlnUG9zWzFdIDogbnVsbCwgaW5wdXRCb3VuZHMgPSBwb3NpdGlvbkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGRpc3RhbmNlRnJvbUJvdHRvbSA9IHdpbmRvdy5pbm5lckhlaWdodCAtIGlucHV0Qm91bmRzLmJvdHRvbSwgc2hvd09uVG9wID0gY29uZmlnUG9zVmVydGljYWwgPT09IFwiYWJvdmVcIiB8fFxuICAgICAgICAgICAgKGNvbmZpZ1Bvc1ZlcnRpY2FsICE9PSBcImJlbG93XCIgJiZcbiAgICAgICAgICAgICAgICBkaXN0YW5jZUZyb21Cb3R0b20gPCBjYWxlbmRhckhlaWdodCAmJlxuICAgICAgICAgICAgICAgIGlucHV0Qm91bmRzLnRvcCA+IGNhbGVuZGFySGVpZ2h0KTtcbiAgICAgICAgdmFyIHRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCArXG4gICAgICAgICAgICBpbnB1dEJvdW5kcy50b3AgK1xuICAgICAgICAgICAgKCFzaG93T25Ub3AgPyBwb3NpdGlvbkVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgMiA6IC1jYWxlbmRhckhlaWdodCAtIDIpO1xuICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFycm93VG9wXCIsICFzaG93T25Ub3ApO1xuICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFycm93Qm90dG9tXCIsIHNob3dPblRvcCk7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBsZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0ICsgaW5wdXRCb3VuZHMubGVmdDtcbiAgICAgICAgdmFyIGlzQ2VudGVyID0gZmFsc2U7XG4gICAgICAgIHZhciBpc1JpZ2h0ID0gZmFsc2U7XG4gICAgICAgIGlmIChjb25maWdQb3NIb3Jpem9udGFsID09PSBcImNlbnRlclwiKSB7XG4gICAgICAgICAgICBsZWZ0IC09IChjYWxlbmRhcldpZHRoIC0gaW5wdXRCb3VuZHMud2lkdGgpIC8gMjtcbiAgICAgICAgICAgIGlzQ2VudGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb25maWdQb3NIb3Jpem9udGFsID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICAgIGxlZnQgLT0gY2FsZW5kYXJXaWR0aCAtIGlucHV0Qm91bmRzLndpZHRoO1xuICAgICAgICAgICAgaXNSaWdodCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhcnJvd0xlZnRcIiwgIWlzQ2VudGVyICYmICFpc1JpZ2h0KTtcbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhcnJvd0NlbnRlclwiLCBpc0NlbnRlcik7XG4gICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dSaWdodFwiLCBpc1JpZ2h0KTtcbiAgICAgICAgdmFyIHJpZ2h0ID0gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGggLVxuICAgICAgICAgICAgKHdpbmRvdy5wYWdlWE9mZnNldCArIGlucHV0Qm91bmRzLnJpZ2h0KTtcbiAgICAgICAgdmFyIHJpZ2h0TW9zdCA9IGxlZnQgKyBjYWxlbmRhcldpZHRoID4gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7XG4gICAgICAgIHZhciBjZW50ZXJNb3N0ID0gcmlnaHQgKyBjYWxlbmRhcldpZHRoID4gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7XG4gICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwicmlnaHRNb3N0XCIsIHJpZ2h0TW9zdCk7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5zdGF0aWMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUudG9wID0gdG9wICsgXCJweFwiO1xuICAgICAgICBpZiAoIXJpZ2h0TW9zdCkge1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gbGVmdCArIFwicHhcIjtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY2VudGVyTW9zdCkge1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gXCJhdXRvXCI7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gcmlnaHQgKyBcInB4XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgZG9jID0gZ2V0RG9jdW1lbnRTdHlsZVNoZWV0KCk7XG4gICAgICAgICAgICBpZiAoZG9jID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGJvZHlXaWR0aCA9IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgdmFyIGNlbnRlckxlZnQgPSBNYXRoLm1heCgwLCBib2R5V2lkdGggLyAyIC0gY2FsZW5kYXJXaWR0aCAvIDIpO1xuICAgICAgICAgICAgdmFyIGNlbnRlckJlZm9yZSA9IFwiLmZsYXRwaWNrci1jYWxlbmRhci5jZW50ZXJNb3N0OmJlZm9yZVwiO1xuICAgICAgICAgICAgdmFyIGNlbnRlckFmdGVyID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyLmNlbnRlck1vc3Q6YWZ0ZXJcIjtcbiAgICAgICAgICAgIHZhciBjZW50ZXJJbmRleCA9IGRvYy5jc3NSdWxlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgY2VudGVyU3R5bGUgPSBcIntsZWZ0OlwiICsgaW5wdXRCb3VuZHMubGVmdCArIFwicHg7cmlnaHQ6YXV0bzt9XCI7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcInJpZ2h0TW9zdFwiLCBmYWxzZSk7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImNlbnRlck1vc3RcIiwgdHJ1ZSk7XG4gICAgICAgICAgICBkb2MuaW5zZXJ0UnVsZShjZW50ZXJCZWZvcmUgKyBcIixcIiArIGNlbnRlckFmdGVyICsgY2VudGVyU3R5bGUsIGNlbnRlckluZGV4KTtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUubGVmdCA9IGNlbnRlckxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RG9jdW1lbnRTdHlsZVNoZWV0KCkge1xuICAgICAgICB2YXIgZWRpdGFibGVTaGVldCA9IG51bGw7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzaGVldCA9IGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgICAgICAgICAgaWYgKCFzaGVldC5jc3NSdWxlcylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc2hlZXQuY3NzUnVsZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlZGl0YWJsZVNoZWV0ID0gc2hlZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWRpdGFibGVTaGVldCAhPSBudWxsID8gZWRpdGFibGVTaGVldCA6IGNyZWF0ZVN0eWxlU2hlZXQoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlU3R5bGVTaGVldCgpIHtcbiAgICAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICAgICAgcmV0dXJuIHN0eWxlLnNoZWV0O1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWRyYXcoKSB7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5ub0NhbGVuZGFyIHx8IHNlbGYuaXNNb2JpbGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICBidWlsZERheXMoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZm9jdXNBbmRDbG9zZSgpIHtcbiAgICAgICAgc2VsZi5faW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJNU0lFXCIpICE9PSAtMSB8fFxuICAgICAgICAgICAgbmF2aWdhdG9yLm1zTWF4VG91Y2hQb2ludHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChzZWxmLmNsb3NlLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZWxlY3REYXRlKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB2YXIgaXNTZWxlY3RhYmxlID0gZnVuY3Rpb24gKGRheSkge1xuICAgICAgICAgICAgcmV0dXJuIGRheS5jbGFzc0xpc3QgJiZcbiAgICAgICAgICAgICAgICBkYXkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRheVwiKSAmJlxuICAgICAgICAgICAgICAgICFkYXkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRpc2FibGVkXCIpICYmXG4gICAgICAgICAgICAgICAgIWRheS5jbGFzc0xpc3QuY29udGFpbnMoXCJub3RBbGxvd2VkXCIpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgdCA9IGZpbmRQYXJlbnQoZ2V0RXZlbnRUYXJnZXQoZSksIGlzU2VsZWN0YWJsZSk7XG4gICAgICAgIGlmICh0ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciB0YXJnZXQgPSB0O1xuICAgICAgICB2YXIgc2VsZWN0ZWREYXRlID0gKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID0gbmV3IERhdGUodGFyZ2V0LmRhdGVPYmouZ2V0VGltZSgpKSk7XG4gICAgICAgIHZhciBzaG91bGRDaGFuZ2VNb250aCA9IChzZWxlY3RlZERhdGUuZ2V0TW9udGgoKSA8IHNlbGYuY3VycmVudE1vbnRoIHx8XG4gICAgICAgICAgICBzZWxlY3RlZERhdGUuZ2V0TW9udGgoKSA+XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggKyBzZWxmLmNvbmZpZy5zaG93TW9udGhzIC0gMSkgJiZcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIjtcbiAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVFbGVtID0gdGFyZ2V0O1xuICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJzaW5nbGVcIilcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtzZWxlY3RlZERhdGVdO1xuICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcIm11bHRpcGxlXCIpIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZEluZGV4ID0gaXNEYXRlU2VsZWN0ZWQoc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEluZGV4KVxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5zcGxpY2UocGFyc2VJbnQoc2VsZWN0ZWRJbmRleCksIDEpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5wdXNoKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIHNlbGYuY2xlYXIoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID0gc2VsZWN0ZWREYXRlO1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnB1c2goc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlRGF0ZXMoc2VsZWN0ZWREYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHRydWUpICE9PSAwKVxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmdldFRpbWUoKSAtIGIuZ2V0VGltZSgpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRIb3Vyc0Zyb21JbnB1dHMoKTtcbiAgICAgICAgaWYgKHNob3VsZENoYW5nZU1vbnRoKSB7XG4gICAgICAgICAgICB2YXIgaXNOZXdZZWFyID0gc2VsZi5jdXJyZW50WWVhciAhPT0gc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0gc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IHNlbGVjdGVkRGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgaWYgKGlzTmV3WWVhcikge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk1vbnRoQ2hhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKTtcbiAgICAgICAgYnVpbGREYXlzKCk7XG4gICAgICAgIHVwZGF0ZVZhbHVlKCk7XG4gICAgICAgIGlmICghc2hvdWxkQ2hhbmdlTW9udGggJiZcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIiAmJlxuICAgICAgICAgICAgc2VsZi5jb25maWcuc2hvd01vbnRocyA9PT0gMSlcbiAgICAgICAgICAgIGZvY3VzT25EYXlFbGVtKHRhcmdldCk7XG4gICAgICAgIGVsc2UgaWYgKHNlbGYuc2VsZWN0ZWREYXRlRWxlbSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlRWxlbSAmJiBzZWxmLnNlbGVjdGVkRGF0ZUVsZW0uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkICYmIHNlbGYuaG91ckVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgICAgICAgIHZhciBzaW5nbGUgPSBzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiICYmICFzZWxmLmNvbmZpZy5lbmFibGVUaW1lO1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiICYmXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5lbmFibGVUaW1lO1xuICAgICAgICAgICAgaWYgKHNpbmdsZSB8fCByYW5nZSkge1xuICAgICAgICAgICAgICAgIGZvY3VzQW5kQ2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyQ2hhbmdlKCk7XG4gICAgfVxuICAgIHZhciBDQUxMQkFDS1MgPSB7XG4gICAgICAgIGxvY2FsZTogW3NldHVwTG9jYWxlLCB1cGRhdGVXZWVrZGF5c10sXG4gICAgICAgIHNob3dNb250aHM6IFtidWlsZE1vbnRocywgc2V0Q2FsZW5kYXJXaWR0aCwgYnVpbGRXZWVrZGF5c10sXG4gICAgICAgIG1pbkRhdGU6IFtqdW1wVG9EYXRlXSxcbiAgICAgICAgbWF4RGF0ZTogW2p1bXBUb0RhdGVdLFxuICAgICAgICBwb3NpdGlvbkVsZW1lbnQ6IFt1cGRhdGVQb3NpdGlvbkVsZW1lbnRdLFxuICAgICAgICBjbGlja09wZW5zOiBbXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmNsaWNrT3BlbnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYmluZChzZWxmLl9pbnB1dCwgXCJmb2N1c1wiLCBzZWxmLm9wZW4pO1xuICAgICAgICAgICAgICAgICAgICBiaW5kKHNlbGYuX2lucHV0LCBcImNsaWNrXCIsIHNlbGYub3Blbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgc2VsZi5vcGVuKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHNlbGYub3Blbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHNldChvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgIGlmIChvcHRpb24gIT09IG51bGwgJiYgdHlwZW9mIG9wdGlvbiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZWxmLmNvbmZpZywgb3B0aW9uKTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoQ0FMTEJBQ0tTW2tleV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgQ0FMTEJBQ0tTW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCgpOyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnW29wdGlvbl0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChDQUxMQkFDS1Nbb3B0aW9uXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIENBTExCQUNLU1tvcHRpb25dLmZvckVhY2goZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgoKTsgfSk7XG4gICAgICAgICAgICBlbHNlIGlmIChIT09LUy5pbmRleE9mKG9wdGlvbikgPiAtMSlcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tvcHRpb25dID0gYXJyYXlpZnkodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgIHVwZGF0ZVZhbHVlKHRydWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRTZWxlY3RlZERhdGUoaW5wdXREYXRlLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIGRhdGVzID0gW107XG4gICAgICAgIGlmIChpbnB1dERhdGUgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgICAgICAgIGRhdGVzID0gaW5wdXREYXRlLm1hcChmdW5jdGlvbiAoZCkgeyByZXR1cm4gc2VsZi5wYXJzZURhdGUoZCwgZm9ybWF0KTsgfSk7XG4gICAgICAgIGVsc2UgaWYgKGlucHV0RGF0ZSBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIGlucHV0RGF0ZSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIGRhdGVzID0gW3NlbGYucGFyc2VEYXRlKGlucHV0RGF0ZSwgZm9ybWF0KV07XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBpbnB1dERhdGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoc2VsZi5jb25maWcubW9kZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzaW5nbGVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwidGltZVwiOlxuICAgICAgICAgICAgICAgICAgICBkYXRlcyA9IFtzZWxmLnBhcnNlRGF0ZShpbnB1dERhdGUsIGZvcm1hdCldO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgICAgICAgICAgZGF0ZXMgPSBpbnB1dERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChzZWxmLmNvbmZpZy5jb25qdW5jdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHNlbGYucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicmFuZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgZGF0ZXMgPSBpbnB1dERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChzZWxmLmwxMG4ucmFuZ2VTZXBhcmF0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBzZWxmLnBhcnNlRGF0ZShkYXRlLCBmb3JtYXQpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc2VsZi5jb25maWcuZXJyb3JIYW5kbGVyKG5ldyBFcnJvcihcIkludmFsaWQgZGF0ZSBzdXBwbGllZDogXCIgKyBKU09OLnN0cmluZ2lmeShpbnB1dERhdGUpKSk7XG4gICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IChzZWxmLmNvbmZpZy5hbGxvd0ludmFsaWRQcmVsb2FkXG4gICAgICAgICAgICA/IGRhdGVzXG4gICAgICAgICAgICA6IGRhdGVzLmZpbHRlcihmdW5jdGlvbiAoZCkgeyByZXR1cm4gZCBpbnN0YW5jZW9mIERhdGUgJiYgaXNFbmFibGVkKGQsIGZhbHNlKTsgfSkpO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKVxuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZ2V0VGltZSgpIC0gYi5nZXRUaW1lKCk7IH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXREYXRlKGRhdGUsIHRyaWdnZXJDaGFuZ2UsIGZvcm1hdCkge1xuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSA9PT0gdm9pZCAwKSB7IHRyaWdnZXJDaGFuZ2UgPSBmYWxzZTsgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSB2b2lkIDApIHsgZm9ybWF0ID0gc2VsZi5jb25maWcuZGF0ZUZvcm1hdDsgfVxuICAgICAgICBpZiAoKGRhdGUgIT09IDAgJiYgIWRhdGUpIHx8IChkYXRlIGluc3RhbmNlb2YgQXJyYXkgJiYgZGF0ZS5sZW5ndGggPT09IDApKVxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2xlYXIodHJpZ2dlckNoYW5nZSk7XG4gICAgICAgIHNldFNlbGVjdGVkRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiA9XG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXNbc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCAtIDFdO1xuICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgICAgICBqdW1wVG9EYXRlKHVuZGVmaW5lZCwgdHJpZ2dlckNoYW5nZSk7XG4gICAgICAgIHNldEhvdXJzRnJvbURhdGUoKTtcbiAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNlbGYuY2xlYXIoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVZhbHVlKHRyaWdnZXJDaGFuZ2UpO1xuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSlcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2hhbmdlXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZURhdGVSdWxlcyhhcnIpIHtcbiAgICAgICAgcmV0dXJuIGFyclxuICAgICAgICAgICAgLnNsaWNlKClcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZSA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBydWxlID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICAgICAgcnVsZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJzZURhdGUocnVsZSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJ1bGUgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgcnVsZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgIHJ1bGUuZnJvbSAmJlxuICAgICAgICAgICAgICAgIHJ1bGUudG8pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogc2VsZi5wYXJzZURhdGUocnVsZS5mcm9tLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICB0bzogc2VsZi5wYXJzZURhdGUocnVsZS50bywgdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4OyB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0dXBEYXRlcygpIHtcbiAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gW107XG4gICAgICAgIHNlbGYubm93ID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubm93KSB8fCBuZXcgRGF0ZSgpO1xuICAgICAgICB2YXIgcHJlbG9hZGVkRGF0ZSA9IHNlbGYuY29uZmlnLmRlZmF1bHREYXRlIHx8XG4gICAgICAgICAgICAoKHNlbGYuaW5wdXQubm9kZU5hbWUgPT09IFwiSU5QVVRcIiB8fFxuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQubm9kZU5hbWUgPT09IFwiVEVYVEFSRUFcIikgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnBsYWNlaG9sZGVyICYmXG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9PT0gc2VsZi5pbnB1dC5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgIDogc2VsZi5pbnB1dC52YWx1ZSk7XG4gICAgICAgIGlmIChwcmVsb2FkZWREYXRlKVxuICAgICAgICAgICAgc2V0U2VsZWN0ZWREYXRlKHByZWxvYWRlZERhdGUsIHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpO1xuICAgICAgICBzZWxmLl9pbml0aWFsRGF0ZSA9XG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gc2VsZi5zZWxlY3RlZERhdGVzWzBdXG4gICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0VGltZSgpID4gc2VsZi5ub3cuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWluRGF0ZVxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1heERhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0VGltZSgpIDwgc2VsZi5ub3cuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1heERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5ub3c7XG4gICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBzZWxmLl9pbml0aWFsRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IHNlbGYuX2luaXRpYWxEYXRlLmdldE1vbnRoKCk7XG4gICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID0gc2VsZi5zZWxlY3RlZERhdGVzWzBdO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcubWluVGltZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgc2VsZi5jb25maWcubWluVGltZSA9IHNlbGYucGFyc2VEYXRlKHNlbGYuY29uZmlnLm1pblRpbWUsIFwiSDppXCIpO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4VGltZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgc2VsZi5jb25maWcubWF4VGltZSA9IHNlbGYucGFyc2VEYXRlKHNlbGYuY29uZmlnLm1heFRpbWUsIFwiSDppXCIpO1xuICAgICAgICBzZWxmLm1pbkRhdGVIYXNUaW1lID1cbiAgICAgICAgICAgICEhc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5taW5EYXRlLmdldEhvdXJzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TWludXRlcygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlLmdldFNlY29uZHMoKSA+IDApO1xuICAgICAgICBzZWxmLm1heERhdGVIYXNUaW1lID1cbiAgICAgICAgICAgICEhc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEhvdXJzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0TWludXRlcygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldFNlY29uZHMoKSA+IDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXR1cElucHV0cygpIHtcbiAgICAgICAgc2VsZi5pbnB1dCA9IGdldElucHV0RWxlbSgpO1xuICAgICAgICBpZiAoIXNlbGYuaW5wdXQpIHtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IGVsZW1lbnQgc3BlY2lmaWVkXCIpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmlucHV0Ll90eXBlID0gc2VsZi5pbnB1dC50eXBlO1xuICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgc2VsZi5pbnB1dC5jbGFzc0xpc3QuYWRkKFwiZmxhdHBpY2tyLWlucHV0XCIpO1xuICAgICAgICBzZWxmLl9pbnB1dCA9IHNlbGYuaW5wdXQ7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5hbHRJbnB1dCkge1xuICAgICAgICAgICAgc2VsZi5hbHRJbnB1dCA9IGNyZWF0ZUVsZW1lbnQoc2VsZi5pbnB1dC5ub2RlTmFtZSwgc2VsZi5jb25maWcuYWx0SW5wdXRDbGFzcyk7XG4gICAgICAgICAgICBzZWxmLl9pbnB1dCA9IHNlbGYuYWx0SW5wdXQ7XG4gICAgICAgICAgICBzZWxmLmFsdElucHV0LnBsYWNlaG9sZGVyID0gc2VsZi5pbnB1dC5wbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQuZGlzYWJsZWQgPSBzZWxmLmlucHV0LmRpc2FibGVkO1xuICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5yZXF1aXJlZCA9IHNlbGYuaW5wdXQucmVxdWlyZWQ7XG4gICAgICAgICAgICBzZWxmLmFsdElucHV0LnRhYkluZGV4ID0gc2VsZi5pbnB1dC50YWJJbmRleDtcbiAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICAgICAgc2VsZi5pbnB1dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwiaGlkZGVuXCIpO1xuICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5zdGF0aWMgJiYgc2VsZi5pbnB1dC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2VsZi5hbHRJbnB1dCwgc2VsZi5pbnB1dC5uZXh0U2libGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5hbGxvd0lucHV0KVxuICAgICAgICAgICAgc2VsZi5faW5wdXQuc2V0QXR0cmlidXRlKFwicmVhZG9ubHlcIiwgXCJyZWFkb25seVwiKTtcbiAgICAgICAgdXBkYXRlUG9zaXRpb25FbGVtZW50KCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVBvc2l0aW9uRWxlbWVudCgpIHtcbiAgICAgICAgc2VsZi5fcG9zaXRpb25FbGVtZW50ID0gc2VsZi5jb25maWcucG9zaXRpb25FbGVtZW50IHx8IHNlbGYuX2lucHV0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXR1cE1vYmlsZSgpIHtcbiAgICAgICAgdmFyIGlucHV0VHlwZSA9IHNlbGYuY29uZmlnLmVuYWJsZVRpbWVcbiAgICAgICAgICAgID8gc2VsZi5jb25maWcubm9DYWxlbmRhclxuICAgICAgICAgICAgICAgID8gXCJ0aW1lXCJcbiAgICAgICAgICAgICAgICA6IFwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgOiBcImRhdGVcIjtcbiAgICAgICAgc2VsZi5tb2JpbGVJbnB1dCA9IGNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBzZWxmLmlucHV0LmNsYXNzTmFtZSArIFwiIGZsYXRwaWNrci1tb2JpbGVcIik7XG4gICAgICAgIHNlbGYubW9iaWxlSW5wdXQudGFiSW5kZXggPSAxO1xuICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnR5cGUgPSBpbnB1dFR5cGU7XG4gICAgICAgIHNlbGYubW9iaWxlSW5wdXQuZGlzYWJsZWQgPSBzZWxmLmlucHV0LmRpc2FibGVkO1xuICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnJlcXVpcmVkID0gc2VsZi5pbnB1dC5yZXF1aXJlZDtcbiAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5wbGFjZWhvbGRlciA9IHNlbGYuaW5wdXQucGxhY2Vob2xkZXI7XG4gICAgICAgIHNlbGYubW9iaWxlRm9ybWF0U3RyID1cbiAgICAgICAgICAgIGlucHV0VHlwZSA9PT0gXCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgPyBcIlktbS1kXFxcXFRIOmk6U1wiXG4gICAgICAgICAgICAgICAgOiBpbnB1dFR5cGUgPT09IFwiZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgID8gXCJZLW0tZFwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJIOmk6U1wiO1xuICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQuZGVmYXVsdFZhbHVlID0gc2VsZi5tb2JpbGVJbnB1dC52YWx1ZSA9IHNlbGYuZm9ybWF0RGF0ZShzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHNlbGYubW9iaWxlRm9ybWF0U3RyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5jb25maWcubWluRGF0ZSlcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQubWluID0gc2VsZi5mb3JtYXREYXRlKHNlbGYuY29uZmlnLm1pbkRhdGUsIFwiWS1tLWRcIik7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhEYXRlKVxuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5tYXggPSBzZWxmLmZvcm1hdERhdGUoc2VsZi5jb25maWcubWF4RGF0ZSwgXCJZLW0tZFwiKTtcbiAgICAgICAgaWYgKHNlbGYuaW5wdXQuZ2V0QXR0cmlidXRlKFwic3RlcFwiKSlcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQuc3RlcCA9IFN0cmluZyhzZWxmLmlucHV0LmdldEF0dHJpYnV0ZShcInN0ZXBcIikpO1xuICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChzZWxmLmlucHV0LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLm1vYmlsZUlucHV0LCBzZWxmLmlucHV0Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHsgfVxuICAgICAgICBiaW5kKHNlbGYubW9iaWxlSW5wdXQsIFwiY2hhbmdlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBzZWxmLnNldERhdGUoZ2V0RXZlbnRUYXJnZXQoZSkudmFsdWUsIGZhbHNlLCBzZWxmLm1vYmlsZUZvcm1hdFN0cik7XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNoYW5nZVwiKTtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2xvc2VcIik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0b2dnbGUoZSkge1xuICAgICAgICBpZiAoc2VsZi5pc09wZW4gPT09IHRydWUpXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5jbG9zZSgpO1xuICAgICAgICBzZWxmLm9wZW4oZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyaWdnZXJFdmVudChldmVudCwgZGF0YSkge1xuICAgICAgICBpZiAoc2VsZi5jb25maWcgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGhvb2tzID0gc2VsZi5jb25maWdbZXZlbnRdO1xuICAgICAgICBpZiAoaG9va3MgIT09IHVuZGVmaW5lZCAmJiBob29rcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaG9va3NbaV0gJiYgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIGhvb2tzW2ldKHNlbGYuc2VsZWN0ZWREYXRlcywgc2VsZi5pbnB1dC52YWx1ZSwgc2VsZiwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50ID09PSBcIm9uQ2hhbmdlXCIpIHtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudChcImNoYW5nZVwiKSk7XG4gICAgICAgICAgICBzZWxmLmlucHV0LmRpc3BhdGNoRXZlbnQoY3JlYXRlRXZlbnQoXCJpbnB1dFwiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRXZlbnQobmFtZSkge1xuICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgICAgIGUuaW5pdEV2ZW50KG5hbWUsIHRydWUsIHRydWUpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNEYXRlU2VsZWN0ZWQoZGF0ZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkRGF0ZSA9IHNlbGYuc2VsZWN0ZWREYXRlc1tpXTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGUgaW5zdGFuY2VvZiBEYXRlICYmXG4gICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKHNlbGVjdGVkRGF0ZSwgZGF0ZSkgPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNEYXRlSW5SYW5nZShkYXRlKSB7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlICE9PSBcInJhbmdlXCIgfHwgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiAoY29tcGFyZURhdGVzKGRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1swXSkgPj0gMCAmJlxuICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1sxXSkgPD0gMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKSB7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5ub0NhbGVuZGFyIHx8IHNlbGYuaXNNb2JpbGUgfHwgIXNlbGYubW9udGhOYXYpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNlbGYueWVhckVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKHllYXJFbGVtZW50LCBpKSB7XG4gICAgICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKHNlbGYuY3VycmVudFllYXIsIHNlbGYuY3VycmVudE1vbnRoLCAxKTtcbiAgICAgICAgICAgIGQuc2V0TW9udGgoc2VsZi5jdXJyZW50TW9udGggKyBpKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSB8fFxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vbnRoU2VsZWN0b3JUeXBlID09PSBcInN0YXRpY1wiKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzW2ldLnRleHRDb250ZW50ID1cbiAgICAgICAgICAgICAgICAgICAgbW9udGhUb1N0cihkLmdldE1vbnRoKCksIHNlbGYuY29uZmlnLnNob3J0aGFuZEN1cnJlbnRNb250aCwgc2VsZi5sMTBuKSArIFwiIFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci52YWx1ZSA9IGQuZ2V0TW9udGgoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWVhckVsZW1lbnQudmFsdWUgPSBkLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNlbGYuX2hpZGVQcmV2TW9udGhBcnJvdyA9XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAoc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5jdXJyZW50TW9udGggPD0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jdXJyZW50WWVhciA8IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHNlbGYuX2hpZGVOZXh0TW9udGhBcnJvdyA9XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhEYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAoc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5jdXJyZW50TW9udGggKyAxID4gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jdXJyZW50WWVhciA+IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldERhdGVTdHIoc3BlY2lmaWNGb3JtYXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHNwZWNpZmljRm9ybWF0IHx8XG4gICAgICAgICAgICAoc2VsZi5jb25maWcuYWx0SW5wdXQgPyBzZWxmLmNvbmZpZy5hbHRGb3JtYXQgOiBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgcmV0dXJuIHNlbGYuc2VsZWN0ZWREYXRlc1xuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZE9iaikgeyByZXR1cm4gc2VsZi5mb3JtYXREYXRlKGRPYmosIGZvcm1hdCk7IH0pXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkLCBpLCBhcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbmZpZy5tb2RlICE9PSBcInJhbmdlXCIgfHxcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5lbmFibGVUaW1lIHx8XG4gICAgICAgICAgICAgICAgYXJyLmluZGV4T2YoZCkgPT09IGk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihzZWxmLmNvbmZpZy5tb2RlICE9PSBcInJhbmdlXCJcbiAgICAgICAgICAgID8gc2VsZi5jb25maWcuY29uanVuY3Rpb25cbiAgICAgICAgICAgIDogc2VsZi5sMTBuLnJhbmdlU2VwYXJhdG9yKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlVmFsdWUodHJpZ2dlckNoYW5nZSkge1xuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSA9PT0gdm9pZCAwKSB7IHRyaWdnZXJDaGFuZ2UgPSB0cnVlOyB9XG4gICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0ICE9PSB1bmRlZmluZWQgJiYgc2VsZi5tb2JpbGVGb3JtYXRTdHIpIHtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQudmFsdWUgPVxuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmZvcm1hdERhdGUoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmosIHNlbGYubW9iaWxlRm9ybWF0U3RyKVxuICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9IGdldERhdGVTdHIoc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgIGlmIChzZWxmLmFsdElucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudmFsdWUgPSBnZXREYXRlU3RyKHNlbGYuY29uZmlnLmFsdEZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UgIT09IGZhbHNlKVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25WYWx1ZVVwZGF0ZVwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25Nb250aE5hdkNsaWNrKGUpIHtcbiAgICAgICAgdmFyIGV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgIHZhciBpc1ByZXZNb250aCA9IHNlbGYucHJldk1vbnRoTmF2LmNvbnRhaW5zKGV2ZW50VGFyZ2V0KTtcbiAgICAgICAgdmFyIGlzTmV4dE1vbnRoID0gc2VsZi5uZXh0TW9udGhOYXYuY29udGFpbnMoZXZlbnRUYXJnZXQpO1xuICAgICAgICBpZiAoaXNQcmV2TW9udGggfHwgaXNOZXh0TW9udGgpIHtcbiAgICAgICAgICAgIGNoYW5nZU1vbnRoKGlzUHJldk1vbnRoID8gLTEgOiAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWxmLnllYXJFbGVtZW50cy5pbmRleE9mKGV2ZW50VGFyZ2V0KSA+PSAwKSB7XG4gICAgICAgICAgICBldmVudFRhcmdldC5zZWxlY3QoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldmVudFRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJhcnJvd1VwXCIpKSB7XG4gICAgICAgICAgICBzZWxmLmNoYW5nZVllYXIoc2VsZi5jdXJyZW50WWVhciArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93RG93blwiKSkge1xuICAgICAgICAgICAgc2VsZi5jaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgLSAxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB0aW1lV3JhcHBlcihlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdmFyIGlzS2V5RG93biA9IGUudHlwZSA9PT0gXCJrZXlkb3duXCIsIGV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSksIGlucHV0ID0gZXZlbnRUYXJnZXQ7XG4gICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZCAmJiBldmVudFRhcmdldCA9PT0gc2VsZi5hbVBNKSB7XG4gICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPVxuICAgICAgICAgICAgICAgIHNlbGYubDEwbi5hbVBNW2ludChzZWxmLmFtUE0udGV4dENvbnRlbnQgPT09IHNlbGYubDEwbi5hbVBNWzBdKV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1pbiA9IHBhcnNlRmxvYXQoaW5wdXQuZ2V0QXR0cmlidXRlKFwibWluXCIpKSwgbWF4ID0gcGFyc2VGbG9hdChpbnB1dC5nZXRBdHRyaWJ1dGUoXCJtYXhcIikpLCBzdGVwID0gcGFyc2VGbG9hdChpbnB1dC5nZXRBdHRyaWJ1dGUoXCJzdGVwXCIpKSwgY3VyVmFsdWUgPSBwYXJzZUludChpbnB1dC52YWx1ZSwgMTApLCBkZWx0YSA9IGUuZGVsdGEgfHxcbiAgICAgICAgICAgIChpc0tleURvd24gPyAoZS53aGljaCA9PT0gMzggPyAxIDogLTEpIDogMCk7XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IGN1clZhbHVlICsgc3RlcCAqIGRlbHRhO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0LnZhbHVlICE9PSBcInVuZGVmaW5lZFwiICYmIGlucHV0LnZhbHVlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgdmFyIGlzSG91ckVsZW0gPSBpbnB1dCA9PT0gc2VsZi5ob3VyRWxlbWVudCwgaXNNaW51dGVFbGVtID0gaW5wdXQgPT09IHNlbGYubWludXRlRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA8IG1pbikge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgbWF4ICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludCghaXNIb3VyRWxlbSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKGludChpc0hvdXJFbGVtKSAmJiBpbnQoIXNlbGYuYW1QTSkpO1xuICAgICAgICAgICAgICAgIGlmIChpc01pbnV0ZUVsZW0pXG4gICAgICAgICAgICAgICAgICAgIGluY3JlbWVudE51bUlucHV0KHVuZGVmaW5lZCwgLTEsIHNlbGYuaG91ckVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobmV3VmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgIGlucHV0ID09PSBzZWxmLmhvdXJFbGVtZW50ID8gbmV3VmFsdWUgLSBtYXggLSBpbnQoIXNlbGYuYW1QTSkgOiBtaW47XG4gICAgICAgICAgICAgICAgaWYgKGlzTWludXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50TnVtSW5wdXQodW5kZWZpbmVkLCAxLCBzZWxmLmhvdXJFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gJiZcbiAgICAgICAgICAgICAgICBpc0hvdXJFbGVtICYmXG4gICAgICAgICAgICAgICAgKHN0ZXAgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyBuZXdWYWx1ZSArIGN1clZhbHVlID09PSAyM1xuICAgICAgICAgICAgICAgICAgICA6IE1hdGguYWJzKG5ld1ZhbHVlIC0gY3VyVmFsdWUpID4gc3RlcCkpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmwxMG4uYW1QTVtpbnQoc2VsZi5hbVBNLnRleHRDb250ZW50ID09PSBzZWxmLmwxMG4uYW1QTVswXSldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBwYWQobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluaXQoKTtcbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIF9mbGF0cGlja3Iobm9kZUxpc3QsIGNvbmZpZykge1xuICAgIHZhciBub2RlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZVxuICAgICAgICAuY2FsbChub2RlTGlzdClcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OyB9KTtcbiAgICB2YXIgaW5zdGFuY2VzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1mcC1vbWl0XCIpICE9PSBudWxsKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKG5vZGUuX2ZsYXRwaWNrciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5fZmxhdHBpY2tyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICBub2RlLl9mbGF0cGlja3IgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLl9mbGF0cGlja3IgPSBGbGF0cGlja3JJbnN0YW5jZShub2RlLCBjb25maWcgfHwge30pO1xuICAgICAgICAgICAgaW5zdGFuY2VzLnB1c2gobm9kZS5fZmxhdHBpY2tyKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5zdGFuY2VzLmxlbmd0aCA9PT0gMSA/IGluc3RhbmNlc1swXSA6IGluc3RhbmNlcztcbn1cbmlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICB0eXBlb2YgSFRNTENvbGxlY3Rpb24gIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICB0eXBlb2YgTm9kZUxpc3QgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBIVE1MQ29sbGVjdGlvbi5wcm90b3R5cGUuZmxhdHBpY2tyID0gTm9kZUxpc3QucHJvdG90eXBlLmZsYXRwaWNrciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIF9mbGF0cGlja3IodGhpcywgY29uZmlnKTtcbiAgICB9O1xuICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZS5mbGF0cGlja3IgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgIHJldHVybiBfZmxhdHBpY2tyKFt0aGlzXSwgY29uZmlnKTtcbiAgICB9O1xufVxudmFyIGZsYXRwaWNrciA9IGZ1bmN0aW9uIChzZWxlY3RvciwgY29uZmlnKSB7XG4gICAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcih3aW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvciksIGNvbmZpZyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNlbGVjdG9yIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcihbc2VsZWN0b3JdLCBjb25maWcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF9mbGF0cGlja3Ioc2VsZWN0b3IsIGNvbmZpZyk7XG4gICAgfVxufTtcbmZsYXRwaWNrci5kZWZhdWx0Q29uZmlnID0ge307XG5mbGF0cGlja3IubDEwbnMgPSB7XG4gICAgZW46IF9fYXNzaWduKHt9LCBFbmdsaXNoKSxcbiAgICBkZWZhdWx0OiBfX2Fzc2lnbih7fSwgRW5nbGlzaCksXG59O1xuZmxhdHBpY2tyLmxvY2FsaXplID0gZnVuY3Rpb24gKGwxMG4pIHtcbiAgICBmbGF0cGlja3IubDEwbnMuZGVmYXVsdCA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBmbGF0cGlja3IubDEwbnMuZGVmYXVsdCksIGwxMG4pO1xufTtcbmZsYXRwaWNrci5zZXREZWZhdWx0cyA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICBmbGF0cGlja3IuZGVmYXVsdENvbmZpZyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBmbGF0cGlja3IuZGVmYXVsdENvbmZpZyksIGNvbmZpZyk7XG59O1xuZmxhdHBpY2tyLnBhcnNlRGF0ZSA9IGNyZWF0ZURhdGVQYXJzZXIoe30pO1xuZmxhdHBpY2tyLmZvcm1hdERhdGUgPSBjcmVhdGVEYXRlRm9ybWF0dGVyKHt9KTtcbmZsYXRwaWNrci5jb21wYXJlRGF0ZXMgPSBjb21wYXJlRGF0ZXM7XG5pZiAodHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgalF1ZXJ5LmZuICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgalF1ZXJ5LmZuLmZsYXRwaWNrciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIF9mbGF0cGlja3IodGhpcywgY29uZmlnKTtcbiAgICB9O1xufVxuRGF0ZS5wcm90b3R5cGUuZnBfaW5jciA9IGZ1bmN0aW9uIChkYXlzKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuZ2V0RnVsbFllYXIoKSwgdGhpcy5nZXRNb250aCgpLCB0aGlzLmdldERhdGUoKSArICh0eXBlb2YgZGF5cyA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlSW50KGRheXMsIDEwKSA6IGRheXMpKTtcbn07XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHdpbmRvdy5mbGF0cGlja3IgPSBmbGF0cGlja3I7XG59XG5leHBvcnQgZGVmYXVsdCBmbGF0cGlja3I7XG4iLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9mbGF0cGlja3IubWluLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9mbGF0cGlja3IubWluLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsImltcG9ydCBBYnN0cmFjdFN0YXRlZnVsVmlldyBmcm9tICcuLi9mcmFtZXdvcmsvdmlldy9hYnN0cmFjdC1zdGF0ZWZ1bC12aWV3JztcbmltcG9ydCB7IEVWRU5UU19UWVBFUyB9IGZyb20gJy4uL2NvbnN0JztcbmltcG9ydCBmbGF0cGlja3IgZnJvbSAnZmxhdHBpY2tyJztcbmltcG9ydCAnZmxhdHBpY2tyL2Rpc3QvZmxhdHBpY2tyLm1pbi5jc3MnO1xuY29uc3QgY3JlYXRlTmV3T2ZmZXIgPSAoaWQsIG9mZmVyKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB0aXRsZSxcbiAgICBwcmljZSxcbiAgICBpc0FjdGl2ZVxuICB9ID0gb2ZmZXI7XG4gIHJldHVybiBgPGRpdiBjbGFzcz1cImV2ZW50X19vZmZlci1zZWxlY3RvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZXZlbnRfX29mZmVyLWNoZWNrYm94ICB2aXN1YWxseS1oaWRkZW5cIiBpZD1cImV2ZW50LW9mZmVyLSR7aWR9XCIgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImV2ZW50LW9mZmVyLWx1Z2dhZ2VcIiAke2lzQWN0aXZlID8gJ2NoZWNrZWQnIDogJyd9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZXZlbnRfX29mZmVyLWxhYmVsXCIgZm9yPVwiZXZlbnQtb2ZmZXItJHtpZH1cIiBkYXRhLW9mZmVyLWlkPVwiJHtpZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldmVudF9fb2ZmZXItdGl0bGVcIj4ke3RpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJnBsdXM7JmV1cm87Jm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXZlbnRfX29mZmVyLXByaWNlXCI+JHtwcmljZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG59O1xuY29uc3QgY3JlYXRlT2ZmZXJzID0gb2ZmZXJzTWFwID0+IHtcbiAgbGV0IG9mZmVyc0hUTUwgPSAnJztcbiAgb2ZmZXJzTWFwLmZvckVhY2goKG9mZmVyLCBpZCkgPT4ge1xuICAgIG9mZmVyc0hUTUwgKz0gY3JlYXRlTmV3T2ZmZXIoaWQsIG9mZmVyKTtcbiAgfSk7XG4gIHJldHVybiBvZmZlcnNIVE1MO1xufTtcbmNvbnN0IGNyZWF0ZVR5cGUgPSB0eXBlID0+IHtcbiAgY29uc3QgdHlwZVRvTG93ZXJDYXNlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gYDxkaXYgY2xhc3M9XCJldmVudF9fdHlwZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImV2ZW50LXR5cGUtJHt0eXBlVG9Mb3dlckNhc2V9LTFcIiBjbGFzcz1cImV2ZW50X190eXBlLWlucHV0ICB2aXN1YWxseS1oaWRkZW5cIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiZXZlbnQtdHlwZVwiIHZhbHVlPVwiJHt0eXBlVG9Mb3dlckNhc2V9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImV2ZW50X190eXBlLWxhYmVsICBldmVudF9fdHlwZS1sYWJlbC0tJHt0eXBlVG9Mb3dlckNhc2V9XCIgZm9yPVwiZXZlbnQtdHlwZS0ke3R5cGVUb0xvd2VyQ2FzZX0tMVwiIGRhdGEtZXZlbnQtdHlwZT1cIiR7dHlwZX1cIiA+JHt0eXBlfTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xufTtcbmNvbnN0IGNyZWF0ZVR5cGVzID0gdHlwZXMgPT4ge1xuICBsZXQgdHlwZXNIVE1MID0gJyc7XG4gIHR5cGVzLmZvckVhY2godHlwZSA9PiB7XG4gICAgdHlwZXNIVE1MICs9IGNyZWF0ZVR5cGUodHlwZSk7XG4gIH0pO1xuICByZXR1cm4gdHlwZXNIVE1MO1xufTtcbmNvbnN0IGNyZWF0ZURlc3RpbmF0aW9uID0gZGVzdGluYXRpb24gPT4gYDxvcHRpb24gZGF0YS1kZXN0aW5hdGlvbi1pZD1cIiR7ZGVzdGluYXRpb24uaWR9XCIgdmFsdWU9XCIke2Rlc3RpbmF0aW9uLm5hbWV9XCI+JHtkZXN0aW5hdGlvbi5uYW1lfTwvb3B0aW9uPmA7XG5jb25zdCBjcmVhdGVEZXN0aW5hdGlvbnMgPSBkZXN0aW5hdGlvbnNMaXN0ID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGRlc3RpbmF0aW9uc0xpc3QpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBkZXN0aW5hdGlvbnNIVE1MID0gJyc7XG4gIGRlc3RpbmF0aW9uc0xpc3QuZm9yRWFjaChkZXN0aW5hdGlvbiA9PiB7XG4gICAgZGVzdGluYXRpb25zSFRNTCArPSBjcmVhdGVEZXN0aW5hdGlvbihkZXN0aW5hdGlvbik7XG4gIH0pO1xuICByZXR1cm4gZGVzdGluYXRpb25zSFRNTDtcbn07XG5jb25zdCBjcmVhdGVOZXdFdmVudEVkaXRFbGVtZW50VGVtcGxhdGUgPSAoZXZlbnREYXRhLCBkZXN0aW5hdGlvbnNMaXN0KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBiYXNlUHJpY2UsXG4gICAgdHlwZSxcbiAgICBvZmZlcnMsXG4gICAgZGVzdGluYXRpb24sXG4gICAgZGF0ZUZyb20sXG4gICAgZGF0ZVRvXG4gIH0gPSBldmVudERhdGE7XG4gIHJldHVybiBgPGxpIGNsYXNzPVwidHJpcC1ldmVudHNfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJldmVudCBldmVudC0tZWRpdFwiIGFjdGlvbj1cIiNcIiBtZXRob2Q9XCJwb3N0XCI+XG4gICAgICAgICAgICAgICAgPGhlYWRlciBjbGFzcz1cImV2ZW50X19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fdHlwZS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImV2ZW50X190eXBlICBldmVudF9fdHlwZS1idG5cIiBmb3I9XCJldmVudC10eXBlLXRvZ2dsZS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5DaG9vc2UgZXZlbnQgdHlwZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiZXZlbnRfX3R5cGUtaWNvblwiIHdpZHRoPVwiMTdcIiBoZWlnaHQ9XCIxN1wiIHNyYz1cImltZy9pY29ucy8ke3R5cGV9LnBuZ1wiIGFsdD1cIkV2ZW50IHR5cGUgaWNvblwiPlxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJldmVudF9fdHlwZS10b2dnbGUgIHZpc3VhbGx5LWhpZGRlblwiIGlkPVwiZXZlbnQtdHlwZS10b2dnbGUtMVwiIHR5cGU9XCJjaGVja2JveFwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fdHlwZS1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiZXZlbnRfX3R5cGUtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5FdmVudCB0eXBlPC9sZWdlbmQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAke2NyZWF0ZVR5cGVzKEVWRU5UU19UWVBFUyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50X19maWVsZC1ncm91cCAgZXZlbnRfX2ZpZWxkLWdyb3VwLS1kZXN0aW5hdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJldmVudF9fbGFiZWwgIGV2ZW50X190eXBlLW91dHB1dFwiIGZvcj1cImV2ZW50LWRlc3RpbmF0aW9uLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke3R5cGV9XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImV2ZW50X19pbnB1dCAgZXZlbnRfX2lucHV0LS1kZXN0aW5hdGlvblwiIGlkPVwiJHtkZXN0aW5hdGlvbi5pZH1cIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJldmVudC1kZXN0aW5hdGlvblwiIHZhbHVlPVwiJHtkZXN0aW5hdGlvbi5uYW1lfVwiIGxpc3Q9XCJkZXN0aW5hdGlvbi1saXN0LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRhdGFsaXN0IGlkPVwiZGVzdGluYXRpb24tbGlzdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICR7Y3JlYXRlRGVzdGluYXRpb25zKGRlc3RpbmF0aW9uc0xpc3QpfVxuICAgICAgICAgICAgICAgICAgICA8L2RhdGFsaXN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fZmllbGQtZ3JvdXAgIGV2ZW50X19maWVsZC1ncm91cC0tdGltZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIiBmb3I9XCJldmVudC1zdGFydC10aW1lLTFcIj5Gcm9tPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZXZlbnRfX2lucHV0ICBldmVudF9faW5wdXQtLXRpbWVcIiBpZD1cImV2ZW50LXN0YXJ0LXRpbWUtMVwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImV2ZW50LXN0YXJ0LXRpbWVcIiB2YWx1ZT1cIiR7ZGF0ZUZyb219XCI+XG4gICAgICAgICAgICAgICAgICAgICZtZGFzaDtcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCIgZm9yPVwiZXZlbnQtZW5kLXRpbWUtMVwiPlRvPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZXZlbnRfX2lucHV0ICBldmVudF9faW5wdXQtLXRpbWVcIiBpZD1cImV2ZW50LWVuZC10aW1lLTFcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJldmVudC1lbmQtdGltZVwiIHZhbHVlPVwiJHtkYXRlVG99XCI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50X19maWVsZC1ncm91cCAgZXZlbnRfX2ZpZWxkLWdyb3VwLS1wcmljZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJldmVudF9fbGFiZWxcIiBmb3I9XCJldmVudC1wcmljZS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5QcmljZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAmZXVybztcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZXZlbnRfX2lucHV0ICBldmVudF9faW5wdXQtLXByaWNlXCIgaWQ9XCJldmVudC1wcmljZS0xXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiZXZlbnQtcHJpY2VcIiB2YWx1ZT1cIiR7YmFzZVByaWNlfVwiPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJldmVudF9fc2F2ZS1idG4gIGJ0biAgYnRuLS1ibHVlXCIgdHlwZT1cInN1Ym1pdFwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJldmVudF9fcmVzZXQtYnRuXCIgdHlwZT1cInJlc2V0XCI+RGVsZXRlPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZXZlbnRfX3JvbGx1cC1idG5cIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+T3BlbiBldmVudDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZXZlbnRfX2RldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZXZlbnRfX3NlY3Rpb24gIGV2ZW50X19zZWN0aW9uLS1vZmZlcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiZXZlbnRfX3NlY3Rpb24tdGl0bGUgIGV2ZW50X19zZWN0aW9uLXRpdGxlLS1vZmZlcnNcIj5PZmZlcnM8L2gzPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudF9fYXZhaWxhYmxlLW9mZmVyc1wiPlxuICAgICAgICAgICAgICAgICAgICAke2NyZWF0ZU9mZmVycyhvZmZlcnMpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJldmVudF9fc2VjdGlvbiAgZXZlbnRfX3NlY3Rpb24tLWRlc3RpbmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImV2ZW50X19zZWN0aW9uLXRpdGxlICBldmVudF9fc2VjdGlvbi10aXRsZS0tZGVzdGluYXRpb25cIj5EZXN0aW5hdGlvbjwvaDM+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZXZlbnRfX2Rlc3RpbmF0aW9uLWRlc2NyaXB0aW9uXCI+JHtkZXN0aW5hdGlvbi5kZXNjcmlwdGlvbn08L3A+XG4gICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2xpPmA7XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV3RXZlbnRFZGl0RWxlbWVudFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFN0YXRlZnVsVmlldyB7XG4gICNldmVudERhdGEgPSBudWxsO1xuICAjaGFuZGxlQ2xpY2sgPSBudWxsO1xuICAjcm9sbHVwQnV0dG9uID0gbnVsbDtcbiAgI2dldERlc3RpbmF0aW9uc0RhdGEgPSBudWxsO1xuICAjZmluZERlc3RpbmF0aW9uRGF0YSA9IG51bGw7XG4gICNnZXRPZmZlcnNNYXBCeVR5cGUgPSBudWxsO1xuICAjZGF0ZXBpY2tlciA9IG51bGw7XG4gICNoYW5kbGVTdWJtaXQgPSBudWxsO1xuICAjZm9ybUVsZW1lbnQgPSBudWxsO1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgdXNlckV2ZW50LFxuICAgIG9uQ2xpY2ssXG4gICAgZmluZERlc3RpbmF0aW9uLFxuICAgIGdldERlc3RpbmF0aW9uc0RhdGEsXG4gICAgZ2V0T2ZmZXJzTWFwQnlUeXBlLFxuICAgIG9uU3VibWl0XG4gIH0pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuI2V2ZW50RGF0YSA9IHVzZXJFdmVudDtcbiAgICB0aGlzLiNmaW5kRGVzdGluYXRpb25EYXRhID0gZmluZERlc3RpbmF0aW9uO1xuICAgIHRoaXMuI2dldERlc3RpbmF0aW9uc0RhdGEgPSBnZXREZXN0aW5hdGlvbnNEYXRhO1xuICAgIHRoaXMuI2dldE9mZmVyc01hcEJ5VHlwZSA9IGdldE9mZmVyc01hcEJ5VHlwZTtcbiAgICB0aGlzLl9zZXRTdGF0ZShOZXdFdmVudEVkaXRFbGVtZW50Vmlldy5wYXJzZUV2ZW50RGF0YVRvU3RhdGUodXNlckV2ZW50KSk7XG4gICAgdGhpcy4jaGFuZGxlQ2xpY2sgPSBvbkNsaWNrO1xuICAgIHRoaXMuI2hhbmRsZVN1Ym1pdCA9IG9uU3VibWl0O1xuICAgIHRoaXMuX3Jlc3RvcmVIYW5kbGVycygpO1xuICB9XG4gIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlTmV3RXZlbnRFZGl0RWxlbWVudFRlbXBsYXRlKHRoaXMuX3N0YXRlLCB0aGlzLiNnZXREZXN0aW5hdGlvbnNEYXRhKCkpO1xuICB9XG4gIHJlbW92ZUVsZW1lbnQoKSB7XG4gICAgc3VwZXIucmVtb3ZlRWxlbWVudCgpO1xuICAgIGlmICh0aGlzLiNkYXRlcGlja2VyKSB7XG4gICAgICB0aGlzLiNkYXRlcGlja2VyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuI2RhdGVwaWNrZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuICByZXNldChldmVudERhdGEpIHtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoTmV3RXZlbnRFZGl0RWxlbWVudFZpZXcucGFyc2VFdmVudERhdGFUb1N0YXRlKGV2ZW50RGF0YSkpO1xuICB9XG4gIF9yZXN0b3JlSGFuZGxlcnMoKSB7XG4gICAgdGhpcy4jcm9sbHVwQnV0dG9uID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ldmVudF9fcm9sbHVwLWJ0bicpO1xuICAgIHRoaXMuI2Zvcm1FbGVtZW50ID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ldmVudC0tZWRpdCcpO1xuICAgIHRoaXMuI2Zvcm1FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIHRoaXMuI3N1Ym1pdEhhbmRsZXIpO1xuICAgIHRoaXMuI3JvbGx1cEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuI2NsaWNrSGFuZGxlcik7XG4gICAgdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNldmVudC1wcmljZS0xJykuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLiNldmVudFByaWNlVG9nZ2xlSGFuZGxlcik7XG4gICAgdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ldmVudF9faW5wdXQtLWRlc3RpbmF0aW9uJykuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLiNldmVudERlc3RpbmF0aW9uVG9nZ2xlSGFuZGxlcik7XG4gICAgdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5ldmVudF9fdHlwZS1sYWJlbCcpLmZvckVhY2gobGFiZWwgPT4ge1xuICAgICAgbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLiNldmVudFR5cGVUb2dnbGVIYW5kbGVyKTtcbiAgICB9KTtcbiAgICB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmV2ZW50X19vZmZlci1sYWJlbCcpLmZvckVhY2gobGFiZWwgPT4ge1xuICAgICAgbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLiNldmVudE9mZmVyVG9nZ2xlSGFuZGxlcik7XG4gICAgfSk7XG4gICAgdGhpcy4jc2V0RGF0ZXBpY2tlcigpO1xuICB9XG4gICNjbGlja0hhbmRsZXIgPSBldnQgPT4ge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuI2hhbmRsZUNsaWNrKHRoaXMuI2V2ZW50RGF0YSk7XG4gIH07XG4gICNzdWJtaXRIYW5kbGVyID0gZXZ0ID0+IHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLiNoYW5kbGVDbGljayhOZXdFdmVudEVkaXRFbGVtZW50Vmlldy5wYXJzZVN0YXRlVG9FdmVudERhdGEodGhpcy5fc3RhdGUpKTtcbiAgfTtcbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy4jcm9sbHVwQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy4jY2xpY2tIYW5kbGVyKTtcbiAgICB0aGlzLiNmb3JtRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzdWJtaXQnLCB0aGlzLiNzdWJtaXRIYW5kbGVyKTtcbiAgfVxuICAjc2V0RGF0ZXBpY2tlcigpIHtcbiAgICBjb25zdCB0aW1lSW5wdXRzID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5ldmVudF9faW5wdXQtLXRpbWUnKTtcbiAgICB0aGlzLmRhdGVwaWNrZXJzID0gW107XG4gICAgdGltZUlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGUgPSBpbmRleCA/IHRoaXMuX3N0YXRlLmRhdGVUbyA6IHRoaXMuX3N0YXRlLmRhdGVGcm9tO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgZW5hYmxlVGltZTogdHJ1ZSxcbiAgICAgICAgZGF0ZUZvcm1hdDogJ2QvbS95IEg6aScsXG4gICAgICAgIGRlZmF1bHREYXRlOiBkYXRlLFxuICAgICAgICBvbkNoYW5nZTogc2VsZWN0ZWREYXRlcyA9PiB0aGlzLiNldmVudFN0YXJ0VGltZVRvZ2dsZUhhbmRsZXIoc2VsZWN0ZWREYXRlcywgaW5kZXgpXG4gICAgICB9O1xuICAgICAgY29uc3QgZGF0ZXBpY2tlckluc3RhbmNlID0gZmxhdHBpY2tyKGlucHV0LCBvcHRpb25zKTtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlcnNbaW5kZXhdID0gZGF0ZXBpY2tlckluc3RhbmNlO1xuICAgICAgdGhpcy4jdXBkYXRlRGF0ZVBpY2tlckNvbnN0cmFpbnRzKGluZGV4KTtcbiAgICB9KTtcbiAgfVxuICAjZXZlbnRTdGFydFRpbWVUb2dnbGVIYW5kbGVyID0gKFt1c2VyRGF0ZV0sIGluZGV4KSA9PiB7XG4gICAgdGhpcy51cGRhdGVFbGVtZW50KHtcbiAgICAgIFtpbmRleCA/ICdkYXRlVG8nIDogJ2RhdGVGcm9tJ106IHVzZXJEYXRlXG4gICAgfSk7XG4gICAgdGhpcy4jdXBkYXRlRGF0ZVBpY2tlckNvbnN0cmFpbnRzKGluZGV4KTtcbiAgfTtcbiAgI3VwZGF0ZURhdGVQaWNrZXJDb25zdHJhaW50cyhpbmRleCkge1xuICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLl9zdGF0ZS5kYXRlRnJvbTtcbiAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5fc3RhdGUuZGF0ZVRvO1xuICAgIGlmIChpbmRleCkge1xuICAgICAgdGhpcy5kYXRlcGlja2Vyc1tpbmRleF0uc2V0KCdtaW5EYXRlJywgbWluRGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlcnNbaW5kZXhdLnNldCgnbWF4RGF0ZScsIG1heERhdGUpO1xuICAgIH1cbiAgfVxuICBzdGF0aWMgcGFyc2VFdmVudERhdGFUb1N0YXRlKGV2ZW50RGF0YSkge1xuICAgIHJldHVybiBldmVudERhdGE7XG4gIH1cbiAgc3RhdGljIHBhcnNlU3RhdGVUb0V2ZW50RGF0YShzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAjZXZlbnRQcmljZVRvZ2dsZUhhbmRsZXIgPSBldnQgPT4ge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuX3NldFN0YXRlKHtcbiAgICAgIGJhc2VQcmljZTogZXZ0LnRhcmdldC52YWx1ZVxuICAgIH0pO1xuICB9O1xuICAjZXZlbnREZXN0aW5hdGlvblRvZ2dsZUhhbmRsZXIgPSBldnQgPT4ge1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSBldnQudGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjZGVzdGluYXRpb24tbGlzdC0xIG9wdGlvbicpO1xuICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gaW5wdXRWYWx1ZSkge1xuICAgICAgICBjb25zdCBjaXR5SWQgPSBvcHRpb24uZ2V0QXR0cmlidXRlKCdkYXRhLWRlc3RpbmF0aW9uLWlkJyk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRGVzdGluYXRpb24gPSB0aGlzLiNmaW5kRGVzdGluYXRpb25EYXRhKGNpdHlJZCk7XG4gICAgICAgIGlmIChzZWxlY3RlZERlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBzZWxlY3RlZERlc3RpbmF0aW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgI2V2ZW50VHlwZVRvZ2dsZUhhbmRsZXIgPSBldnQgPT4ge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IG5ld1R5cGUgPSBldnQudGFyZ2V0LmRhdGFzZXQuZXZlbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy51cGRhdGVFbGVtZW50KHtcbiAgICAgIHR5cGU6IGV2dC50YXJnZXQuZGF0YXNldC5ldmVudFR5cGUsXG4gICAgICBvZmZlcnM6IHRoaXMuI2dldE9mZmVyc01hcEJ5VHlwZShuZXdUeXBlKVxuICAgIH0pO1xuICB9O1xuICAjZXZlbnRPZmZlclRvZ2dsZUhhbmRsZXIgPSBldnQgPT4ge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IG9mZmVySWQgPSBldnQuY3VycmVudFRhcmdldC5kYXRhc2V0Lm9mZmVySWQ7XG4gICAgY29uc3Qgb2ZmZXJzID0gbmV3IE1hcCh0aGlzLl9zdGF0ZS5vZmZlcnMpO1xuICAgIGlmIChvZmZlcnMuaGFzKG9mZmVySWQpKSB7XG4gICAgICBjb25zdCBvZmZlciA9IG9mZmVycy5nZXQob2ZmZXJJZCk7XG4gICAgICBvZmZlci5pc0FjdGl2ZSA9ICFvZmZlci5pc0FjdGl2ZTtcbiAgICAgIG9mZmVycy5zZXQob2ZmZXJJZCwgb2ZmZXIpO1xuICAgICAgdGhpcy51cGRhdGVFbGVtZW50KHtcbiAgICAgICAgb2ZmZXJzOiBvZmZlcnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn0iLCJpbXBvcnQgeyByZW5kZXIsIHJlcGxhY2UsIHJlbW92ZSB9IGZyb20gJy4uL2ZyYW1ld29yay9yZW5kZXIuanMnO1xuaW1wb3J0IHsgaXNFc2NhcGVLZXkgfSBmcm9tICcuLi91dGlscy9jb21tb24uanMnO1xuaW1wb3J0IE5ld0V2ZW50c0l0ZW1WaWV3IGZyb20gJy4uL3ZpZXcvbmV3LWV2ZW50cy1pdGVtLXZpZXcuanMnO1xuaW1wb3J0IE5ld0V2ZW50RWRpdEVsZW1lbnRWaWV3IGZyb20gJy4uL3ZpZXcvbmV3LWV2ZW50LWVkaXQtZWxlbWVudC12aWV3LmpzJztcbmNvbnN0IE1vZGUgPSB7XG4gIERFRkFVTFQ6ICdERUZBVUxUJyxcbiAgRURJVElORzogJ0VESVRJTkcnXG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRQcmVzZW50ZXIge1xuICAjY29udGFpbmVyID0gbnVsbDtcbiAgI2hhbmRsZURhdGFDaGFuZ2UgPSBudWxsO1xuICAjaGFuZGxlTW9kZUNoYW5nZSA9IG51bGw7XG4gICNmaW5kRGVzdGluYXRpb25EYXRhID0gbnVsbDtcbiAgI2dldERlc3RpbmF0aW9uc0xpc3QgPSBudWxsO1xuICAjZ2V0T2ZmZXJzTWFwQnlUeXBlID0gbnVsbDtcbiAgI2V2ZW50Q29tcG9uZW50ID0gbnVsbDtcbiAgI2V2ZW50RWRpdENvbXBvbmVudCA9IG51bGw7XG4gICNldmVudEl0ZW0gPSBudWxsO1xuICAjbW9kZSA9IE1vZGUuREVGQVVMVDtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGNvbnRhaW5lcixcbiAgICBvbkRhdGFDaGFuZ2UsXG4gICAgb25Nb2RlQ2hhbmdlLFxuICAgIGZpbmREZXN0aW5hdGlvbkRhdGEsXG4gICAgZ2V0RGVzdGluYXRpb25zTGlzdCxcbiAgICBnZXRPZmZlcnNNYXBCeVR5cGVcbiAgfSkge1xuICAgIHRoaXMuI2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICB0aGlzLiNoYW5kbGVEYXRhQ2hhbmdlID0gb25EYXRhQ2hhbmdlO1xuICAgIHRoaXMuI2hhbmRsZU1vZGVDaGFuZ2UgPSBvbk1vZGVDaGFuZ2U7XG4gICAgdGhpcy4jZmluZERlc3RpbmF0aW9uRGF0YSA9IGZpbmREZXN0aW5hdGlvbkRhdGE7XG4gICAgdGhpcy4jZ2V0RGVzdGluYXRpb25zTGlzdCA9IGdldERlc3RpbmF0aW9uc0xpc3Q7XG4gICAgdGhpcy4jZ2V0T2ZmZXJzTWFwQnlUeXBlID0gZ2V0T2ZmZXJzTWFwQnlUeXBlO1xuICB9XG4gIGluaXQoZXZlbnRJdGVtKSB7XG4gICAgdGhpcy4jZXZlbnRJdGVtID0gZXZlbnRJdGVtO1xuICAgIGNvbnN0IHByZXZFdmVudENvbXBvbmVudCA9IHRoaXMuI2V2ZW50Q29tcG9uZW50O1xuICAgIGNvbnN0IHByZXZFdmVudEVkaXRDb21wb25lbnQgPSB0aGlzLiNldmVudEVkaXRDb21wb25lbnQ7XG4gICAgdGhpcy4jZXZlbnRDb21wb25lbnQgPSBuZXcgTmV3RXZlbnRzSXRlbVZpZXcoe1xuICAgICAgdXNlckV2ZW50OiB0aGlzLiNldmVudEl0ZW0sXG4gICAgICBvbkNsaWNrOiB0aGlzLiNoYW5kbGVFZGl0Q2xpY2ssXG4gICAgICBvbkZhdm9yaXRlQ2xpY2s6IHRoaXMuI2hhbmRsZUZhdm9yaXRlQ2xpY2tcbiAgICB9KTtcbiAgICB0aGlzLiNldmVudEVkaXRDb21wb25lbnQgPSBuZXcgTmV3RXZlbnRFZGl0RWxlbWVudFZpZXcoe1xuICAgICAgdXNlckV2ZW50OiB0aGlzLiNldmVudEl0ZW0sXG4gICAgICBvbkNsaWNrOiB0aGlzLiNoYW5kbGVTYXZlQ2xpY2ssXG4gICAgICBmaW5kRGVzdGluYXRpb246IHRoaXMuI2ZpbmREZXN0aW5hdGlvbkRhdGEsXG4gICAgICBnZXREZXN0aW5hdGlvbnNEYXRhOiB0aGlzLiNnZXREZXN0aW5hdGlvbnNMaXN0LFxuICAgICAgZ2V0T2ZmZXJzTWFwQnlUeXBlOiB0aGlzLiNnZXRPZmZlcnNNYXBCeVR5cGVcbiAgICB9KTtcbiAgICBpZiAocHJldkV2ZW50Q29tcG9uZW50ID09PSBudWxsIHx8IHByZXZFdmVudEVkaXRDb21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgIHJlbmRlcih0aGlzLiNldmVudENvbXBvbmVudCwgdGhpcy4jY29udGFpbmVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuI21vZGUgPT09IE1vZGUuREVGQVVMVCkge1xuICAgICAgcmVwbGFjZSh0aGlzLiNldmVudENvbXBvbmVudCwgcHJldkV2ZW50Q29tcG9uZW50KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuI21vZGUgPT09IE1vZGUuRURJVElORykge1xuICAgICAgcmVwbGFjZSh0aGlzLiNldmVudEVkaXRDb21wb25lbnQsIHByZXZFdmVudEVkaXRDb21wb25lbnQpO1xuICAgIH1cbiAgICByZW1vdmUocHJldkV2ZW50Q29tcG9uZW50KTtcbiAgICByZW1vdmUocHJldkV2ZW50RWRpdENvbXBvbmVudCk7XG4gIH1cbiAgI3JlcGxhY2VFdmVudENhcmRUb0VkaXRGb3JtKCkge1xuICAgIHJlcGxhY2UodGhpcy4jZXZlbnRFZGl0Q29tcG9uZW50LCB0aGlzLiNldmVudENvbXBvbmVudCk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuI2VzY0tleURvd25IYW5kbGVyKTtcbiAgICB0aGlzLiNoYW5kbGVNb2RlQ2hhbmdlKCk7XG4gICAgdGhpcy4jbW9kZSA9IE1vZGUuRURJVElORztcbiAgfVxuICAjcmVwbGFjZUVkaXRGb3JtVG9FdmVudENhcmQoKSB7XG4gICAgcmVwbGFjZSh0aGlzLiNldmVudENvbXBvbmVudCwgdGhpcy4jZXZlbnRFZGl0Q29tcG9uZW50KTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy4jZXNjS2V5RG93bkhhbmRsZXIpO1xuICAgIHRoaXMuI21vZGUgPSBNb2RlLkRFRkFVTFQ7XG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICByZW1vdmUodGhpcy4jZXZlbnRDb21wb25lbnQpO1xuICAgIHJlbW92ZSh0aGlzLiNldmVudEVkaXRDb21wb25lbnQpO1xuICB9XG4gIHJlc2V0VmlldygpIHtcbiAgICBpZiAodGhpcy4jbW9kZSAhPT0gTW9kZS5ERUZBVUxUKSB7XG4gICAgICB0aGlzLiNldmVudEVkaXRDb21wb25lbnQucmVzZXQodGhpcy4jZXZlbnRJdGVtKTtcbiAgICAgIHRoaXMuI3JlcGxhY2VFZGl0Rm9ybVRvRXZlbnRDYXJkKCk7XG4gICAgfVxuICB9XG4gICNlc2NLZXlEb3duSGFuZGxlciA9IGV2dCA9PiB7XG4gICAgaWYgKGlzRXNjYXBlS2V5KGV2dCkpIHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy4jcmVwbGFjZUVkaXRGb3JtVG9FdmVudENhcmQoKTtcbiAgICB9XG4gIH07XG4gICNoYW5kbGVFZGl0Q2xpY2sgPSAoKSA9PiB7XG4gICAgdGhpcy4jcmVwbGFjZUV2ZW50Q2FyZFRvRWRpdEZvcm0oKTtcbiAgfTtcbiAgI2hhbmRsZUZhdm9yaXRlQ2xpY2sgPSAoKSA9PiB7XG4gICAgdGhpcy4jaGFuZGxlRGF0YUNoYW5nZSh7XG4gICAgICAuLi50aGlzLiNldmVudEl0ZW0sXG4gICAgICBpc0Zhdm9yaXRlOiAhdGhpcy4jZXZlbnRJdGVtLmlzRmF2b3JpdGVcbiAgICB9KTtcbiAgfTtcbiAgI2hhbmRsZVNhdmVDbGljayA9IGV2ZW50SXRlbSA9PiB7XG4gICAgdGhpcy4jaGFuZGxlRGF0YUNoYW5nZShldmVudEl0ZW0pO1xuICAgIHRoaXMuI3JlcGxhY2VFZGl0Rm9ybVRvRXZlbnRDYXJkKCk7XG4gIH07XG59IiwiaW1wb3J0IEFic3RyYWN0VmlldyBmcm9tICcuLi9mcmFtZXdvcmsvdmlldy9hYnN0cmFjdC12aWV3JztcbmZ1bmN0aW9uIGNyZWF0ZU5vRXZlbnRzVmlld1RlbXBsYXRlKCkge1xuICByZXR1cm4gJzxwIGNsYXNzPVwidHJpcC1ldmVudHNfX21zZ1wiPkxvYWRpbmcuLi48L3A+Jztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vRXZlbnRzVmlldyBleHRlbmRzIEFic3RyYWN0VmlldyB7XG4gIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlTm9FdmVudHNWaWV3VGVtcGxhdGUoKTtcbiAgfVxufSIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gJy4uL2ZyYW1ld29yay9yZW5kZXIuanMnO1xuaW1wb3J0IHsgdXBkYXRlSXRlbSB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbi5qcyc7XG5pbXBvcnQgTmV3VHJpcFNvcnRWaWV3IGZyb20gJy4uL3ZpZXcvbmV3LXNvcnQtY29udGFpbmVyLXZpZXcuanMnO1xuaW1wb3J0IE5ld0V2ZW50c0xpc3RWaWV3IGZyb20gJy4uL3ZpZXcvbmV3LWV2ZW50cy1saXN0LXZpZXcuanMnO1xuaW1wb3J0IEV2ZW50UHJlc2VudGVyIGZyb20gJy4vZXZlbnQtcHJlc2VudGVyLmpzJztcbmltcG9ydCBOb0V2ZW50c1ZpZXcgZnJvbSAnLi4vdmlldy9uby1ldmVudHMtdmlldy5qcyc7XG5pbXBvcnQgeyBTb3J0VHlwZSB9IGZyb20gJy4uL2NvbnN0LmpzJztcbmltcG9ydCB7IHNvcnRFdmVudHNQcmljZSwgc29ydEV2ZW50c1RpbWUgfSBmcm9tICcuLi91dGlscy9ldmVudC5qcyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb2FyZFByZXNlbnRlciB7XG4gICNjb250YWluZXIgPSBudWxsO1xuICAjZXZlbnRzTW9kZWwgPSBudWxsO1xuICAjc29ydENvbXBvbmVudCA9IG51bGw7XG4gICNldmVudHNMaXN0Q29tcG9uZW50ID0gbmV3IE5ld0V2ZW50c0xpc3RWaWV3KCk7XG4gICNldmVudHNMaXN0ID0gW107XG4gICNldmVudFByZXNlbnRlcnMgPSBuZXcgTWFwKCk7XG4gICNjdXJyZW50U29ydFR5cGUgPSBTb3J0VHlwZS5ERUZBVUxUO1xuICAjc291cmNlZEJvYXJkRXZlbnRzID0gW107XG4gICNmaW5kRGVzdGluYXRpb25EYXRhID0gbnVsbDtcbiAgI2dldERlc3RpbmF0aW9uc0RhdGEgPSBudWxsO1xuICAjZ2V0T2ZmZXJzTWFwQnlUeXBlID0gbnVsbDtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGNvbnRhaW5lcixcbiAgICBldmVudHNNb2RlbFxuICB9KSB7XG4gICAgdGhpcy4jY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMuI2V2ZW50c01vZGVsID0gZXZlbnRzTW9kZWw7XG4gICAgdGhpcy4jZmluZERlc3RpbmF0aW9uRGF0YSA9IHRoaXMuI2V2ZW50c01vZGVsLmZpbmREZXN0aW5hdGlvbkRhdGE7XG4gICAgdGhpcy4jZ2V0RGVzdGluYXRpb25zRGF0YSA9IHRoaXMuI2V2ZW50c01vZGVsLmdldERlc3RpbmF0aW9uc0RhdGE7XG4gICAgdGhpcy4jZ2V0T2ZmZXJzTWFwQnlUeXBlID0gdGhpcy4jZXZlbnRzTW9kZWwuZ2V0T2ZmZXJzTWFwQnlUeXBlO1xuICB9XG4gIGluaXQoKSB7XG4gICAgdGhpcy4jZXZlbnRzTGlzdCA9IFsuLi50aGlzLiNldmVudHNNb2RlbC51c2VyRXZlbnRzXTtcbiAgICB0aGlzLiNzb3VyY2VkQm9hcmRFdmVudHMgPSBbLi4udGhpcy4jZXZlbnRzTW9kZWwudXNlckV2ZW50c107XG4gICAgdGhpcy4jcmVuZGVyQm9hcmQoKTtcbiAgICB0aGlzLiNyZW5kZXJTb3J0KCk7XG4gIH1cbiAgI3JlbmRlckV2ZW50KGlucHV0VXNlckV2ZW50KSB7XG4gICAgY29uc3QgZXZlbnRQcmVzZW50ZXIgPSBuZXcgRXZlbnRQcmVzZW50ZXIoe1xuICAgICAgY29udGFpbmVyOiB0aGlzLiNldmVudHNMaXN0Q29tcG9uZW50LmVsZW1lbnQsXG4gICAgICBvbkRhdGFDaGFuZ2U6IHRoaXMuI2hhbmRsZUV2ZW50Q2hhbmdlLFxuICAgICAgb25Nb2RlQ2hhbmdlOiB0aGlzLiNoYW5kbGVNb2RlQ2hhbmdlLFxuICAgICAgZmluZERlc3RpbmF0aW9uRGF0YTogdGhpcy4jZmluZERlc3RpbmF0aW9uRGF0YSxcbiAgICAgIGdldERlc3RpbmF0aW9uc0xpc3Q6IHRoaXMuI2dldERlc3RpbmF0aW9uc0RhdGEsXG4gICAgICBnZXRPZmZlcnNNYXBCeVR5cGU6IHRoaXMuI2dldE9mZmVyc01hcEJ5VHlwZVxuICAgIH0pO1xuICAgIGV2ZW50UHJlc2VudGVyLmluaXQoaW5wdXRVc2VyRXZlbnQpO1xuICAgIHRoaXMuI2V2ZW50UHJlc2VudGVycy5zZXQoaW5wdXRVc2VyRXZlbnQuaWQsIGV2ZW50UHJlc2VudGVyKTtcbiAgfVxuICAjcmVuZGVyTm9FdmVudHMoKSB7XG4gICAgcmVuZGVyKG5ldyBOb0V2ZW50c1ZpZXcoKSwgdGhpcy4jY29udGFpbmVyKTtcbiAgfVxuICAjc29ydEV2ZW50cyhzb3J0VHlwZSkge1xuICAgIHN3aXRjaCAoc29ydFR5cGUpIHtcbiAgICAgIGNhc2UgU29ydFR5cGUuUFJJQ0U6XG4gICAgICAgIHRoaXMuI2V2ZW50c0xpc3Quc29ydChzb3J0RXZlbnRzUHJpY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU29ydFR5cGUuVElNRTpcbiAgICAgICAgdGhpcy4jZXZlbnRzTGlzdC5zb3J0KHNvcnRFdmVudHNUaW1lKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLiNldmVudHNMaXN0ID0gWy4uLnRoaXMuI3NvdXJjZWRCb2FyZEV2ZW50c107XG4gICAgfVxuICAgIHRoaXMuI2N1cnJlbnRTb3J0VHlwZSA9IHNvcnRUeXBlO1xuICB9XG4gICNoYW5kbGVTb3J0VHlwZUNoYW5nZSA9IHNvcnRUeXBlID0+IHtcbiAgICBpZiAoc29ydFR5cGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLiNjdXJyZW50U29ydFR5cGUgPT09IHNvcnRUeXBlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuI3NvcnRFdmVudHMoc29ydFR5cGUpO1xuICAgIHRoaXMuI2NsZWFyRXZlbnRMaXN0KCk7XG4gICAgdGhpcy4jcmVuZGVyQm9hcmQoKTtcbiAgfTtcbiAgI3JlbmRlclNvcnQoKSB7XG4gICAgdGhpcy4jc29ydENvbXBvbmVudCA9IG5ldyBOZXdUcmlwU29ydFZpZXcoe1xuICAgICAgb25Tb3J0VHlwZUNoYW5nZTogdGhpcy4jaGFuZGxlU29ydFR5cGVDaGFuZ2VcbiAgICB9KTtcbiAgICByZW5kZXIodGhpcy4jc29ydENvbXBvbmVudCwgdGhpcy4jY29udGFpbmVyLCAnQUZURVJCRUdJTicpO1xuICB9XG4gICNyZW5kZXJCb2FyZCgpIHtcbiAgICBpZiAodGhpcy4jZXZlbnRzTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuI3JlbmRlck5vRXZlbnRzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlbmRlcih0aGlzLiNldmVudHNMaXN0Q29tcG9uZW50LCB0aGlzLiNjb250YWluZXIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy4jZXZlbnRzTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy4jcmVuZGVyRXZlbnQodGhpcy4jZXZlbnRzTGlzdFtpXSk7XG4gICAgfVxuICB9XG4gICNoYW5kbGVFdmVudENoYW5nZSA9IHVwZGF0ZWRFdmVudCA9PiB7XG4gICAgdGhpcy4jZXZlbnRzTGlzdCA9IHVwZGF0ZUl0ZW0odGhpcy4jZXZlbnRzTGlzdCwgdXBkYXRlZEV2ZW50KTtcbiAgICB0aGlzLiNzb3VyY2VkQm9hcmRFdmVudHMgPSB1cGRhdGVJdGVtKHRoaXMuI3NvdXJjZWRCb2FyZEV2ZW50cywgdXBkYXRlZEV2ZW50KTtcbiAgICB0aGlzLiNldmVudFByZXNlbnRlcnMuZ2V0KHVwZGF0ZWRFdmVudC5pZCkuaW5pdCh1cGRhdGVkRXZlbnQpO1xuICB9O1xuICAjaGFuZGxlTW9kZUNoYW5nZSA9ICgpID0+IHtcbiAgICB0aGlzLiNldmVudFByZXNlbnRlcnMuZm9yRWFjaChwcmVzZW50ZXIgPT4gcHJlc2VudGVyLnJlc2V0VmlldygpKTtcbiAgfTtcbiAgI2NsZWFyRXZlbnRMaXN0KCkge1xuICAgIHRoaXMuI2V2ZW50UHJlc2VudGVycy5mb3JFYWNoKHByZXNlbnRlciA9PiBwcmVzZW50ZXIuZGVzdHJveSgpKTtcbiAgICB0aGlzLiNldmVudFByZXNlbnRlcnMuY2xlYXIoKTtcbiAgfVxufSIsImltcG9ydCB7IEZpbHRlclR5cGUgfSBmcm9tICcuLi9jb25zdCc7XG5pbXBvcnQgeyBpc0V2ZW50RnV0dXJlLCBpc0V2ZW50UHJlc2VudCwgaXNFdmVudFBhc3QgfSBmcm9tICcuL2V2ZW50JztcbmNvbnN0IGZpbHRlciA9IHtcbiAgW0ZpbHRlclR5cGUuRVZFUllUSElOR106IHVzZXJFdmVudHMgPT4gdXNlckV2ZW50cyxcbiAgW0ZpbHRlclR5cGUuRlVUVVJFXTogdXNlckV2ZW50cyA9PiB1c2VyRXZlbnRzLmZpbHRlcih1c2VyRXZlbnQgPT4gaXNFdmVudEZ1dHVyZSh1c2VyRXZlbnQuZGF0ZUZyb20pKSxcbiAgW0ZpbHRlclR5cGUuUFJFU0VOVF06IHVzZXJFdmVudHMgPT4gdXNlckV2ZW50cy5maWx0ZXIodXNlckV2ZW50ID0+IGlzRXZlbnRQcmVzZW50KHVzZXJFdmVudC5kYXRlRnJvbSkpLFxuICBbRmlsdGVyVHlwZS5QQVNUXTogdXNlckV2ZW50cyA9PiB1c2VyRXZlbnRzLmZpbHRlcih1c2VyRXZlbnQgPT4gaXNFdmVudFBhc3QodXNlckV2ZW50LmRhdGVGcm9tKSlcbn07XG5leHBvcnQgeyBmaWx0ZXIgfTsiLCJpbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnO1xuZnVuY3Rpb24gZ2VuZXJhdGVGaWx0ZXIodXNlckV2ZW50cykge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZmlsdGVyKS5tYXAoKFtmaWx0ZXJUeXBlLCBmaWx0ZXJFdmVudHNdKSA9PiAoe1xuICAgIHR5cGU6IGZpbHRlclR5cGUsXG4gICAgY291bnQ6IGZpbHRlckV2ZW50cyh1c2VyRXZlbnRzKS5sZW5ndGhcbiAgfSkpO1xufVxuZXhwb3J0IHsgZ2VuZXJhdGVGaWx0ZXIgfTsiLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tICcuL2ZyYW1ld29yay9yZW5kZXIuanMnO1xuaW1wb3J0IEV2ZW50c01vZGVsIGZyb20gJy4vbW9kZWwvZXZlbnRzLW1vZGVsLmpzJztcbmltcG9ydCBOZXdUcmlwSW5mb1ZpZXcgZnJvbSAnLi92aWV3L25ldy10cmlwLWluZm8tdmlldy5qcyc7XG5pbXBvcnQgTmV3VHJpcEZpbHRlcnNWaWV3IGZyb20gJy4vdmlldy9uZXctZmlsdGVycy12aWV3LmpzJztcbmltcG9ydCBCb2FyZFByZXNlbnRlciBmcm9tICcuL3ByZXNlbnRlci9ib2FyZC1wcmVzZW50ZXIuanMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVGaWx0ZXIgfSBmcm9tICcuL21vY2svZmlsdGVyLmpzJztcbmNvbnN0IHRyaXBNYWluQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRyaXAtbWFpbicpO1xuY29uc3QgdHJpcEZpbHRlcnNDb250YWluZXIgPSB0cmlwTWFpbkNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcudHJpcC1jb250cm9sc19fZmlsdGVycycpO1xuY29uc3QgdHJpcEV2ZW50c0NvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50cmlwLWV2ZW50cycpO1xuY29uc3QgZXZlbnRzTW9kZWwgPSBuZXcgRXZlbnRzTW9kZWwoKTtcbmNvbnN0IGJvYXJkUHJlc2VudGVyID0gbmV3IEJvYXJkUHJlc2VudGVyKHtcbiAgY29udGFpbmVyOiB0cmlwRXZlbnRzQ29udGFpbmVyLFxuICBldmVudHNNb2RlbFxufSk7XG5jb25zdCBmaWx0ZXJzID0gZ2VuZXJhdGVGaWx0ZXIoZXZlbnRzTW9kZWwudXNlckV2ZW50cyk7XG5yZW5kZXIobmV3IE5ld1RyaXBJbmZvVmlldygpLCB0cmlwTWFpbkNvbnRhaW5lciwgJ0FGVEVSQkVHSU4nKTtcbnJlbmRlcihuZXcgTmV3VHJpcEZpbHRlcnNWaWV3KHtcbiAgZmlsdGVyc1xufSksIHRyaXBGaWx0ZXJzQ29udGFpbmVyKTtcbmJvYXJkUHJlc2VudGVyLmluaXQoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///680\n')},821:(module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81);\n/* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(645);\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ".flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08)}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none !important;box-shadow:none !important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:\'\';height:0;width:0;left:22px}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.arrowRight:after{left:auto;right:22px}.flatpickr-calendar.arrowCenter:before,.flatpickr-calendar.arrowCenter:after{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9)}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{/*\\n /*rtl:begin:ignore*/left:0/*\\n /*rtl:end:ignore*/}/*\\n /*rtl:begin:ignore*/\\n/*\\n /*rtl:end:ignore*/\\n.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{/*\\n /*rtl:begin:ignore*/right:0/*\\n /*rtl:end:ignore*/}/*\\n /*rtl:begin:ignore*/\\n/*\\n /*rtl:end:ignore*/\\n.flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#959ea9}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,0.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,0.1)}.numInputWrapper span:active{background:rgba(0,0,0,0.2)}.numInputWrapper span:after{display:block;content:\\"\\";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,0.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,0.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,0.5)}.numInputWrapper:hover{background:rgba(0,0,0,0.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\\\\0;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,0.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,0.9)}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,0.5);background:transparent;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:rgba(0,0,0,0.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer + .dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:rgba(57,57,57,0.3);background:transparent;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,0.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,0.3);background:transparent;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:\\"\\";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:bold}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:bold;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}", ""]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZmxhdHBpY2tyLm1pbi5jc3M/OTdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfTk9fU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvbm9Tb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9OT19TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5mbGF0cGlja3ItY2FsZW5kYXJ7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtvcGFjaXR5OjA7ZGlzcGxheTpub25lO3RleHQtYWxpZ246Y2VudGVyO3Zpc2liaWxpdHk6aGlkZGVuO3BhZGRpbmc6MDstd2Via2l0LWFuaW1hdGlvbjpub25lO2FuaW1hdGlvbjpub25lO2RpcmVjdGlvbjpsdHI7Ym9yZGVyOjA7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjVweDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozMDcuODc1cHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94Oy1tcy10b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9uO3RvdWNoLWFjdGlvbjptYW5pcHVsYXRpb247YmFja2dyb3VuZDojZmZmOy13ZWJraXQtYm94LXNoYWRvdzoxcHggMCAwICNlNmU2ZTYsLTFweCAwIDAgI2U2ZTZlNiwwIDFweCAwICNlNmU2ZTYsMCAtMXB4IDAgI2U2ZTZlNiwwIDNweCAxM3B4IHJnYmEoMCwwLDAsMC4wOCk7Ym94LXNoYWRvdzoxcHggMCAwICNlNmU2ZTYsLTFweCAwIDAgI2U2ZTZlNiwwIDFweCAwICNlNmU2ZTYsMCAtMXB4IDAgI2U2ZTZlNiwwIDNweCAxM3B4IHJnYmEoMCwwLDAsMC4wOCl9LmZsYXRwaWNrci1jYWxlbmRhci5vcGVuLC5mbGF0cGlja3ItY2FsZW5kYXIuaW5saW5le29wYWNpdHk6MTttYXgtaGVpZ2h0OjY0MHB4O3Zpc2liaWxpdHk6dmlzaWJsZX0uZmxhdHBpY2tyLWNhbGVuZGFyLm9wZW57ZGlzcGxheTppbmxpbmUtYmxvY2s7ei1pbmRleDo5OTk5OX0uZmxhdHBpY2tyLWNhbGVuZGFyLmFuaW1hdGUub3Blbnstd2Via2l0LWFuaW1hdGlvbjpmcEZhZGVJbkRvd24gMzAwbXMgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTthbmltYXRpb246ZnBGYWRlSW5Eb3duIDMwMG1zIGN1YmljLWJlemllciguMjMsMSwuMzIsMSl9LmZsYXRwaWNrci1jYWxlbmRhci5pbmxpbmV7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MnB4fS5mbGF0cGlja3ItY2FsZW5kYXIuc3RhdGlje3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKDEwMCUgKyAycHgpfS5mbGF0cGlja3ItY2FsZW5kYXIuc3RhdGljLm9wZW57ei1pbmRleDo5OTk7ZGlzcGxheTpibG9ja30uZmxhdHBpY2tyLWNhbGVuZGFyLm11bHRpTW9udGggLmZsYXRwaWNrci1kYXlzIC5kYXlDb250YWluZXI6bnRoLWNoaWxkKG4rMSkgLmZsYXRwaWNrci1kYXkuaW5SYW5nZTpudGgtY2hpbGQoN24rNyl7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmUgIWltcG9ydGFudDtib3gtc2hhZG93Om5vbmUgIWltcG9ydGFudH0uZmxhdHBpY2tyLWNhbGVuZGFyLm11bHRpTW9udGggLmZsYXRwaWNrci1kYXlzIC5kYXlDb250YWluZXI6bnRoLWNoaWxkKG4rMikgLmZsYXRwaWNrci1kYXkuaW5SYW5nZTpudGgtY2hpbGQoN24rMSl7LXdlYmtpdC1ib3gtc2hhZG93Oi0ycHggMCAwICNlNmU2ZTYsNXB4IDAgMCAjZTZlNmU2O2JveC1zaGFkb3c6LTJweCAwIDAgI2U2ZTZlNiw1cHggMCAwICNlNmU2ZTZ9LmZsYXRwaWNrci1jYWxlbmRhciAuaGFzV2Vla3MgLmRheUNvbnRhaW5lciwuZmxhdHBpY2tyLWNhbGVuZGFyIC5oYXNUaW1lIC5kYXlDb250YWluZXJ7Ym9yZGVyLWJvdHRvbTowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5mbGF0cGlja3ItY2FsZW5kYXIgLmhhc1dlZWtzIC5kYXlDb250YWluZXJ7Ym9yZGVyLWxlZnQ6MH0uZmxhdHBpY2tyLWNhbGVuZGFyLmhhc1RpbWUgLmZsYXRwaWNrci10aW1le2hlaWdodDo0MHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTZ9LmZsYXRwaWNrci1jYWxlbmRhci5ub0NhbGVuZGFyLmhhc1RpbWUgLmZsYXRwaWNrci10aW1le2hlaWdodDphdXRvfS5mbGF0cGlja3ItY2FsZW5kYXI6YmVmb3JlLC5mbGF0cGlja3ItY2FsZW5kYXI6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztwb2ludGVyLWV2ZW50czpub25lO2JvcmRlcjpzb2xpZCB0cmFuc3BhcmVudDtjb250ZW50OicnO2hlaWdodDowO3dpZHRoOjA7bGVmdDoyMnB4fS5mbGF0cGlja3ItY2FsZW5kYXIucmlnaHRNb3N0OmJlZm9yZSwuZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93UmlnaHQ6YmVmb3JlLC5mbGF0cGlja3ItY2FsZW5kYXIucmlnaHRNb3N0OmFmdGVyLC5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dSaWdodDphZnRlcntsZWZ0OmF1dG87cmlnaHQ6MjJweH0uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Q2VudGVyOmJlZm9yZSwuZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Q2VudGVyOmFmdGVye2xlZnQ6NTAlO3JpZ2h0OjUwJX0uZmxhdHBpY2tyLWNhbGVuZGFyOmJlZm9yZXtib3JkZXItd2lkdGg6NXB4O21hcmdpbjowIC01cHh9LmZsYXRwaWNrci1jYWxlbmRhcjphZnRlcntib3JkZXItd2lkdGg6NHB4O21hcmdpbjowIC00cHh9LmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1RvcDpiZWZvcmUsLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1RvcDphZnRlcntib3R0b206MTAwJX0uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93VG9wOmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOiNlNmU2ZTZ9LmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1RvcDphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOiNmZmZ9LmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0JvdHRvbTpiZWZvcmUsLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0JvdHRvbTphZnRlcnt0b3A6MTAwJX0uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Qm90dG9tOmJlZm9yZXtib3JkZXItdG9wLWNvbG9yOiNlNmU2ZTZ9LmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0JvdHRvbTphZnRlcntib3JkZXItdG9wLWNvbG9yOiNmZmZ9LmZsYXRwaWNrci1jYWxlbmRhcjpmb2N1c3tvdXRsaW5lOjB9LmZsYXRwaWNrci13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5mbGF0cGlja3ItbW9udGhze2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1tb250aHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOnJnYmEoMCwwLDAsMC45KTtmaWxsOnJnYmEoMCwwLDAsMC45KTtoZWlnaHQ6MzRweDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC1ib3gtZmxleDoxOy13ZWJraXQtZmxleDoxOy1tcy1mbGV4OjE7ZmxleDoxfS5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aCwuZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGh7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2hlaWdodDozNHB4O3BhZGRpbmc6MTBweDt6LWluZGV4OjM7Y29sb3I6cmdiYSgwLDAsMCwwLjkpO2ZpbGw6cmdiYSgwLDAsMCwwLjkpfS5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aC5mbGF0cGlja3ItZGlzYWJsZWQsLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoLmZsYXRwaWNrci1kaXNhYmxlZHtkaXNwbGF5Om5vbmV9LmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoIGksLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoIGl7cG9zaXRpb246cmVsYXRpdmV9LmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoLmZsYXRwaWNrci1wcmV2LW1vbnRoLC5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aC5mbGF0cGlja3ItcHJldi1tb250aHsvKlxcbiAgICAgIC8qcnRsOmJlZ2luOmlnbm9yZSovbGVmdDowLypcXG4gICAgICAvKnJ0bDplbmQ6aWdub3JlKi99LypcXG4gICAgICAvKnJ0bDpiZWdpbjppZ25vcmUqL1xcbi8qXFxuICAgICAgLypydGw6ZW5kOmlnbm9yZSovXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoLmZsYXRwaWNrci1uZXh0LW1vbnRoLC5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aC5mbGF0cGlja3ItbmV4dC1tb250aHsvKlxcbiAgICAgIC8qcnRsOmJlZ2luOmlnbm9yZSovcmlnaHQ6MC8qXFxuICAgICAgLypydGw6ZW5kOmlnbm9yZSovfS8qXFxuICAgICAgLypydGw6YmVnaW46aWdub3JlKi9cXG4vKlxcbiAgICAgIC8qcnRsOmVuZDppZ25vcmUqL1xcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aDpob3ZlciwuZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGg6aG92ZXJ7Y29sb3I6Izk1OWVhOX0uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGg6aG92ZXIgc3ZnLC5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aDpob3ZlciBzdmd7ZmlsbDojZjY0NzQ3fS5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aCBzdmcsLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoIHN2Z3t3aWR0aDoxNHB4O2hlaWdodDoxNHB4fS5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aCBzdmcgcGF0aCwuZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGggc3ZnIHBhdGh7LXdlYmtpdC10cmFuc2l0aW9uOmZpbGwgLjFzO3RyYW5zaXRpb246ZmlsbCAuMXM7ZmlsbDppbmhlcml0fS5udW1JbnB1dFdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OmF1dG99Lm51bUlucHV0V3JhcHBlciBpbnB1dCwubnVtSW5wdXRXcmFwcGVyIHNwYW57ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm51bUlucHV0V3JhcHBlciBpbnB1dHt3aWR0aDoxMDAlfS5udW1JbnB1dFdyYXBwZXIgaW5wdXQ6Oi1tcy1jbGVhcntkaXNwbGF5Om5vbmV9Lm51bUlucHV0V3JhcHBlciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwubnVtSW5wdXRXcmFwcGVyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9ue21hcmdpbjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5udW1JbnB1dFdyYXBwZXIgc3Bhbntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOjE0cHg7cGFkZGluZzowIDRweCAwIDJweDtoZWlnaHQ6NTAlO2xpbmUtaGVpZ2h0OjUwJTtvcGFjaXR5OjA7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDU3LDU3LDU3LDAuMTUpOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubnVtSW5wdXRXcmFwcGVyIHNwYW46aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuMSl9Lm51bUlucHV0V3JhcHBlciBzcGFuOmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC4yKX0ubnVtSW5wdXRXcmFwcGVyIHNwYW46YWZ0ZXJ7ZGlzcGxheTpibG9jaztjb250ZW50OlxcXCJcXFwiO3Bvc2l0aW9uOmFic29sdXRlfS5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd1Vwe3RvcDowO2JvcmRlci1ib3R0b206MH0ubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dVcDphZnRlcntib3JkZXItbGVmdDo0cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjRweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjRweCBzb2xpZCByZ2JhKDU3LDU3LDU3LDAuNik7dG9wOjI2JX0ubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3due3RvcDo1MCV9Lm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93RG93bjphZnRlcntib3JkZXItbGVmdDo0cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjRweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItdG9wOjRweCBzb2xpZCByZ2JhKDU3LDU3LDU3LDAuNik7dG9wOjQwJX0ubnVtSW5wdXRXcmFwcGVyIHNwYW4gc3Zne3dpZHRoOmluaGVyaXQ7aGVpZ2h0OmF1dG99Lm51bUlucHV0V3JhcHBlciBzcGFuIHN2ZyBwYXRoe2ZpbGw6cmdiYSgwLDAsMCwwLjUpfS5udW1JbnB1dFdyYXBwZXI6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuMDUpfS5udW1JbnB1dFdyYXBwZXI6aG92ZXIgc3BhbntvcGFjaXR5OjF9LmZsYXRwaWNrci1jdXJyZW50LW1vbnRoe2ZvbnQtc2l6ZToxMzUlO2xpbmUtaGVpZ2h0OmluaGVyaXQ7Zm9udC13ZWlnaHQ6MzAwO2NvbG9yOmluaGVyaXQ7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6NzUlO2xlZnQ6MTIuNSU7cGFkZGluZzo3LjQ4cHggMCAwIDA7bGluZS1oZWlnaHQ6MTtoZWlnaHQ6MzRweDtkaXNwbGF5OmlubGluZS1ibG9jazt0ZXh0LWFsaWduOmNlbnRlcjstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKX0uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggc3Bhbi5jdXItbW9udGh7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXdlaWdodDo3MDA7Y29sb3I6aW5oZXJpdDtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDouNWNoO3BhZGRpbmc6MH0uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggc3Bhbi5jdXItbW9udGg6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuMDUpfS5mbGF0cGlja3ItY3VycmVudC1tb250aCAubnVtSW5wdXRXcmFwcGVye3dpZHRoOjZjaDt3aWR0aDo3Y2hcXFxcMDtkaXNwbGF5OmlubGluZS1ibG9ja30uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93VXA6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsMCwwLDAuOSl9LmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd0Rvd246YWZ0ZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLDAuOSl9LmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFye2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnRleHQ7cGFkZGluZzowIDAgMCAuNWNoO21hcmdpbjowO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC13ZWlnaHQ6MzAwO2xpbmUtaGVpZ2h0OmluaGVyaXQ7aGVpZ2h0OmF1dG87Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO3ZlcnRpY2FsLWFsaWduOmluaXRpYWw7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDstbW96LWFwcGVhcmFuY2U6dGV4dGZpZWxkO2FwcGVhcmFuY2U6dGV4dGZpZWxkfS5mbGF0cGlja3ItY3VycmVudC1tb250aCBpbnB1dC5jdXIteWVhcjpmb2N1c3tvdXRsaW5lOjB9LmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyW2Rpc2FibGVkXSwuZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggaW5wdXQuY3VyLXllYXJbZGlzYWJsZWRdOmhvdmVye2ZvbnQtc2l6ZToxMDAlO2NvbG9yOnJnYmEoMCwwLDAsMC41KTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O3BvaW50ZXItZXZlbnRzOm5vbmV9LmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHN7YXBwZWFyYW5jZTptZW51bGlzdDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6aW5oZXJpdDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtd2VpZ2h0OjMwMDtoZWlnaHQ6YXV0bztsaW5lLWhlaWdodDppbmhlcml0O21hcmdpbjotMXB4IDAgMCAwO291dGxpbmU6bm9uZTtwYWRkaW5nOjAgMCAwIC41Y2g7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246aW5pdGlhbDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWFwcGVhcmFuY2U6bWVudWxpc3Q7LW1vei1hcHBlYXJhbmNlOm1lbnVsaXN0O3dpZHRoOmF1dG99LmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHM6Zm9jdXMsLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHM6YWN0aXZle291dGxpbmU6bm9uZX0uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLmZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoczpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC4wNSl9LmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHMgLmZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoe2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7b3V0bGluZTpub25lO3BhZGRpbmc6MH0uZmxhdHBpY2tyLXdlZWtkYXlze2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7dGV4dC1hbGlnbjpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MjhweH0uZmxhdHBpY2tyLXdlZWtkYXlzIC5mbGF0cGlja3Itd2Vla2RheWNvbnRhaW5lcntkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LWZsZXg6MTstd2Via2l0LWZsZXg6MTstbXMtZmxleDoxO2ZsZXg6MX1zcGFuLmZsYXRwaWNrci13ZWVrZGF5e2N1cnNvcjpkZWZhdWx0O2ZvbnQtc2l6ZTo5MCU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjpyZ2JhKDAsMCwwLDAuNTQpO2xpbmUtaGVpZ2h0OjE7bWFyZ2luOjA7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpibG9jazstd2Via2l0LWJveC1mbGV4OjE7LXdlYmtpdC1mbGV4OjE7LW1zLWZsZXg6MTtmbGV4OjE7Zm9udC13ZWlnaHQ6Ym9sZGVyfS5kYXlDb250YWluZXIsLmZsYXRwaWNrci13ZWVrc3twYWRkaW5nOjFweCAwIDAgMH0uZmxhdHBpY2tyLWRheXN7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtYWxpZ246c3RhcnQ7LXdlYmtpdC1hbGlnbi1pdGVtczpmbGV4LXN0YXJ0Oy1tcy1mbGV4LWFsaWduOnN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7d2lkdGg6MzA3Ljg3NXB4fS5mbGF0cGlja3ItZGF5czpmb2N1c3tvdXRsaW5lOjB9LmRheUNvbnRhaW5lcntwYWRkaW5nOjA7b3V0bGluZTowO3RleHQtYWxpZ246bGVmdDt3aWR0aDozMDcuODc1cHg7bWluLXdpZHRoOjMwNy44NzVweDttYXgtd2lkdGg6MzA3Ljg3NXB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1ibG9jaztkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7LW1zLWZsZXgtd3JhcDp3cmFwOy1tcy1mbGV4LXBhY2s6anVzdGlmeTstd2Via2l0LWp1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTtvcGFjaXR5OjF9LmRheUNvbnRhaW5lciArIC5kYXlDb250YWluZXJ7LXdlYmtpdC1ib3gtc2hhZG93Oi0xcHggMCAwICNlNmU2ZTY7Ym94LXNoYWRvdzotMXB4IDAgMCAjZTZlNmU2fS5mbGF0cGlja3ItZGF5e2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MTUwcHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOiMzOTM5Mzk7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NDAwO3dpZHRoOjE0LjI4NTcxNDMlOy13ZWJraXQtZmxleC1iYXNpczoxNC4yODU3MTQzJTstbXMtZmxleC1wcmVmZXJyZWQtc2l6ZToxNC4yODU3MTQzJTtmbGV4LWJhc2lzOjE0LjI4NTcxNDMlO21heC13aWR0aDozOXB4O2hlaWdodDozOXB4O2xpbmUtaGVpZ2h0OjM5cHg7bWFyZ2luOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXJ9LmZsYXRwaWNrci1kYXkuaW5SYW5nZSwuZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXkuaW5SYW5nZSwuZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXkuaW5SYW5nZSwuZmxhdHBpY2tyLWRheS50b2RheS5pblJhbmdlLC5mbGF0cGlja3ItZGF5LnByZXZNb250aERheS50b2RheS5pblJhbmdlLC5mbGF0cGlja3ItZGF5Lm5leHRNb250aERheS50b2RheS5pblJhbmdlLC5mbGF0cGlja3ItZGF5OmhvdmVyLC5mbGF0cGlja3ItZGF5LnByZXZNb250aERheTpob3ZlciwuZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXk6aG92ZXIsLmZsYXRwaWNrci1kYXk6Zm9jdXMsLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5OmZvY3VzLC5mbGF0cGlja3ItZGF5Lm5leHRNb250aERheTpmb2N1c3tjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7YmFja2dyb3VuZDojZTZlNmU2O2JvcmRlci1jb2xvcjojZTZlNmU2fS5mbGF0cGlja3ItZGF5LnRvZGF5e2JvcmRlci1jb2xvcjojOTU5ZWE5fS5mbGF0cGlja3ItZGF5LnRvZGF5OmhvdmVyLC5mbGF0cGlja3ItZGF5LnRvZGF5OmZvY3Vze2JvcmRlci1jb2xvcjojOTU5ZWE5O2JhY2tncm91bmQ6Izk1OWVhOTtjb2xvcjojZmZmfS5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLC5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2UsLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2UsLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQuaW5SYW5nZSwuZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLmluUmFuZ2UsLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2UuaW5SYW5nZSwuZmxhdHBpY2tyLWRheS5zZWxlY3RlZDpmb2N1cywuZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlOmZvY3VzLC5mbGF0cGlja3ItZGF5LmVuZFJhbmdlOmZvY3VzLC5mbGF0cGlja3ItZGF5LnNlbGVjdGVkOmhvdmVyLC5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2U6aG92ZXIsLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2U6aG92ZXIsLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQucHJldk1vbnRoRGF5LC5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2UucHJldk1vbnRoRGF5LC5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnByZXZNb250aERheSwuZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5uZXh0TW9udGhEYXksLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5uZXh0TW9udGhEYXksLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2UubmV4dE1vbnRoRGF5e2JhY2tncm91bmQ6IzU2OWZmNzstd2Via2l0LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmU7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6IzU2OWZmN30uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5zdGFydFJhbmdlLC5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2Uuc3RhcnRSYW5nZSwuZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5zdGFydFJhbmdle2JvcmRlci1yYWRpdXM6NTBweCAwIDAgNTBweH0uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5lbmRSYW5nZSwuZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLmVuZFJhbmdlLC5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLmVuZFJhbmdle2JvcmRlci1yYWRpdXM6MCA1MHB4IDUwcHggMH0uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5zdGFydFJhbmdlICsgLmVuZFJhbmdlOm5vdCg6bnRoLWNoaWxkKDduKzEpKSwuZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLnN0YXJ0UmFuZ2UgKyAuZW5kUmFuZ2U6bm90KDpudGgtY2hpbGQoN24rMSkpLC5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnN0YXJ0UmFuZ2UgKyAuZW5kUmFuZ2U6bm90KDpudGgtY2hpbGQoN24rMSkpey13ZWJraXQtYm94LXNoYWRvdzotMTBweCAwIDAgIzU2OWZmNztib3gtc2hhZG93Oi0xMHB4IDAgMCAjNTY5ZmY3fS5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnN0YXJ0UmFuZ2UuZW5kUmFuZ2UsLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5zdGFydFJhbmdlLmVuZFJhbmdlLC5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnN0YXJ0UmFuZ2UuZW5kUmFuZ2V7Ym9yZGVyLXJhZGl1czo1MHB4fS5mbGF0cGlja3ItZGF5LmluUmFuZ2V7Ym9yZGVyLXJhZGl1czowOy13ZWJraXQtYm94LXNoYWRvdzotNXB4IDAgMCAjZTZlNmU2LDVweCAwIDAgI2U2ZTZlNjtib3gtc2hhZG93Oi01cHggMCAwICNlNmU2ZTYsNXB4IDAgMCAjZTZlNmU2fS5mbGF0cGlja3ItZGF5LmZsYXRwaWNrci1kaXNhYmxlZCwuZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQ6aG92ZXIsLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5LC5mbGF0cGlja3ItZGF5Lm5leHRNb250aERheSwuZmxhdHBpY2tyLWRheS5ub3RBbGxvd2VkLC5mbGF0cGlja3ItZGF5Lm5vdEFsbG93ZWQucHJldk1vbnRoRGF5LC5mbGF0cGlja3ItZGF5Lm5vdEFsbG93ZWQubmV4dE1vbnRoRGF5e2NvbG9yOnJnYmEoNTcsNTcsNTcsMC4zKTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjdXJzb3I6ZGVmYXVsdH0uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQsLmZsYXRwaWNrci1kYXkuZmxhdHBpY2tyLWRpc2FibGVkOmhvdmVye2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjpyZ2JhKDU3LDU3LDU3LDAuMSl9LmZsYXRwaWNrci1kYXkud2Vlay5zZWxlY3RlZHtib3JkZXItcmFkaXVzOjA7LXdlYmtpdC1ib3gtc2hhZG93Oi01cHggMCAwICM1NjlmZjcsNXB4IDAgMCAjNTY5ZmY3O2JveC1zaGFkb3c6LTVweCAwIDAgIzU2OWZmNyw1cHggMCAwICM1NjlmZjd9LmZsYXRwaWNrci1kYXkuaGlkZGVue3Zpc2liaWxpdHk6aGlkZGVufS5yYW5nZU1vZGUgLmZsYXRwaWNrci1kYXl7bWFyZ2luLXRvcDoxcHh9LmZsYXRwaWNrci13ZWVrd3JhcHBlcntmbG9hdDpsZWZ0fS5mbGF0cGlja3Itd2Vla3dyYXBwZXIgLmZsYXRwaWNrci13ZWVrc3twYWRkaW5nOjAgMTJweDstd2Via2l0LWJveC1zaGFkb3c6MXB4IDAgMCAjZTZlNmU2O2JveC1zaGFkb3c6MXB4IDAgMCAjZTZlNmU2fS5mbGF0cGlja3Itd2Vla3dyYXBwZXIgLmZsYXRwaWNrci13ZWVrZGF5e2Zsb2F0Om5vbmU7d2lkdGg6MTAwJTtsaW5lLWhlaWdodDoyOHB4fS5mbGF0cGlja3Itd2Vla3dyYXBwZXIgc3Bhbi5mbGF0cGlja3ItZGF5LC5mbGF0cGlja3Itd2Vla3dyYXBwZXIgc3Bhbi5mbGF0cGlja3ItZGF5OmhvdmVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTttYXgtd2lkdGg6bm9uZTtjb2xvcjpyZ2JhKDU3LDU3LDU3LDAuMyk7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjdXJzb3I6ZGVmYXVsdDtib3JkZXI6bm9uZX0uZmxhdHBpY2tyLWlubmVyQ29udGFpbmVye2Rpc3BsYXk6YmxvY2s7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVufS5mbGF0cGlja3ItckNvbnRhaW5lcntkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjA7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5mbGF0cGlja3ItdGltZXt0ZXh0LWFsaWduOmNlbnRlcjtvdXRsaW5lOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDtsaW5lLWhlaWdodDo0MHB4O21heC1oZWlnaHQ6NDBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LmZsYXRwaWNrci10aW1lOmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTp0YWJsZTtjbGVhcjpib3RofS5mbGF0cGlja3ItdGltZSAubnVtSW5wdXRXcmFwcGVyey13ZWJraXQtYm94LWZsZXg6MTstd2Via2l0LWZsZXg6MTstbXMtZmxleDoxO2ZsZXg6MTt3aWR0aDo0MCU7aGVpZ2h0OjQwcHg7ZmxvYXQ6bGVmdH0uZmxhdHBpY2tyLXRpbWUgLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93VXA6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMzkzOTM5fS5mbGF0cGlja3ItdGltZSAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3duOmFmdGVye2JvcmRlci10b3AtY29sb3I6IzM5MzkzOX0uZmxhdHBpY2tyLXRpbWUuaGFzU2Vjb25kcyAubnVtSW5wdXRXcmFwcGVye3dpZHRoOjI2JX0uZmxhdHBpY2tyLXRpbWUudGltZTI0aHIgLm51bUlucHV0V3JhcHBlcnt3aWR0aDo0OSV9LmZsYXRwaWNrci10aW1lIGlucHV0e2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDtwYWRkaW5nOjA7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDtjb2xvcjojMzkzOTM5O2ZvbnQtc2l6ZToxNHB4O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkOy1tb3otYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7YXBwZWFyYW5jZTp0ZXh0ZmllbGR9LmZsYXRwaWNrci10aW1lIGlucHV0LmZsYXRwaWNrci1ob3Vye2ZvbnQtd2VpZ2h0OmJvbGR9LmZsYXRwaWNrci10aW1lIGlucHV0LmZsYXRwaWNrci1taW51dGUsLmZsYXRwaWNrci10aW1lIGlucHV0LmZsYXRwaWNrci1zZWNvbmR7Zm9udC13ZWlnaHQ6NDAwfS5mbGF0cGlja3ItdGltZSBpbnB1dDpmb2N1c3tvdXRsaW5lOjA7Ym9yZGVyOjB9LmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItdGltZS1zZXBhcmF0b3IsLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItYW0tcG17aGVpZ2h0OmluaGVyaXQ7ZmxvYXQ6bGVmdDtsaW5lLWhlaWdodDppbmhlcml0O2NvbG9yOiMzOTM5Mzk7Zm9udC13ZWlnaHQ6Ym9sZDt3aWR0aDoyJTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC1hbGlnbi1zZWxmOmNlbnRlcjstbXMtZmxleC1pdGVtLWFsaWduOmNlbnRlcjthbGlnbi1zZWxmOmNlbnRlcn0uZmxhdHBpY2tyLXRpbWUgLmZsYXRwaWNrci1hbS1wbXtvdXRsaW5lOjA7d2lkdGg6MTglO2N1cnNvcjpwb2ludGVyO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OjQwMH0uZmxhdHBpY2tyLXRpbWUgaW5wdXQ6aG92ZXIsLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItYW0tcG06aG92ZXIsLmZsYXRwaWNrci10aW1lIGlucHV0OmZvY3VzLC5mbGF0cGlja3ItdGltZSAuZmxhdHBpY2tyLWFtLXBtOmZvY3Vze2JhY2tncm91bmQ6I2VlZX0uZmxhdHBpY2tyLWlucHV0W3JlYWRvbmx5XXtjdXJzb3I6cG9pbnRlcn1ALXdlYmtpdC1rZXlmcmFtZXMgZnBGYWRlSW5Eb3due2Zyb217b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCl9dG97b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApfX1Aa2V5ZnJhbWVzIGZwRmFkZUluRG93bntmcm9te29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApfXRve29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKX19XCIsIFwiXCJdKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n')},10:(module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ".shake {\\n animation: shake 0.6s;\\n position: relative;\\n z-index: 10;\\n}\\n\\n@keyframes shake {\\n 0%,\\n 100% {\\n transform: translateX(0);\\n }\\n\\n 10%,\\n 30%,\\n 50%,\\n 70%,\\n 90% {\\n transform: translateX(-5px);\\n }\\n\\n 20%,\\n 40%,\\n 60%,\\n 80% {\\n transform: translateX(5px);\\n }\\n}\\n", ""]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9iaWctdHJpcC8uL3NyYy9mcmFtZXdvcmsvdmlldy9hYnN0cmFjdC12aWV3LmNzcz9kZjNkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9OT19TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvbm9Tb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfTk9fU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuc2hha2Uge1xcbiAgYW5pbWF0aW9uOiBzaGFrZSAwLjZzO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogMTA7XFxufVxcblxcbkBrZXlmcmFtZXMgc2hha2Uge1xcbiAgMCUsXFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xcbiAgfVxcblxcbiAgMTAlLFxcbiAgMzAlLFxcbiAgNTAlLFxcbiAgNzAlLFxcbiAgOTAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01cHgpO1xcbiAgfVxcblxcbiAgMjAlLFxcbiAgNDAlLFxcbiAgNjAlLFxcbiAgODAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDVweCk7XFxuICB9XFxufVxcblwiLCBcIlwiXSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///10\n')},645:module=>{"use strict";eval('\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = "";\n var needLayer = typeof item[5] !== "undefined";\n if (item[4]) {\n content += "@supports (".concat(item[4], ") {");\n }\n if (item[2]) {\n content += "@media ".concat(item[2], " {");\n }\n if (needLayer) {\n content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += "}";\n }\n if (item[2]) {\n content += "}";\n }\n if (item[4]) {\n content += "}";\n }\n return content;\n }).join("");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === "string") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== "undefined") {\n if (typeof item[5] === "undefined") {\n item[5] = layer;\n } else {\n item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = "".concat(supports);\n } else {\n item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQ1LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmlnLXRyaXAvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzPzI0ZmIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107XG5cbiAgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICB2YXIgbmVlZExheWVyID0gdHlwZW9mIGl0ZW1bNV0gIT09IFwidW5kZWZpbmVkXCI7XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBjb250ZW50ICs9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07XG5cbiAgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgbGlzdC5pID0gZnVuY3Rpb24gaShtb2R1bGVzLCBtZWRpYSwgZGVkdXBlLCBzdXBwb3J0cywgbGF5ZXIpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIHVuZGVmaW5lZF1dO1xuICAgIH1cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2tdWzBdO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBfayA9IDA7IF9rIDwgbW9kdWxlcy5sZW5ndGg7IF9rKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2tdKTtcbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWzVdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobWVkaWEpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN1cHBvcnRzKSB7XG4gICAgICAgIGlmICghaXRlbVs0XSkge1xuICAgICAgICAgIGl0ZW1bNF0gPSBcIlwiLmNvbmNhdChzdXBwb3J0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzRdID0gc3VwcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBsaXN0O1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///645\n')},81:module=>{"use strict";eval("\n\nmodule.exports = function (i) {\n return i[1];\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2JpZy10cmlwLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL25vU291cmNlTWFwcy5qcz8yN2M4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiBpWzFdO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///81\n")},484:function(module){eval('!function(t,e){ true?module.exports=e():0}(this,(function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",f="month",h="quarter",c="year",d="date",l="Invalid Date",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()