/******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./content/default/components/organisms/cookiebar/cookiebar.js": /*!*********************************************************************!*\ !*** ./content/default/components/organisms/cookiebar/cookiebar.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ CookieBar) /* harmony export */ }); var cm_active_categories = [1,12,13,14,15]; var cm_preactive_categories = []; class CookieBar { constructor() { this.init(); } init() { this.blocked_nodes = {}; this.external_nodes = []; this.internal_nodes = []; this.inline_nodes = []; this.add_observer(); document.addEventListener("DOMContentLoaded", () => { this.init_cookie_consent(); }); } add_observer() { var observer = new MutationObserver((mutations) => { for (var i = 0; i < mutations.length; i++) { var _ref = mutations[i]; var addedNodes = _ref.addedNodes; for (var j = 0; j < addedNodes.length; j++) { var node = addedNodes[j]; if (node.nodeType === 1) { var src = node.src || ''; var type = node.type; var consent_type = ''; if (typeof node.attributes.consent_type !== 'undefined' && typeof node.attributes.consent_type.value !== 'undefined') consent_type = node.attributes.consent_type.value; if (this.blocked_content_type(consent_type)) { if (typeof this.blocked_nodes[consent_type] === 'undefined') this.blocked_nodes[consent_type] = []; var clone; if (node.tagName === 'SCRIPT') { clone = node.cloneNode(true); } else { clone = node; } clone.air_prev = node.previousElementSibling; clone.air_next = node.nextElementSibling; clone.air_parent = node.parentElement; this.blocked_nodes[consent_type].push(clone); if (node.tagName === 'SCRIPT') node.type = 'javascript/blocked'; node.parentElement.removeChild(node); var beforeScriptExecuteListener = function beforeScriptExecuteListener(event) { event.preventDefault(); }; node.addEventListener('beforescriptexecute', beforeScriptExecuteListener); } else { this.log_node(node, consent_type); } } } } }); observer.observe(document.documentElement, { childList: true, subtree: true }); } blocked_content_type(consent_type) { var blocked = 0; if ((typeof (cm_active_categories) == "undefined" || cm_active_categories.includes(parseInt(consent_type))) && consent_type && !check_consent(consent_type, "") && consent_type > 1) blocked = 1; return blocked; } log_node(node, consent_type) { if (node.tagName === 'SCRIPT') { if (node.src && (node.src.indexOf(window.location.host) <= -1 || node.src.indexOf(window.location.host) > 10)) { this.external_nodes.push(node.src); } else if (node.src) { this.internal_nodes.push(node.src); } else { this.inline_nodes.push(node.innerHTML); } } } init_cookie_consent(force) { var cookie_consent = get_cookie_consent("air_cookie_consent") || ""; var all_signed = 0; var consents = []; if (cookie_consent) { all_signed = 1; consents = JSON.parse(cookie_consent); var elements = document.querySelectorAll('#cookie_consent_manager input[type=checkbox]'); for (let element of elements) { if (typeof (consents[element.value]) == "undefined") all_signed = 0; } } else { var elements = document.querySelectorAll('#cookie_consent_manager input[type=checkbox][prechecked=true]'); for (let element of elements) { element.checked = true; } } if (!all_signed || force) { document.getElementById('cookie_consent').style.display = 'block'; var elements = document.querySelectorAll('#cookie_consent_manager input[type=checkbox]'); for (let element of elements) { if (consents[element.value]) element.checked = consents[element.value]; } this.init_acm_click_events(); } }; init_acm_click_events() { document.getElementById("cookie_consent_manage").addEventListener("click", () => { let cookie_consent_manager = document.getElementById('cookie_consent_manager'); if (cookie_consent_manager) cookie_consent_manager.style.display = 'block'; let cookie_consent = document.getElementById('cookie_consent'); if (cookie_consent) cookie_consent.classList.add('managing'); document.querySelectorAll(".dimmer2").forEach(item => { item.addEventListener('click', event => { item.classList.add('active') }) }); }); document.getElementById("cookie_consent_manage_rec").addEventListener("click", () => { var elements = document.querySelectorAll('#cookie_consent_manager input[type=checkbox]'); for (let element of elements) { element.checked = true; } document.getElementById("cookie_consent_manager_confirm").dispatchEvent(new Event("click")); }); let cookie_consent_manager_accept = document.getElementById("cookie_consent_manager_accept"); if (cookie_consent_manager_accept) { cookie_consent_manager_accept.addEventListener("click", () => { this.cm_action(true); }); } document.getElementById("cookie_consent_manager_confirm").addEventListener("click", () => { this.cm_action(); }); document.querySelectorAll(".cookie_consent_manager_accept_req").forEach(item => { item.addEventListener('click', event => { this.cm_action(false); }) }); } cm_action(consent) { let cookie_consent = document.getElementById('cookie_consent'); if (cookie_consent) cookie_consent.style.display = 'none'; let cookie_consent_manager = document.getElementById('cookie_consent_manager'); if (cookie_consent_manager) cookie_consent_manager.style.display = 'none'; document.querySelectorAll(".dimmer2").forEach(item => { item.addEventListener('click', event => { item.classList.remove('active') }) }); let consents = {}; const elements = document.querySelectorAll('#cookie_consent_manager input[type=checkbox]'); for (let element of elements) { consents[element.value] = typeof (consent) !== "undefined" ? consent : element.checked; } consents[1] = true; let cookie_consents = JSON.stringify(consents); this.set_cookie_consent(cookie_consents); this.consent_action(cookie_consents); window.dispatchEvent(new Event("acm_change")); } set_cookie_consent(value) { var exdate = new Date(); exdate.setDate(exdate.getDate() + 30); document.cookie = "air_cookie_consent" + "=" + value + "; expires= " + exdate.toUTCString() + "; path=/" + (location.protocol === "https:" ? "; secure" : ""); } consent_action(cookie_consent) { var consent_data = JSON.parse(cookie_consent); for (var category_id in consent_data) { if (consent_data[category_id]) { this.approve_category(category_id); } } } approve_category(category_id) { if (typeof this.blocked_nodes[category_id] !== 'undefined') { for (let node of this.blocked_nodes[category_id]) { if (node.type == "text/javascript") { var script = document.createElement("script"); script.type = "text/javascript"; if (node.src) { script.src = node.src; } else if (node.innerHTML) { script.innerHTML = node.innerHTML; } document.getElementsByTagName("head")[0].appendChild(script); } else if (node.air_prev && node.air_parent) { this.cm_insertAfter(node, node.air_prev, node.air_parent); } else if (node.air_next && node.air_parent) { node.air_parent.insertBefore(node, node.air_next); } else if (node.air_parent) { node.air_parent.append(node); } } delete this.blocked_nodes[category_id]; } } cm_insertAfter(newNode, existingNode, parent) { parent.insertBefore(newNode, existingNode.nextSibling); } } window.check_consent = function (type, cookie_consent) { if (!type) return false; if (!cookie_consent) cookie_consent = get_cookie_consent("air_cookie_consent"); if (!cookie_consent) return (typeof (cm_preactive_categories) == "undefined" || cm_preactive_categories.includes(parseInt(type))); var consents = JSON.parse(cookie_consent); if (typeof (consents[type]) === 'undefined') return false; return consents[type]; } window.get_cookie_consent = function (name) { var nameEQ = name + "="; var ca = document.cookie.split('; '); for (let c of ca) { if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length); } return null; } /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. (() => { /*!*****************************!*\ !*** ./content/critical.js ***! \*****************************/ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _default_components_organisms_cookiebar_cookiebar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./default/components/organisms/cookiebar/cookiebar */ "./content/default/components/organisms/cookiebar/cookiebar.js"); class Critical { constructor() { this.cookiebar = new _default_components_organisms_cookiebar_cookiebar__WEBPACK_IMPORTED_MODULE_0__["default"]() } } const critical = new Critical(); window.CookieBar = _default_components_organisms_cookiebar_cookiebar__WEBPACK_IMPORTED_MODULE_0__["default"]; })(); /******/ })() ; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWVzL2h5cGVmcm9udC9hc3NldHMvY3JpdGljYWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEIsc0JBQXNCO0FBQ2xEO0FBQ0E7QUFDQSxnQ0FBZ0MsdUJBQXVCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRSx1Q0FBdUMsK0NBQStDO0FBQ3hKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztVQy9QQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3RCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHlDQUF5Qyx3Q0FBd0M7V0FDakY7V0FDQTtXQUNBOzs7OztXQ1BBOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7Ozs7Ozs7O0FDTjBFOztBQUUxRTtBQUNBO0FBQ0EseUJBQXlCLHlGQUFTO0FBQ2xDO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jb250ZW50Ly4vY29udGVudC9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL2Nvb2tpZWJhci9jb29raWViYXIuanMiLCJ3ZWJwYWNrOi8vY29udGVudC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9jb250ZW50L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9jb250ZW50L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vY29udGVudC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL2NvbnRlbnQvLi9jb250ZW50L2NyaXRpY2FsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBjbV9hY3RpdmVfY2F0ZWdvcmllcyA9IFsxLDEyLDEzLDE0LDE1XTtcbnZhciBjbV9wcmVhY3RpdmVfY2F0ZWdvcmllcyA9IFtdO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29va2llQmFyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5ibG9ja2VkX25vZGVzID0ge307XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxfbm9kZXMgPSBbXTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbF9ub2RlcyA9IFtdO1xuICAgICAgICB0aGlzLmlubGluZV9ub2RlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMuYWRkX29ic2VydmVyKCk7XG5cbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbml0X2Nvb2tpZV9jb25zZW50KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZF9vYnNlcnZlcigpIHtcbiAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtdXRhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgX3JlZiA9IG11dGF0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICB2YXIgYWRkZWROb2RlcyA9IF9yZWYuYWRkZWROb2RlcztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFkZGVkTm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBhZGRlZE5vZGVzW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyYyA9IG5vZGUuc3JjIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBub2RlLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uc2VudF90eXBlID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS5hdHRyaWJ1dGVzLmNvbnNlbnRfdHlwZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5vZGUuYXR0cmlidXRlcy5jb25zZW50X3R5cGUudmFsdWUgIT09ICd1bmRlZmluZWQnKSBjb25zZW50X3R5cGUgPSBub2RlLmF0dHJpYnV0ZXMuY29uc2VudF90eXBlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYmxvY2tlZF9jb250ZW50X3R5cGUoY29uc2VudF90eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5ibG9ja2VkX25vZGVzW2NvbnNlbnRfdHlwZV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJsb2NrZWRfbm9kZXNbY29uc2VudF90eXBlXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsb25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnRhZ05hbWUgPT09ICdTQ1JJUFQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lID0gbm9kZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZSA9IG5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUuYWlyX3ByZXYgPSBub2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUuYWlyX25leHQgPSBub2RlLm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZS5haXJfcGFyZW50ID0gbm9kZS5wYXJlbnRFbGVtZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9ja2VkX25vZGVzW2NvbnNlbnRfdHlwZV0ucHVzaChjbG9uZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudGFnTmFtZSA9PT0gJ1NDUklQVCcpIG5vZGUudHlwZSA9ICdqYXZhc2NyaXB0L2Jsb2NrZWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmVmb3JlU2NyaXB0RXhlY3V0ZUxpc3RlbmVyID0gZnVuY3Rpb24gYmVmb3JlU2NyaXB0RXhlY3V0ZUxpc3RlbmVyKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXNjcmlwdGV4ZWN1dGUnLCBiZWZvcmVTY3JpcHRFeGVjdXRlTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dfbm9kZShub2RlLCBjb25zZW50X3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwge1xuICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICAgICAgc3VidHJlZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBibG9ja2VkX2NvbnRlbnRfdHlwZShjb25zZW50X3R5cGUpIHtcbiAgICAgICAgdmFyIGJsb2NrZWQgPSAwO1xuICAgICAgICBpZiAoKHR5cGVvZiAoY21fYWN0aXZlX2NhdGVnb3JpZXMpID09IFwidW5kZWZpbmVkXCIgfHwgY21fYWN0aXZlX2NhdGVnb3JpZXMuaW5jbHVkZXMocGFyc2VJbnQoY29uc2VudF90eXBlKSkpICYmIGNvbnNlbnRfdHlwZSAmJiAhY2hlY2tfY29uc2VudChjb25zZW50X3R5cGUsIFwiXCIpICYmIGNvbnNlbnRfdHlwZSA+IDEpIGJsb2NrZWQgPSAxO1xuICAgICAgICByZXR1cm4gYmxvY2tlZDtcbiAgICB9XG5cbiAgICBsb2dfbm9kZShub2RlLCBjb25zZW50X3R5cGUpIHtcbiAgICAgICAgaWYgKG5vZGUudGFnTmFtZSA9PT0gJ1NDUklQVCcpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnNyYyAmJiAobm9kZS5zcmMuaW5kZXhPZih3aW5kb3cubG9jYXRpb24uaG9zdCkgPD0gLTEgfHwgbm9kZS5zcmMuaW5kZXhPZih3aW5kb3cubG9jYXRpb24uaG9zdCkgPiAxMCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4dGVybmFsX25vZGVzLnB1c2gobm9kZS5zcmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobm9kZS5zcmMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsX25vZGVzLnB1c2gobm9kZS5zcmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVfbm9kZXMucHVzaChub2RlLmlubmVySFRNTCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0X2Nvb2tpZV9jb25zZW50KGZvcmNlKSB7XG4gICAgICAgIHZhciBjb29raWVfY29uc2VudCA9IGdldF9jb29raWVfY29uc2VudChcImFpcl9jb29raWVfY29uc2VudFwiKSB8fCBcIlwiO1xuICAgICAgICB2YXIgYWxsX3NpZ25lZCA9IDA7XG4gICAgICAgIHZhciBjb25zZW50cyA9IFtdO1xuICAgICAgICBpZiAoY29va2llX2NvbnNlbnQpIHtcbiAgICAgICAgICAgIGFsbF9zaWduZWQgPSAxO1xuICAgICAgICAgICAgY29uc2VudHMgPSBKU09OLnBhcnNlKGNvb2tpZV9jb25zZW50KTtcblxuICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2Nvb2tpZV9jb25zZW50X21hbmFnZXIgaW5wdXRbdHlwZT1jaGVja2JveF0nKTtcbiAgICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChjb25zZW50c1tlbGVtZW50LnZhbHVlXSkgPT0gXCJ1bmRlZmluZWRcIikgYWxsX3NpZ25lZCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjY29va2llX2NvbnNlbnRfbWFuYWdlciBpbnB1dFt0eXBlPWNoZWNrYm94XVtwcmVjaGVja2VkPXRydWVdJyk7XG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWxsX3NpZ25lZCB8fCBmb3JjZSkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nvb2tpZV9jb25zZW50Jykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNjb29raWVfY29uc2VudF9tYW5hZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdJyk7XG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnNlbnRzW2VsZW1lbnQudmFsdWVdKSBlbGVtZW50LmNoZWNrZWQgPSBjb25zZW50c1tlbGVtZW50LnZhbHVlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbml0X2FjbV9jbGlja19ldmVudHMoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBpbml0X2FjbV9jbGlja19ldmVudHMoKSB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29va2llX2NvbnNlbnRfbWFuYWdlXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY29va2llX2NvbnNlbnRfbWFuYWdlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb29raWVfY29uc2VudF9tYW5hZ2VyJyk7XG4gICAgICAgICAgICBpZiAoY29va2llX2NvbnNlbnRfbWFuYWdlcikgY29va2llX2NvbnNlbnRfbWFuYWdlci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblxuICAgICAgICAgICAgbGV0IGNvb2tpZV9jb25zZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nvb2tpZV9jb25zZW50Jyk7XG4gICAgICAgICAgICBpZiAoY29va2llX2NvbnNlbnQpIGNvb2tpZV9jb25zZW50LmNsYXNzTGlzdC5hZGQoJ21hbmFnaW5nJyk7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZGltbWVyMlwiKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJylcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvb2tpZV9jb25zZW50X21hbmFnZV9yZWNcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNjb29raWVfY29uc2VudF9tYW5hZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdJyk7XG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb29raWVfY29uc2VudF9tYW5hZ2VyX2NvbmZpcm1cIikuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjbGlja1wiKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY29va2llX2NvbnNlbnRfbWFuYWdlcl9hY2NlcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvb2tpZV9jb25zZW50X21hbmFnZXJfYWNjZXB0XCIpO1xuICAgICAgICBpZiAoY29va2llX2NvbnNlbnRfbWFuYWdlcl9hY2NlcHQpIHtcbiAgICAgICAgICAgIGNvb2tpZV9jb25zZW50X21hbmFnZXJfYWNjZXB0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbV9hY3Rpb24odHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvb2tpZV9jb25zZW50X21hbmFnZXJfY29uZmlybVwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbV9hY3Rpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuY29va2llX2NvbnNlbnRfbWFuYWdlcl9hY2NlcHRfcmVxXCIpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY21fYWN0aW9uKGZhbHNlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNtX2FjdGlvbihjb25zZW50KSB7XG4gICAgICAgIGxldCBjb29raWVfY29uc2VudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb29raWVfY29uc2VudCcpO1xuICAgICAgICBpZiAoY29va2llX2NvbnNlbnQpIGNvb2tpZV9jb25zZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgbGV0IGNvb2tpZV9jb25zZW50X21hbmFnZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29va2llX2NvbnNlbnRfbWFuYWdlcicpO1xuICAgICAgICBpZiAoY29va2llX2NvbnNlbnRfbWFuYWdlcikgY29va2llX2NvbnNlbnRfbWFuYWdlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZGltbWVyMlwiKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgY29uc2VudHMgPSB7fTtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjY29va2llX2NvbnNlbnRfbWFuYWdlciBpbnB1dFt0eXBlPWNoZWNrYm94XScpO1xuICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBjb25zZW50c1tlbGVtZW50LnZhbHVlXSA9IHR5cGVvZiAoY29uc2VudCkgIT09IFwidW5kZWZpbmVkXCIgPyBjb25zZW50IDogZWxlbWVudC5jaGVja2VkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc2VudHNbMV0gPSB0cnVlO1xuICAgICAgICBsZXQgY29va2llX2NvbnNlbnRzID0gSlNPTi5zdHJpbmdpZnkoY29uc2VudHMpO1xuICAgICAgICB0aGlzLnNldF9jb29raWVfY29uc2VudChjb29raWVfY29uc2VudHMpO1xuICAgICAgICB0aGlzLmNvbnNlbnRfYWN0aW9uKGNvb2tpZV9jb25zZW50cyk7XG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImFjbV9jaGFuZ2VcIikpO1xuICAgIH1cblxuICAgIHNldF9jb29raWVfY29uc2VudCh2YWx1ZSkge1xuICAgICAgICB2YXIgZXhkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgZXhkYXRlLnNldERhdGUoZXhkYXRlLmdldERhdGUoKSArIDMwKTtcbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gXCJhaXJfY29va2llX2NvbnNlbnRcIiArIFwiPVwiICsgdmFsdWUgKyBcIjsgZXhwaXJlcz0gXCIgKyBleGRhdGUudG9VVENTdHJpbmcoKSArIFwiOyBwYXRoPS9cIiArIChsb2NhdGlvbi5wcm90b2NvbCA9PT0gXCJodHRwczpcIiA/IFwiOyBzZWN1cmVcIiA6IFwiXCIpO1xuICAgIH1cblxuICAgIGNvbnNlbnRfYWN0aW9uKGNvb2tpZV9jb25zZW50KSB7XG4gICAgICAgIHZhciBjb25zZW50X2RhdGEgPSBKU09OLnBhcnNlKGNvb2tpZV9jb25zZW50KTtcbiAgICAgICAgZm9yICh2YXIgY2F0ZWdvcnlfaWQgaW4gY29uc2VudF9kYXRhKSB7XG4gICAgICAgICAgICBpZiAoY29uc2VudF9kYXRhW2NhdGVnb3J5X2lkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwcm92ZV9jYXRlZ29yeShjYXRlZ29yeV9pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhcHByb3ZlX2NhdGVnb3J5KGNhdGVnb3J5X2lkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ibG9ja2VkX25vZGVzW2NhdGVnb3J5X2lkXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG5vZGUgb2YgdGhpcy5ibG9ja2VkX25vZGVzW2NhdGVnb3J5X2lkXSkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT0gXCJ0ZXh0L2phdmFzY3JpcHRcIikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgc2NyaXB0LnR5cGUgPSBcInRleHQvamF2YXNjcmlwdFwiO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnNyYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LnNyYyA9IG5vZGUuc3JjO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUuaW5uZXJIVE1MKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuaW5uZXJIVE1MID0gbm9kZS5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUuYWlyX3ByZXYgJiYgbm9kZS5haXJfcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY21faW5zZXJ0QWZ0ZXIobm9kZSwgbm9kZS5haXJfcHJldiwgbm9kZS5haXJfcGFyZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS5haXJfbmV4dCAmJiBub2RlLmFpcl9wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5haXJfcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCBub2RlLmFpcl9uZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS5haXJfcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYWlyX3BhcmVudC5hcHBlbmQobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYmxvY2tlZF9ub2Rlc1tjYXRlZ29yeV9pZF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbV9pbnNlcnRBZnRlcihuZXdOb2RlLCBleGlzdGluZ05vZGUsIHBhcmVudCkge1xuICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIGV4aXN0aW5nTm9kZS5uZXh0U2libGluZyk7XG4gICAgfVxufVxuXG53aW5kb3cuY2hlY2tfY29uc2VudCA9IGZ1bmN0aW9uICh0eXBlLCBjb29raWVfY29uc2VudCkge1xuICAgIGlmICghdHlwZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghY29va2llX2NvbnNlbnQpIGNvb2tpZV9jb25zZW50ID0gZ2V0X2Nvb2tpZV9jb25zZW50KFwiYWlyX2Nvb2tpZV9jb25zZW50XCIpO1xuXG4gICAgaWYgKCFjb29raWVfY29uc2VudCkgcmV0dXJuICh0eXBlb2YgKGNtX3ByZWFjdGl2ZV9jYXRlZ29yaWVzKSA9PSBcInVuZGVmaW5lZFwiIHx8IGNtX3ByZWFjdGl2ZV9jYXRlZ29yaWVzLmluY2x1ZGVzKHBhcnNlSW50KHR5cGUpKSk7XG5cbiAgICB2YXIgY29uc2VudHMgPSBKU09OLnBhcnNlKGNvb2tpZV9jb25zZW50KTtcbiAgICBpZiAodHlwZW9mIChjb25zZW50c1t0eXBlXSkgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gY29uc2VudHNbdHlwZV07XG59XG5cbndpbmRvdy5nZXRfY29va2llX2NvbnNlbnQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBuYW1lRVEgPSBuYW1lICsgXCI9XCI7XG4gICAgdmFyIGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7ICcpO1xuICAgIGZvciAobGV0IGMgb2YgY2EpIHtcbiAgICAgICAgaWYgKGMuaW5kZXhPZihuYW1lRVEpID09PSAwKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCwgYy5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiaW1wb3J0IENvb2tpZUJhciBmcm9tIFwiLi9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL2Nvb2tpZWJhci9jb29raWViYXJcIlxuXG5jbGFzcyBDcml0aWNhbCB7XG4gIGNvbnN0cnVjdG9yKCkgeyAgICBcbiAgICB0aGlzLmNvb2tpZWJhciA9IG5ldyBDb29raWVCYXIoKVxuICB9XG59XG5cbmNvbnN0IGNyaXRpY2FsID0gbmV3IENyaXRpY2FsKCk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=