(()=>{"use strict";var __webpack_modules__={5808:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{eval('\n// EXTERNAL MODULE: ./node_modules/regenerator-runtime/runtime.js\nvar runtime = __webpack_require__(5666);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.array.map.js\nvar es6_array_map = __webpack_require__(9371);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.function.name.js\nvar es6_function_name = __webpack_require__(6059);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.regexp.replace.js\nvar es6_regexp_replace = __webpack_require__(9357);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.to-string.js\nvar es6_object_to_string = __webpack_require__(6253);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.promise.js\nvar es6_promise = __webpack_require__(851);\n// EXTERNAL MODULE: ./node_modules/axios/index.js\nvar axios = __webpack_require__(9669);\nvar axios_default = /*#__PURE__*/__webpack_require__.n(axios);\n// EXTERNAL MODULE: ./src/js/common/index.js + 58 modules\nvar common = __webpack_require__(1694);\n// EXTERNAL MODULE: ./src/js/common/util.js\nvar util = __webpack_require__(3517);\n;// CONCATENATED MODULE: ./src/js/info/video/src/entity/youtube.js\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }\n\n\n\nvar Youtube = /*#__PURE__*/function () {\n  function Youtube() {\n    var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n      "id": 0,\n      "categories": null,\n      "title": "",\n      "createdBy": "",\n      "creatorNickname": "",\n      "createdDate": "",\n      "urlId": ""\n    };\n\n    _classCallCheck(this, Youtube);\n\n    var id = data.id,\n        categories = data.categories,\n        title = data.title,\n        createdBy = data.createdBy,\n        creatorNickname = data.creatorNickname,\n        createdDate = data.createdDate,\n        urlId = data.urlId;\n    this.id = id;\n    this.categories = categories;\n    this.title = title;\n    this.createdBy = createdBy;\n    this.creatorNickname = creatorNickname;\n    this.createdDate = createdDate;\n    this.urlId = urlId;\n  } // render(){\n  //     return `<li class="gallery-item">\n  //     <a href="javascript:void(0)" id="btnOpenYoutubeModal" data-bs-toggle="modal" data-bs-target=".video-item-modal"  data-url="//www.youtube.com/embed/${this.urlId}" data-title="${this.title} ">\n  //       <div class="gallery-item-img">\n  //         <picture>\n  //           <img src=\'https://i.ytimg.com/vi/${this.urlId}/maxresdefault.jpg\' class = "youtubeThumb">\n  //         </picture>\n  //       </div>\n  //       <div class="gallery-item-content">\n  //         <p class="gi-content-category">${this.categories!=null?this.categories:""}</p>\n  //         <p class="gi-content-title">${this.title}</p>\n  //         <p class="gi-content-date">${util.dateFormat(new Date(this.createdDate)).substring(0,10)}</p>\n  //       </div>\n  //     </a>\n  //   </li>`\n  // }\n  // 24.09.25. 수정 gun\n\n\n  _createClass(Youtube, [{\n    key: "render",\n    value: function render() {\n      return "<li class=\\"gallery-item\\">\\n        <a href=\\"javascript:void(0)\\" id=\\"btnOpenYoutubeModal\\" data-bs-toggle=\\"modal\\" data-bs-target=\\".video-item-modal\\"  data-url=\\"//www.youtube.com/embed/".concat(this.urlId, "\\" data-title=\\"").concat(this.title, " \\">\\n          <div class=\\"gallery-item-img\\">\\n            <picture>\\n              <img src=\'https://i.ytimg.com/vi/").concat(this.urlId, "/maxresdefault.jpg\' class = \\"youtubeThumb\\"  id=\\"btnOpenYoutubeModal\\" data-bs-toggle=\\"modal\\" data-bs-target=\\".video-item-modal\\"  data-url=\\"//www.youtube.com/embed/").concat(this.urlId, "\\" data-title=\\"").concat(this.title, " \\">\\n            </picture>\\n          </div>\\n          <div class=\\"gallery-item-content\\"  data-bs-toggle=\\"modal\\" data-bs-target=\\".video-item-modal\\" id=\\"btnOpenYoutubeModal\\"  data-bs-toggle=\\"modal\\" data-bs-target=\\".video-item-modal\\"  data-url=\\"//www.youtube.com/embed/").concat(this.urlId, "\\" data-title=\\"").concat(this.title, " \\">\\n            <p class=\\"gi-content-category\\" id=\\"btnOpenYoutubeModal\\"  data-bs-toggle=\\"modal\\" data-bs-target=\\".video-item-modal\\"  data-url=\\"//www.youtube.com/embed/").concat(this.urlId, "\\" data-title=\\"").concat(this.title, " \\">").concat(this.categories != null ? this.categories : "", "</p>\\n            <p class=\\"gi-content-title\\" id=\\"btnOpenYoutubeModal\\"  data-bs-toggle=\\"modal\\" data-bs-target=\\".video-item-modal\\"  data-url=\\"//www.youtube.com/embed/").concat(this.urlId, "\\" data-title=\\"").concat(this.title, " \\">").concat(this.title, "</p>\\n            <p class=\\"gi-content-date\\" id=\\"btnOpenYoutubeModal\\"  data-bs-toggle=\\"modal\\" data-bs-target=\\".video-item-modal\\"  data-url=\\"//www.youtube.com/embed/").concat(this.urlId, "\\" data-title=\\"").concat(this.title, " \\">").concat(util/* default.dateFormat */.Z.dateFormat(new Date(this.createdDate)).substring(0, 10), "</p>\\n          </div>\\n        </a>\\n      </li>");\n    }\n  }]);\n\n  return Youtube;\n}();\n\n\n;// CONCATENATED MODULE: ./src/js/info/video/src/event/youtubeEvent.js\n/* provided dependency */ var $ = __webpack_require__(9755);\n\n\n\n\n\n\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }\n\n\n\n\nvar youtubeGallery = document.getElementById("youtubeGallery");\nvar youtubeCategories = document.getElementById("youtubeCategories");\n\nvar paging = function paging(totalPages, currentPage, targetCategory, targetQuery) {\n  var pageCount = 10;\n  var pageGroup = Math.ceil(currentPage / pageCount);\n  var last = pageGroup * pageCount;\n\n  if (last > totalPages) {\n    last = totalPages;\n  }\n\n  var first = last - (pageCount - 1) <= 0 ? 1 : last - (pageCount - 1);\n\n  if (pageGroup != 1 && last % 10 != 0) {\n    first = last - 1;\n  }\n\n  var next = last + 1;\n  var prev = first - 1;\n  var pages = $("#pageVideo");\n  pages.empty();\n  var fragmentPage = document.createDocumentFragment();\n\n  if (prev > 0) {\n    var btnPrev = document.createElement(\'li\');\n    btnPrev.insertAdjacentHTML("beforeend", "<a class=\\"page-link\\" aria-label=\\"Previous\\" data-target=\\"prev\\">\\n        <span aria-hidden=\\"true\\" class=\\"material-icons\\"  data-target=\\"prev\\">arrow_back</span>\\n        </a>");\n    fragmentPage.appendChild(btnPrev);\n  }\n\n  for (var j = first; j <= last; j++) {\n    var li = document.createElement("li");\n    li.className = "page-item";\n    li.insertAdjacentHTML("beforeend", "<a  class=\'page-link\' id=\'page-".concat(j, "\' data-target=\'").concat(j, "\'>").concat(j, "</a>"));\n    fragmentPage.appendChild(li);\n  }\n\n  if (next < totalPages) {\n    var btnNext = document.createElement(\'li\');\n    btnNext.insertAdjacentHTML("beforeend", "<a class=\\"page-link\\" aria-label=\\"Next\\" data-target=\\"next\\">\\n        <span aria-hidden=\\"true\\" class=\\"material-icons\\"  data-target=\\"next\\">arrow_forward</span>\\n        </a>");\n    fragmentPage.appendChild(btnNext);\n  }\n\n  pages.append(fragmentPage);\n  $("#pageVideo a").removeClass("active");\n  $("#pageVideo a#page-".concat(currentPage)).addClass("active");\n  $($("#pageVideo a#page-".concat(currentPage)).parent()[0]).addClass("active");\n  $("#pageVideo a").click(function (e) {\n    e.preventDefault();\n    var target = e.target.dataset.target;\n    if (target == "next") target = next;\n    if (target == "prev") target = prev;\n    printYoutubeList(target, targetCategory, targetQuery);\n    var location = document.querySelector(".sub-sections").offsetTop;\n    window.scrollTo({\n      top: location,\n      behavior: \'smooth\'\n    });\n  });\n  $("#youtubeCategories button").off().click(function (e) {\n    e.preventDefault();\n    var targetCategory = e.target.dataset.category;\n    $("#youtubeCategories button").removeClass("active");\n    e.currentTarget.className += " active"; // e.currentTarget.addClass("active");\n    // $(`#youtubeCategories button#category-${targetCategory}`).addClass("active");\n\n    printYoutubeList(1, targetCategory, targetQuery);\n    var location = document.querySelector(".sub-sections").offsetTop;\n    window.scrollTo({\n      top: location,\n      behavior: \'smooth\'\n    });\n  });\n  $("#btnYoutubeSearch").off().click(function (e) {\n    e.preventDefault();\n    var targetQuery = $("#inputYoutubeSearch")[0].value;\n\n    if (targetQuery == "") {\n      alert("검색어를 입력하세요.");\n    } else {\n      printYoutubeList(1, targetCategory, targetQuery);\n      var location = document.querySelector(".sub-sections").offsetTop;\n      window.scrollTo({\n        top: location,\n        behavior: \'smooth\'\n      });\n    }\n\n    ;\n  });\n  $("#inputYoutubeSearch").off().on("keyup", function (e) {\n    if (e.keyCode == 13) {\n      e.preventDefault();\n      var targetQuery = $("#inputYoutubeSearch")[0].value;\n\n      if (targetQuery == "") {\n        alert("검색어를 입력하세요.");\n      } else {\n        printYoutubeList(1, targetCategory, targetQuery);\n        var location = document.querySelector(".sub-sections").offsetTop;\n        window.scrollTo({\n          top: location,\n          behavior: \'smooth\'\n        });\n      }\n\n      ;\n    }\n  });\n};\n\nvar getYoutubeList = /*#__PURE__*/function () {\n  var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(target, targetCategory, targetQuery) {\n    var res, youtubes;\n    return regeneratorRuntime.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            if (targetCategory == "전체") {\n              if ($("#inputYoutubeSearch")[0].value == "") {\n                targetQuery = undefined;\n                $("#inputYoutubeSearch")[0].value = "";\n              }\n\n              targetCategory = undefined;\n            }\n\n            if (targetCategory == undefined) {\n              targetCategory = "";\n            }\n\n            if (targetQuery == undefined) {\n              targetQuery = "";\n            }\n\n            if (!(target != null)) {\n              _context.next = 10;\n              break;\n            }\n\n            _context.next = 6;\n            return axios_default().get("/biviz-api/youtube/videos/" + target + "?categories=" + targetCategory + "&query=" + targetQuery);\n\n          case 6:\n            res = _context.sent;\n            paging(res.data.totalPages, target, targetCategory, targetQuery);\n            _context.next = 14;\n            break;\n\n          case 10:\n            _context.next = 12;\n            return axios_default().get("/biviz-api/youtube/videos/1");\n\n          case 12:\n            res = _context.sent;\n            paging(res.data.totalPages, 1, targetCategory, targetQuery);\n\n          case 14:\n            youtubes = res.data.content;\n            return _context.abrupt("return", youtubes.map(function (youtube) {\n              return new Youtube(youtube);\n            }));\n\n          case 16:\n          case "end":\n            return _context.stop();\n        }\n      }\n    }, _callee);\n  }));\n\n  return function getYoutubeList(_x, _x2, _x3) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\nvar putYoutubesInParent = function putYoutubesInParent(parentEle, youtubes) {\n  youtubeGallery.innerText = "";\n  youtubes.forEach(function (youtube) {\n    parentEle.insertAdjacentHTML("beforeend", youtube.render());\n  });\n};\n\nvar categories = /*#__PURE__*/function () {\n  var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {\n    var res;\n    return regeneratorRuntime.wrap(function _callee2$(_context2) {\n      while (1) {\n        switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return axios_default().get("/biviz-api/youtube/categories");\n\n          case 2:\n            res = _context2.sent;\n            return _context2.abrupt("return", res.data);\n\n          case 4:\n          case "end":\n            return _context2.stop();\n        }\n      }\n    }, _callee2);\n  }));\n\n  return function categories() {\n    return _ref2.apply(this, arguments);\n  };\n}();\n\nvar printCategories = /*#__PURE__*/function () {\n  var _ref3 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {\n    var data;\n    return regeneratorRuntime.wrap(function _callee3$(_context3) {\n      while (1) {\n        switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.next = 2;\n            return categories();\n\n          case 2:\n            data = _context3.sent;\n            data.reverse();\n            data.forEach(function (category) {\n              youtubeCategories.insertAdjacentHTML(\'afterbegin\', "<button type=\\"button\\" class=\\"btn category-btn\\" id=\\"category-".concat(category.name, "\\" data-category=\\"").concat(category.name, "\\">").concat(category.name, "</button>"));\n            });\n            youtubeCategories.insertAdjacentHTML(\'afterbegin\', "<button type=\\"button\\" class=\\"btn category-btn active\\" id=\\"category-\\uC804\\uCCB4\\" data-category=\\"\\uC804\\uCCB4\\">\\uC804\\uCCB4</button>");\n\n          case 6:\n          case "end":\n            return _context3.stop();\n        }\n      }\n    }, _callee3);\n  }));\n\n  return function printCategories() {\n    return _ref3.apply(this, arguments);\n  };\n}();\n\nvar printYoutubeList = /*#__PURE__*/function () {\n  var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(target, targetCategory, targetQuery) {\n    var $youtubeImages;\n    return regeneratorRuntime.wrap(function _callee4$(_context4) {\n      while (1) {\n        switch (_context4.prev = _context4.next) {\n          case 0:\n            _context4.next = 2;\n            return getYoutubeList(target, targetCategory, targetQuery).then(function (youtubes) {\n              putYoutubesInParent(youtubeGallery, youtubes);\n            });\n\n          case 2:\n            $youtubeImages = $(\'img[src*="ytimg.com"]\');\n            $youtubeImages.one("load", function () {\n              var height = $(this).prop(\'naturalHeight\');\n              var src = $(this).attr(\'src\');\n\n              if (height <= 90) {\n                if (/maxresdefault/.test(src)) {\n                  src = src.replace(\'maxresdefault\', \'hqdefault\');\n                } else if (/hqdefault/.test(src)) {\n                  src = src.replace(\'hqdefault\', \'mqdefault\');\n                } else if (/mqdefault/.test(src)) {\n                  src = src.replace(\'mqdefault\', \'sddefault\');\n                }\n\n                $(this).attr(\'src\', src);\n                $(this).css(\'width\', $(this).closest("picture").closest("div").css(\'width\'));\n                $(this).css(\'height\', $(this).closest("picture").closest("div").css(\'height\'));\n                $(this).css(\'object-fit\', \'cover\');\n              }\n            }).each(function () {\n              if (this.complete) {\n                $(this).trigger(\'load\');\n              }\n            });\n\n          case 4:\n          case "end":\n            return _context4.stop();\n        }\n      }\n    }, _callee4);\n  }));\n\n  return function printYoutubeList(_x4, _x5, _x6) {\n    return _ref4.apply(this, arguments);\n  };\n}();\n\nvar youtubeInit = function youtubeInit() {\n  printCategories();\n  printYoutubeList();\n}; // $(document).click(function(e) {\n//     console.log(e.currentTarget.activeElement.dataset);\n//     if(e.currentTarget.activeElement.id=="btnOpenYoutubeModal"){\n//         document.getElementById("modalTitle").innerHTML = e.currentTarget.activeElement.dataset.title;\n//         document.getElementById("modalIframe").src = e.currentTarget.activeElement.dataset.url;\n//     }else if(e.currentTarget.activeElement.id=="btnModalClose"){\n//         document.getElementById("modalIframe").src ="";\n//     }    \n//     $(\'#videoItemModal\').off().click(function(e) { \n//         if($(e.target).hasClass("modal fade video-item-modal")) { \n//             document.getElementById("modalIframe").src ="";\n//         }\n//      });\n// });\n//24.09.25 수정\n\n\n$(document).on(\'click\', function (e) {\n  console.log(e.target.id);\n\n  if (e.target.id == "btnOpenYoutubeModal") {\n    document.getElementById("modalTitle").innerHTML = e.target.dataset.title;\n    document.getElementById("modalIframe").src = e.target.dataset.url;\n  } else if (e.target.id == "btnModalClose") {\n    document.getElementById("modalIframe").src = "";\n  }\n\n  $(\'#videoItemModal\').off().click(function (e) {\n    if ($(e.target).hasClass("modal fade video-item-modal")) {\n      document.getElementById("modalIframe").src = "";\n    }\n  });\n});\n/* harmony default export */ const youtubeEvent = (youtubeInit);\n;// CONCATENATED MODULE: ./src/js/info/video/index.js\n\nyoutubeEvent(1);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgwOC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RWQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYml2aXotaG9tZXBhZ2UtZnJvbnQvLi9zcmMvanMvaW5mby92aWRlby9zcmMvZW50aXR5L3lvdXR1YmUuanM/YTU1ZiIsIndlYnBhY2s6Ly9iaXZpei1ob21lcGFnZS1mcm9udC8uL3NyYy9qcy9pbmZvL3ZpZGVvL3NyYy9ldmVudC95b3V0dWJlRXZlbnQuanM/Njk1YSIsIndlYnBhY2s6Ly9iaXZpei1ob21lcGFnZS1mcm9udC8uL3NyYy9qcy9pbmZvL3ZpZGVvL2luZGV4LmpzPzY4YmQiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogZmFsc2UgfSk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5pbXBvcnQgdXRpbCBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3V0aWxcIjtcblxudmFyIFlvdXR1YmUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBZb3V0dWJlKCkge1xuICAgIHZhciBkYXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7XG4gICAgICBcImlkXCI6IDAsXG4gICAgICBcImNhdGVnb3JpZXNcIjogbnVsbCxcbiAgICAgIFwidGl0bGVcIjogXCJcIixcbiAgICAgIFwiY3JlYXRlZEJ5XCI6IFwiXCIsXG4gICAgICBcImNyZWF0b3JOaWNrbmFtZVwiOiBcIlwiLFxuICAgICAgXCJjcmVhdGVkRGF0ZVwiOiBcIlwiLFxuICAgICAgXCJ1cmxJZFwiOiBcIlwiXG4gICAgfTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBZb3V0dWJlKTtcblxuICAgIHZhciBpZCA9IGRhdGEuaWQsXG4gICAgICAgIGNhdGVnb3JpZXMgPSBkYXRhLmNhdGVnb3JpZXMsXG4gICAgICAgIHRpdGxlID0gZGF0YS50aXRsZSxcbiAgICAgICAgY3JlYXRlZEJ5ID0gZGF0YS5jcmVhdGVkQnksXG4gICAgICAgIGNyZWF0b3JOaWNrbmFtZSA9IGRhdGEuY3JlYXRvck5pY2tuYW1lLFxuICAgICAgICBjcmVhdGVkRGF0ZSA9IGRhdGEuY3JlYXRlZERhdGUsXG4gICAgICAgIHVybElkID0gZGF0YS51cmxJZDtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5jYXRlZ29yaWVzID0gY2F0ZWdvcmllcztcbiAgICB0aGlzLnRpdGxlID0gdGl0bGU7XG4gICAgdGhpcy5jcmVhdGVkQnkgPSBjcmVhdGVkQnk7XG4gICAgdGhpcy5jcmVhdG9yTmlja25hbWUgPSBjcmVhdG9yTmlja25hbWU7XG4gICAgdGhpcy5jcmVhdGVkRGF0ZSA9IGNyZWF0ZWREYXRlO1xuICAgIHRoaXMudXJsSWQgPSB1cmxJZDtcbiAgfSAvLyByZW5kZXIoKXtcbiAgLy8gICAgIHJldHVybiBgPGxpIGNsYXNzPVwiZ2FsbGVyeS1pdGVtXCI+XG4gIC8vICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgaWQ9XCJidG5PcGVuWW91dHViZU1vZGFsXCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGRhdGEtYnMtdGFyZ2V0PVwiLnZpZGVvLWl0ZW0tbW9kYWxcIiAgZGF0YS11cmw9XCIvL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8ke3RoaXMudXJsSWR9XCIgZGF0YS10aXRsZT1cIiR7dGhpcy50aXRsZX0gXCI+XG4gIC8vICAgICAgIDxkaXYgY2xhc3M9XCJnYWxsZXJ5LWl0ZW0taW1nXCI+XG4gIC8vICAgICAgICAgPHBpY3R1cmU+XG4gIC8vICAgICAgICAgICA8aW1nIHNyYz0naHR0cHM6Ly9pLnl0aW1nLmNvbS92aS8ke3RoaXMudXJsSWR9L21heHJlc2RlZmF1bHQuanBnJyBjbGFzcyA9IFwieW91dHViZVRodW1iXCI+XG4gIC8vICAgICAgICAgPC9waWN0dXJlPlxuICAvLyAgICAgICA8L2Rpdj5cbiAgLy8gICAgICAgPGRpdiBjbGFzcz1cImdhbGxlcnktaXRlbS1jb250ZW50XCI+XG4gIC8vICAgICAgICAgPHAgY2xhc3M9XCJnaS1jb250ZW50LWNhdGVnb3J5XCI+JHt0aGlzLmNhdGVnb3JpZXMhPW51bGw/dGhpcy5jYXRlZ29yaWVzOlwiXCJ9PC9wPlxuICAvLyAgICAgICAgIDxwIGNsYXNzPVwiZ2ktY29udGVudC10aXRsZVwiPiR7dGhpcy50aXRsZX08L3A+XG4gIC8vICAgICAgICAgPHAgY2xhc3M9XCJnaS1jb250ZW50LWRhdGVcIj4ke3V0aWwuZGF0ZUZvcm1hdChuZXcgRGF0ZSh0aGlzLmNyZWF0ZWREYXRlKSkuc3Vic3RyaW5nKDAsMTApfTwvcD5cbiAgLy8gICAgICAgPC9kaXY+XG4gIC8vICAgICA8L2E+XG4gIC8vICAgPC9saT5gXG4gIC8vIH1cbiAgLy8gMjQuMDkuMjUuIOyImOyglSBndW5cblxuXG4gIF9jcmVhdGVDbGFzcyhZb3V0dWJlLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIFwiPGxpIGNsYXNzPVxcXCJnYWxsZXJ5LWl0ZW1cXFwiPlxcbiAgICAgICAgPGEgaHJlZj1cXFwiamF2YXNjcmlwdDp2b2lkKDApXFxcIiBpZD1cXFwiYnRuT3BlbllvdXR1YmVNb2RhbFxcXCIgZGF0YS1icy10b2dnbGU9XFxcIm1vZGFsXFxcIiBkYXRhLWJzLXRhcmdldD1cXFwiLnZpZGVvLWl0ZW0tbW9kYWxcXFwiICBkYXRhLXVybD1cXFwiLy93d3cueW91dHViZS5jb20vZW1iZWQvXCIuY29uY2F0KHRoaXMudXJsSWQsIFwiXFxcIiBkYXRhLXRpdGxlPVxcXCJcIikuY29uY2F0KHRoaXMudGl0bGUsIFwiIFxcXCI+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImdhbGxlcnktaXRlbS1pbWdcXFwiPlxcbiAgICAgICAgICAgIDxwaWN0dXJlPlxcbiAgICAgICAgICAgICAgPGltZyBzcmM9J2h0dHBzOi8vaS55dGltZy5jb20vdmkvXCIpLmNvbmNhdCh0aGlzLnVybElkLCBcIi9tYXhyZXNkZWZhdWx0LmpwZycgY2xhc3MgPSBcXFwieW91dHViZVRodW1iXFxcIiAgaWQ9XFxcImJ0bk9wZW5Zb3V0dWJlTW9kYWxcXFwiIGRhdGEtYnMtdG9nZ2xlPVxcXCJtb2RhbFxcXCIgZGF0YS1icy10YXJnZXQ9XFxcIi52aWRlby1pdGVtLW1vZGFsXFxcIiAgZGF0YS11cmw9XFxcIi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL1wiKS5jb25jYXQodGhpcy51cmxJZCwgXCJcXFwiIGRhdGEtdGl0bGU9XFxcIlwiKS5jb25jYXQodGhpcy50aXRsZSwgXCIgXFxcIj5cXG4gICAgICAgICAgICA8L3BpY3R1cmU+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJnYWxsZXJ5LWl0ZW0tY29udGVudFxcXCIgIGRhdGEtYnMtdG9nZ2xlPVxcXCJtb2RhbFxcXCIgZGF0YS1icy10YXJnZXQ9XFxcIi52aWRlby1pdGVtLW1vZGFsXFxcIiBpZD1cXFwiYnRuT3BlbllvdXR1YmVNb2RhbFxcXCIgIGRhdGEtYnMtdG9nZ2xlPVxcXCJtb2RhbFxcXCIgZGF0YS1icy10YXJnZXQ9XFxcIi52aWRlby1pdGVtLW1vZGFsXFxcIiAgZGF0YS11cmw9XFxcIi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL1wiKS5jb25jYXQodGhpcy51cmxJZCwgXCJcXFwiIGRhdGEtdGl0bGU9XFxcIlwiKS5jb25jYXQodGhpcy50aXRsZSwgXCIgXFxcIj5cXG4gICAgICAgICAgICA8cCBjbGFzcz1cXFwiZ2ktY29udGVudC1jYXRlZ29yeVxcXCIgaWQ9XFxcImJ0bk9wZW5Zb3V0dWJlTW9kYWxcXFwiICBkYXRhLWJzLXRvZ2dsZT1cXFwibW9kYWxcXFwiIGRhdGEtYnMtdGFyZ2V0PVxcXCIudmlkZW8taXRlbS1tb2RhbFxcXCIgIGRhdGEtdXJsPVxcXCIvL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9cIikuY29uY2F0KHRoaXMudXJsSWQsIFwiXFxcIiBkYXRhLXRpdGxlPVxcXCJcIikuY29uY2F0KHRoaXMudGl0bGUsIFwiIFxcXCI+XCIpLmNvbmNhdCh0aGlzLmNhdGVnb3JpZXMgIT0gbnVsbCA/IHRoaXMuY2F0ZWdvcmllcyA6IFwiXCIsIFwiPC9wPlxcbiAgICAgICAgICAgIDxwIGNsYXNzPVxcXCJnaS1jb250ZW50LXRpdGxlXFxcIiBpZD1cXFwiYnRuT3BlbllvdXR1YmVNb2RhbFxcXCIgIGRhdGEtYnMtdG9nZ2xlPVxcXCJtb2RhbFxcXCIgZGF0YS1icy10YXJnZXQ9XFxcIi52aWRlby1pdGVtLW1vZGFsXFxcIiAgZGF0YS11cmw9XFxcIi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL1wiKS5jb25jYXQodGhpcy51cmxJZCwgXCJcXFwiIGRhdGEtdGl0bGU9XFxcIlwiKS5jb25jYXQodGhpcy50aXRsZSwgXCIgXFxcIj5cIikuY29uY2F0KHRoaXMudGl0bGUsIFwiPC9wPlxcbiAgICAgICAgICAgIDxwIGNsYXNzPVxcXCJnaS1jb250ZW50LWRhdGVcXFwiIGlkPVxcXCJidG5PcGVuWW91dHViZU1vZGFsXFxcIiAgZGF0YS1icy10b2dnbGU9XFxcIm1vZGFsXFxcIiBkYXRhLWJzLXRhcmdldD1cXFwiLnZpZGVvLWl0ZW0tbW9kYWxcXFwiICBkYXRhLXVybD1cXFwiLy93d3cueW91dHViZS5jb20vZW1iZWQvXCIpLmNvbmNhdCh0aGlzLnVybElkLCBcIlxcXCIgZGF0YS10aXRsZT1cXFwiXCIpLmNvbmNhdCh0aGlzLnRpdGxlLCBcIiBcXFwiPlwiKS5jb25jYXQodXRpbC5kYXRlRm9ybWF0KG5ldyBEYXRlKHRoaXMuY3JlYXRlZERhdGUpKS5zdWJzdHJpbmcoMCwgMTApLCBcIjwvcD5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2E+XFxuICAgICAgPC9saT5cIik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFlvdXR1YmU7XG59KCk7XG5cbmV4cG9ydCB7IFlvdXR1YmUgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5tYXAuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXM2LnByb21pc2UuanNcIjtcblxuZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cblxuaW1wb3J0IGF4aW9zIGZyb20gXCJheGlvc1wiO1xuaW1wb3J0ICcuLi8uLi8uLi8uLi9jb21tb24nO1xuaW1wb3J0IFlvdXR1YmUgZnJvbSBcIi4uL2VudGl0eS95b3V0dWJlXCI7XG52YXIgeW91dHViZUdhbGxlcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInlvdXR1YmVHYWxsZXJ5XCIpO1xudmFyIHlvdXR1YmVDYXRlZ29yaWVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ5b3V0dWJlQ2F0ZWdvcmllc1wiKTtcblxudmFyIHBhZ2luZyA9IGZ1bmN0aW9uIHBhZ2luZyh0b3RhbFBhZ2VzLCBjdXJyZW50UGFnZSwgdGFyZ2V0Q2F0ZWdvcnksIHRhcmdldFF1ZXJ5KSB7XG4gIHZhciBwYWdlQ291bnQgPSAxMDtcbiAgdmFyIHBhZ2VHcm91cCA9IE1hdGguY2VpbChjdXJyZW50UGFnZSAvIHBhZ2VDb3VudCk7XG4gIHZhciBsYXN0ID0gcGFnZUdyb3VwICogcGFnZUNvdW50O1xuXG4gIGlmIChsYXN0ID4gdG90YWxQYWdlcykge1xuICAgIGxhc3QgPSB0b3RhbFBhZ2VzO1xuICB9XG5cbiAgdmFyIGZpcnN0ID0gbGFzdCAtIChwYWdlQ291bnQgLSAxKSA8PSAwID8gMSA6IGxhc3QgLSAocGFnZUNvdW50IC0gMSk7XG5cbiAgaWYgKHBhZ2VHcm91cCAhPSAxICYmIGxhc3QgJSAxMCAhPSAwKSB7XG4gICAgZmlyc3QgPSBsYXN0IC0gMTtcbiAgfVxuXG4gIHZhciBuZXh0ID0gbGFzdCArIDE7XG4gIHZhciBwcmV2ID0gZmlyc3QgLSAxO1xuICB2YXIgcGFnZXMgPSAkKFwiI3BhZ2VWaWRlb1wiKTtcbiAgcGFnZXMuZW1wdHkoKTtcbiAgdmFyIGZyYWdtZW50UGFnZSA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuICBpZiAocHJldiA+IDApIHtcbiAgICB2YXIgYnRuUHJldiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gICAgYnRuUHJldi5pbnNlcnRBZGphY2VudEhUTUwoXCJiZWZvcmVlbmRcIiwgXCI8YSBjbGFzcz1cXFwicGFnZS1saW5rXFxcIiBhcmlhLWxhYmVsPVxcXCJQcmV2aW91c1xcXCIgZGF0YS10YXJnZXQ9XFxcInByZXZcXFwiPlxcbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XFxcInRydWVcXFwiIGNsYXNzPVxcXCJtYXRlcmlhbC1pY29uc1xcXCIgIGRhdGEtdGFyZ2V0PVxcXCJwcmV2XFxcIj5hcnJvd19iYWNrPC9zcGFuPlxcbiAgICAgICAgPC9hPlwiKTtcbiAgICBmcmFnbWVudFBhZ2UuYXBwZW5kQ2hpbGQoYnRuUHJldik7XG4gIH1cblxuICBmb3IgKHZhciBqID0gZmlyc3Q7IGogPD0gbGFzdDsgaisrKSB7XG4gICAgdmFyIGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpXCIpO1xuICAgIGxpLmNsYXNzTmFtZSA9IFwicGFnZS1pdGVtXCI7XG4gICAgbGkuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYmVmb3JlZW5kXCIsIFwiPGEgIGNsYXNzPSdwYWdlLWxpbmsnIGlkPSdwYWdlLVwiLmNvbmNhdChqLCBcIicgZGF0YS10YXJnZXQ9J1wiKS5jb25jYXQoaiwgXCInPlwiKS5jb25jYXQoaiwgXCI8L2E+XCIpKTtcbiAgICBmcmFnbWVudFBhZ2UuYXBwZW5kQ2hpbGQobGkpO1xuICB9XG5cbiAgaWYgKG5leHQgPCB0b3RhbFBhZ2VzKSB7XG4gICAgdmFyIGJ0bk5leHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgIGJ0bk5leHQuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYmVmb3JlZW5kXCIsIFwiPGEgY2xhc3M9XFxcInBhZ2UtbGlua1xcXCIgYXJpYS1sYWJlbD1cXFwiTmV4dFxcXCIgZGF0YS10YXJnZXQ9XFxcIm5leHRcXFwiPlxcbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XFxcInRydWVcXFwiIGNsYXNzPVxcXCJtYXRlcmlhbC1pY29uc1xcXCIgIGRhdGEtdGFyZ2V0PVxcXCJuZXh0XFxcIj5hcnJvd19mb3J3YXJkPC9zcGFuPlxcbiAgICAgICAgPC9hPlwiKTtcbiAgICBmcmFnbWVudFBhZ2UuYXBwZW5kQ2hpbGQoYnRuTmV4dCk7XG4gIH1cblxuICBwYWdlcy5hcHBlbmQoZnJhZ21lbnRQYWdlKTtcbiAgJChcIiNwYWdlVmlkZW8gYVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcbiAgJChcIiNwYWdlVmlkZW8gYSNwYWdlLVwiLmNvbmNhdChjdXJyZW50UGFnZSkpLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xuICAkKCQoXCIjcGFnZVZpZGVvIGEjcGFnZS1cIi5jb25jYXQoY3VycmVudFBhZ2UpKS5wYXJlbnQoKVswXSkuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XG4gICQoXCIjcGFnZVZpZGVvIGFcIikuY2xpY2soZnVuY3Rpb24gKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0LmRhdGFzZXQudGFyZ2V0O1xuICAgIGlmICh0YXJnZXQgPT0gXCJuZXh0XCIpIHRhcmdldCA9IG5leHQ7XG4gICAgaWYgKHRhcmdldCA9PSBcInByZXZcIikgdGFyZ2V0ID0gcHJldjtcbiAgICBwcmludFlvdXR1YmVMaXN0KHRhcmdldCwgdGFyZ2V0Q2F0ZWdvcnksIHRhcmdldFF1ZXJ5KTtcbiAgICB2YXIgbG9jYXRpb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnN1Yi1zZWN0aW9uc1wiKS5vZmZzZXRUb3A7XG4gICAgd2luZG93LnNjcm9sbFRvKHtcbiAgICAgIHRvcDogbG9jYXRpb24sXG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICB9KTtcbiAgfSk7XG4gICQoXCIjeW91dHViZUNhdGVnb3JpZXMgYnV0dG9uXCIpLm9mZigpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHZhciB0YXJnZXRDYXRlZ29yeSA9IGUudGFyZ2V0LmRhdGFzZXQuY2F0ZWdvcnk7XG4gICAgJChcIiN5b3V0dWJlQ2F0ZWdvcmllcyBidXR0b25cIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XG4gICAgZS5jdXJyZW50VGFyZ2V0LmNsYXNzTmFtZSArPSBcIiBhY3RpdmVcIjsgLy8gZS5jdXJyZW50VGFyZ2V0LmFkZENsYXNzKFwiYWN0aXZlXCIpO1xuICAgIC8vICQoYCN5b3V0dWJlQ2F0ZWdvcmllcyBidXR0b24jY2F0ZWdvcnktJHt0YXJnZXRDYXRlZ29yeX1gKS5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcblxuICAgIHByaW50WW91dHViZUxpc3QoMSwgdGFyZ2V0Q2F0ZWdvcnksIHRhcmdldFF1ZXJ5KTtcbiAgICB2YXIgbG9jYXRpb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnN1Yi1zZWN0aW9uc1wiKS5vZmZzZXRUb3A7XG4gICAgd2luZG93LnNjcm9sbFRvKHtcbiAgICAgIHRvcDogbG9jYXRpb24sXG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICB9KTtcbiAgfSk7XG4gICQoXCIjYnRuWW91dHViZVNlYXJjaFwiKS5vZmYoKS5jbGljayhmdW5jdGlvbiAoZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB2YXIgdGFyZ2V0UXVlcnkgPSAkKFwiI2lucHV0WW91dHViZVNlYXJjaFwiKVswXS52YWx1ZTtcblxuICAgIGlmICh0YXJnZXRRdWVyeSA9PSBcIlwiKSB7XG4gICAgICBhbGVydChcIuqygOyDieyWtOulvCDsnoXroKXtlZjshLjsmpQuXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmludFlvdXR1YmVMaXN0KDEsIHRhcmdldENhdGVnb3J5LCB0YXJnZXRRdWVyeSk7XG4gICAgICB2YXIgbG9jYXRpb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnN1Yi1zZWN0aW9uc1wiKS5vZmZzZXRUb3A7XG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xuICAgICAgICB0b3A6IGxvY2F0aW9uLFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIDtcbiAgfSk7XG4gICQoXCIjaW5wdXRZb3V0dWJlU2VhcmNoXCIpLm9mZigpLm9uKFwia2V5dXBcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZS5rZXlDb2RlID09IDEzKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB2YXIgdGFyZ2V0UXVlcnkgPSAkKFwiI2lucHV0WW91dHViZVNlYXJjaFwiKVswXS52YWx1ZTtcblxuICAgICAgaWYgKHRhcmdldFF1ZXJ5ID09IFwiXCIpIHtcbiAgICAgICAgYWxlcnQoXCLqsoDsg4nslrTrpbwg7J6F66Cl7ZWY7IS47JqULlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByaW50WW91dHViZUxpc3QoMSwgdGFyZ2V0Q2F0ZWdvcnksIHRhcmdldFF1ZXJ5KTtcbiAgICAgICAgdmFyIGxvY2F0aW9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5zdWItc2VjdGlvbnNcIikub2Zmc2V0VG9wO1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xuICAgICAgICAgIHRvcDogbG9jYXRpb24sXG4gICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICA7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBnZXRZb3V0dWJlTGlzdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmID0gX2FzeW5jVG9HZW5lcmF0b3IoIC8qI19fUFVSRV9fKi9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBfY2FsbGVlKHRhcmdldCwgdGFyZ2V0Q2F0ZWdvcnksIHRhcmdldFF1ZXJ5KSB7XG4gICAgdmFyIHJlcywgeW91dHViZXM7XG4gICAgcmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgaWYgKHRhcmdldENhdGVnb3J5ID09IFwi7KCE7LK0XCIpIHtcbiAgICAgICAgICAgICAgaWYgKCQoXCIjaW5wdXRZb3V0dWJlU2VhcmNoXCIpWzBdLnZhbHVlID09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRRdWVyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAkKFwiI2lucHV0WW91dHViZVNlYXJjaFwiKVswXS52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0YXJnZXRDYXRlZ29yeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhcmdldENhdGVnb3J5ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0YXJnZXRDYXRlZ29yeSA9IFwiXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRRdWVyeSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0UXVlcnkgPSBcIlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoISh0YXJnZXQgIT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDY7XG4gICAgICAgICAgICByZXR1cm4gYXhpb3MuZ2V0KFwiL2Jpdml6LWFwaS95b3V0dWJlL3ZpZGVvcy9cIiArIHRhcmdldCArIFwiP2NhdGVnb3JpZXM9XCIgKyB0YXJnZXRDYXRlZ29yeSArIFwiJnF1ZXJ5PVwiICsgdGFyZ2V0UXVlcnkpO1xuXG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmVzID0gX2NvbnRleHQuc2VudDtcbiAgICAgICAgICAgIHBhZ2luZyhyZXMuZGF0YS50b3RhbFBhZ2VzLCB0YXJnZXQsIHRhcmdldENhdGVnb3J5LCB0YXJnZXRRdWVyeSk7XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTQ7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTI7XG4gICAgICAgICAgICByZXR1cm4gYXhpb3MuZ2V0KFwiL2Jpdml6LWFwaS95b3V0dWJlL3ZpZGVvcy8xXCIpO1xuXG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHJlcyA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICBwYWdpbmcocmVzLmRhdGEudG90YWxQYWdlcywgMSwgdGFyZ2V0Q2F0ZWdvcnksIHRhcmdldFF1ZXJ5KTtcblxuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICB5b3V0dWJlcyA9IHJlcy5kYXRhLmNvbnRlbnQ7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIHlvdXR1YmVzLm1hcChmdW5jdGlvbiAoeW91dHViZSkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IFlvdXR1YmUoeW91dHViZSk7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlKTtcbiAgfSkpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBnZXRZb3V0dWJlTGlzdChfeCwgX3gyLCBfeDMpIHtcbiAgICByZXR1cm4gX3JlZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG52YXIgcHV0WW91dHViZXNJblBhcmVudCA9IGZ1bmN0aW9uIHB1dFlvdXR1YmVzSW5QYXJlbnQocGFyZW50RWxlLCB5b3V0dWJlcykge1xuICB5b3V0dWJlR2FsbGVyeS5pbm5lclRleHQgPSBcIlwiO1xuICB5b3V0dWJlcy5mb3JFYWNoKGZ1bmN0aW9uICh5b3V0dWJlKSB7XG4gICAgcGFyZW50RWxlLmluc2VydEFkamFjZW50SFRNTChcImJlZm9yZWVuZFwiLCB5b3V0dWJlLnJlbmRlcigpKTtcbiAgfSk7XG59O1xuXG52YXIgY2F0ZWdvcmllcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMiA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoKSB7XG4gICAgdmFyIHJlcztcbiAgICByZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAyO1xuICAgICAgICAgICAgcmV0dXJuIGF4aW9zLmdldChcIi9iaXZpei1hcGkveW91dHViZS9jYXRlZ29yaWVzXCIpO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmVzID0gX2NvbnRleHQyLnNlbnQ7XG4gICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCByZXMuZGF0YSk7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlMik7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gY2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gX3JlZjIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxudmFyIHByaW50Q2F0ZWdvcmllcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMyA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMoKSB7XG4gICAgdmFyIGRhdGE7XG4gICAgcmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzJChfY29udGV4dDMpIHtcbiAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgIHN3aXRjaCAoX2NvbnRleHQzLnByZXYgPSBfY29udGV4dDMubmV4dCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMjtcbiAgICAgICAgICAgIHJldHVybiBjYXRlZ29yaWVzKCk7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBkYXRhID0gX2NvbnRleHQzLnNlbnQ7XG4gICAgICAgICAgICBkYXRhLnJldmVyc2UoKTtcbiAgICAgICAgICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAoY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgICAgeW91dHViZUNhdGVnb3JpZXMuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmJlZ2luJywgXCI8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBjYXRlZ29yeS1idG5cXFwiIGlkPVxcXCJjYXRlZ29yeS1cIi5jb25jYXQoY2F0ZWdvcnkubmFtZSwgXCJcXFwiIGRhdGEtY2F0ZWdvcnk9XFxcIlwiKS5jb25jYXQoY2F0ZWdvcnkubmFtZSwgXCJcXFwiPlwiKS5jb25jYXQoY2F0ZWdvcnkubmFtZSwgXCI8L2J1dHRvbj5cIikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB5b3V0dWJlQ2F0ZWdvcmllcy5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyYmVnaW4nLCBcIjxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGNhdGVnb3J5LWJ0biBhY3RpdmVcXFwiIGlkPVxcXCJjYXRlZ29yeS1cXHVDODA0XFx1Q0NCNFxcXCIgZGF0YS1jYXRlZ29yeT1cXFwiXFx1QzgwNFxcdUNDQjRcXFwiPlxcdUM4MDRcXHVDQ0I0PC9idXR0b24+XCIpO1xuXG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHByaW50Q2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcblxudmFyIHByaW50WW91dHViZUxpc3QgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjQgPSBfYXN5bmNUb0dlbmVyYXRvciggLyojX19QVVJFX18qL3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU0KHRhcmdldCwgdGFyZ2V0Q2F0ZWdvcnksIHRhcmdldFF1ZXJ5KSB7XG4gICAgdmFyICR5b3V0dWJlSW1hZ2VzO1xuICAgIHJldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBfY2FsbGVlNCQoX2NvbnRleHQ0KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0NC5wcmV2ID0gX2NvbnRleHQ0Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDI7XG4gICAgICAgICAgICByZXR1cm4gZ2V0WW91dHViZUxpc3QodGFyZ2V0LCB0YXJnZXRDYXRlZ29yeSwgdGFyZ2V0UXVlcnkpLnRoZW4oZnVuY3Rpb24gKHlvdXR1YmVzKSB7XG4gICAgICAgICAgICAgIHB1dFlvdXR1YmVzSW5QYXJlbnQoeW91dHViZUdhbGxlcnksIHlvdXR1YmVzKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgJHlvdXR1YmVJbWFnZXMgPSAkKCdpbWdbc3JjKj1cInl0aW1nLmNvbVwiXScpO1xuICAgICAgICAgICAgJHlvdXR1YmVJbWFnZXMub25lKFwibG9hZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBoZWlnaHQgPSAkKHRoaXMpLnByb3AoJ25hdHVyYWxIZWlnaHQnKTtcbiAgICAgICAgICAgICAgdmFyIHNyYyA9ICQodGhpcykuYXR0cignc3JjJyk7XG5cbiAgICAgICAgICAgICAgaWYgKGhlaWdodCA8PSA5MCkge1xuICAgICAgICAgICAgICAgIGlmICgvbWF4cmVzZGVmYXVsdC8udGVzdChzcmMpKSB7XG4gICAgICAgICAgICAgICAgICBzcmMgPSBzcmMucmVwbGFjZSgnbWF4cmVzZGVmYXVsdCcsICdocWRlZmF1bHQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9ocWRlZmF1bHQvLnRlc3Qoc3JjKSkge1xuICAgICAgICAgICAgICAgICAgc3JjID0gc3JjLnJlcGxhY2UoJ2hxZGVmYXVsdCcsICdtcWRlZmF1bHQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9tcWRlZmF1bHQvLnRlc3Qoc3JjKSkge1xuICAgICAgICAgICAgICAgICAgc3JjID0gc3JjLnJlcGxhY2UoJ21xZGVmYXVsdCcsICdzZGRlZmF1bHQnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ3NyYycsIHNyYyk7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoJ3dpZHRoJywgJCh0aGlzKS5jbG9zZXN0KFwicGljdHVyZVwiKS5jbG9zZXN0KFwiZGl2XCIpLmNzcygnd2lkdGgnKSk7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoJ2hlaWdodCcsICQodGhpcykuY2xvc2VzdChcInBpY3R1cmVcIikuY2xvc2VzdChcImRpdlwiKS5jc3MoJ2hlaWdodCcpKTtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcygnb2JqZWN0LWZpdCcsICdjb3ZlcicpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnRyaWdnZXIoJ2xvYWQnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlNCk7XG4gIH0pKTtcblxuICByZXR1cm4gZnVuY3Rpb24gcHJpbnRZb3V0dWJlTGlzdChfeDQsIF94NSwgX3g2KSB7XG4gICAgcmV0dXJuIF9yZWY0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5cbnZhciB5b3V0dWJlSW5pdCA9IGZ1bmN0aW9uIHlvdXR1YmVJbml0KCkge1xuICBwcmludENhdGVnb3JpZXMoKTtcbiAgcHJpbnRZb3V0dWJlTGlzdCgpO1xufTsgLy8gJChkb2N1bWVudCkuY2xpY2soZnVuY3Rpb24oZSkge1xuLy8gICAgIGNvbnNvbGUubG9nKGUuY3VycmVudFRhcmdldC5hY3RpdmVFbGVtZW50LmRhdGFzZXQpO1xuLy8gICAgIGlmKGUuY3VycmVudFRhcmdldC5hY3RpdmVFbGVtZW50LmlkPT1cImJ0bk9wZW5Zb3V0dWJlTW9kYWxcIil7XG4vLyAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibW9kYWxUaXRsZVwiKS5pbm5lckhUTUwgPSBlLmN1cnJlbnRUYXJnZXQuYWN0aXZlRWxlbWVudC5kYXRhc2V0LnRpdGxlO1xuLy8gICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1vZGFsSWZyYW1lXCIpLnNyYyA9IGUuY3VycmVudFRhcmdldC5hY3RpdmVFbGVtZW50LmRhdGFzZXQudXJsO1xuLy8gICAgIH1lbHNlIGlmKGUuY3VycmVudFRhcmdldC5hY3RpdmVFbGVtZW50LmlkPT1cImJ0bk1vZGFsQ2xvc2VcIil7XG4vLyAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibW9kYWxJZnJhbWVcIikuc3JjID1cIlwiO1xuLy8gICAgIH0gICAgXG4vLyAgICAgJCgnI3ZpZGVvSXRlbU1vZGFsJykub2ZmKCkuY2xpY2soZnVuY3Rpb24oZSkgeyBcbi8vICAgICAgICAgaWYoJChlLnRhcmdldCkuaGFzQ2xhc3MoXCJtb2RhbCBmYWRlIHZpZGVvLWl0ZW0tbW9kYWxcIikpIHsgXG4vLyAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1vZGFsSWZyYW1lXCIpLnNyYyA9XCJcIjtcbi8vICAgICAgICAgfVxuLy8gICAgICB9KTtcbi8vIH0pO1xuLy8yNC4wOS4yNSDsiJjsoJVcblxuXG4kKGRvY3VtZW50KS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICBjb25zb2xlLmxvZyhlLnRhcmdldC5pZCk7XG5cbiAgaWYgKGUudGFyZ2V0LmlkID09IFwiYnRuT3BlbllvdXR1YmVNb2RhbFwiKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtb2RhbFRpdGxlXCIpLmlubmVySFRNTCA9IGUudGFyZ2V0LmRhdGFzZXQudGl0bGU7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtb2RhbElmcmFtZVwiKS5zcmMgPSBlLnRhcmdldC5kYXRhc2V0LnVybDtcbiAgfSBlbHNlIGlmIChlLnRhcmdldC5pZCA9PSBcImJ0bk1vZGFsQ2xvc2VcIikge1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibW9kYWxJZnJhbWVcIikuc3JjID0gXCJcIjtcbiAgfVxuXG4gICQoJyN2aWRlb0l0ZW1Nb2RhbCcpLm9mZigpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCQoZS50YXJnZXQpLmhhc0NsYXNzKFwibW9kYWwgZmFkZSB2aWRlby1pdGVtLW1vZGFsXCIpKSB7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1vZGFsSWZyYW1lXCIpLnNyYyA9IFwiXCI7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgeW91dHViZUluaXQ7IiwiaW1wb3J0IHlvdXR1YmVJbml0IGZyb20gJy4vc3JjL2V2ZW50L3lvdXR1YmVFdmVudCc7XG55b3V0dWJlSW5pdCgxKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5808\n')}},__webpack_module_cache__={},deferred;function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var g=__webpack_module_cache__[e]={id:e,loaded:!1,exports:{}};return __webpack_modules__[e].call(g.exports,g,g.exports,__webpack_require__),g.loaded=!0,g.exports}__webpack_require__.m=__webpack_modules__,__webpack_require__.amdO={},deferred=[],__webpack_require__.O=(e,t,g,n)=>{if(!t){var c=1/0;for(d=0;d<deferred.length;d++){for(var[t,g,n]=deferred[d],I=!0,a=0;a<t.length;a++)(!1&n||c>=n)&&Object.keys(__webpack_require__.O).every((e=>__webpack_require__.O[e](t[a])))?t.splice(a--,1):(I=!1,n<c&&(c=n));if(I){deferred.splice(d--,1);var C=g();void 0!==C&&(e=C)}}return e}n=n||0;for(var d=deferred.length;d>0&&deferred[d-1][2]>n;d--)deferred[d]=deferred[d-1];deferred[d]=[t,g,n]},__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var g in t)__webpack_require__.o(t,g)&&!__webpack_require__.o(e,g)&&Object.defineProperty(e,g,{enumerable:!0,get:t[g]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e={113:0};__webpack_require__.O.j=t=>0===e[t];var t=(t,g)=>{var n,c,[I,a,C]=g,d=0;if(I.some((t=>0!==e[t]))){for(n in a)__webpack_require__.o(a,n)&&(__webpack_require__.m[n]=a[n]);if(C)var l=C(__webpack_require__)}for(t&&t(g);d<I.length;d++)c=I[d],__webpack_require__.o(e,c)&&e[c]&&e[c][0](),e[I[d]]=0;return __webpack_require__.O(l)},g=self.webpackChunkbiviz_homepage_front=self.webpackChunkbiviz_homepage_front||[];g.forEach(t.bind(null,0)),g.push=t.bind(null,g.push.bind(g))})();var __webpack_exports__=__webpack_require__.O(void 0,[351],(()=>__webpack_require__(5808)));__webpack_exports__=__webpack_require__.O(__webpack_exports__)})();